1
0
mirror of https://github.com/silenceper/wechat.git synced 2026-02-04 12:52:27 +08:00

Merge pull request #80 from ckeyer/suport_user_list

add list user openids
This commit is contained in:
silenceper
2018-12-21 13:39:36 +08:00
committed by GitHub

View File

@@ -3,6 +3,7 @@ package user
import (
"encoding/json"
"fmt"
"net/url"
"github.com/silenceper/wechat/context"
"github.com/silenceper/wechat/util"
@@ -11,6 +12,7 @@ import (
const (
userInfoURL = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=%s&openid=%s&lang=zh_CN"
updateRemarkURL = "https://api.weixin.qq.com/cgi-bin/user/info/updateremark?access_token=%s"
userListURL = "https://api.weixin.qq.com/cgi-bin/user/get"
)
//User 用户管理
@@ -45,6 +47,16 @@ type Info struct {
TagidList []int32 `json:"tagid_list"`
}
// OpenidList 用户列表
type OpenidList struct {
Total int `json:"total"`
Count int `json:"count"`
Data struct {
OpenIDs []string `json:"openid"`
} `json:"data"`
NextOpenID string `json:"next_openid"`
}
//GetUserInfo 获取用户基本信息
func (user *User) GetUserInfo(openID string) (userInfo *Info, err error) {
var accessToken string
@@ -88,3 +100,52 @@ func (user *User) UpdateRemark(openID, remark string) (err error) {
return util.DecodeWithCommonError(response, "UpdateRemark")
}
// ListUserOpenIDs 返回用户列表
func (user *User) ListUserOpenIDs(nextOpenid ...string) (*OpenidList, error) {
accessToken, err := user.GetAccessToken()
if err != nil {
return nil, err
}
uri, _ := url.Parse(userListURL)
q := uri.Query()
q.Set("access_token", accessToken)
if len(nextOpenid) > 0 && nextOpenid[0] != "" {
q.Set("next_openid", nextOpenid[0])
}
uri.RawQuery = q.Encode()
response, err := util.HTTPGet(uri.String())
if err != nil {
return nil, err
}
userlist := new(OpenidList)
err = json.Unmarshal(response, userlist)
if err != nil {
return nil, err
}
return userlist, nil
}
// ListAllUserOpenIDs 返回所有用户OpenID列表
func (user *User) ListAllUserOpenIDs() ([]string, error) {
nextOpenid := ""
openids := []string{}
count := 0
for {
ul, err := user.ListUserOpenIDs(nextOpenid)
if err != nil {
return nil, err
}
openids = append(openids, ul.Data.OpenIDs...)
count += ul.Count
if ul.Total > count {
nextOpenid = ul.NextOpenID
} else {
return openids, nil
}
}
}