From ae1b0565152fb2370e2b56a98536499102f807e5 Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 31 May 2023 21:55:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=85=AC=E4=BC=97=E5=8F=B7:=20?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E8=8E=B7=E5=8F=96=E7=94=A8=E6=88=B7=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E3=80=82=20(#686)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 公众号: 批量获取用户信息。 * update: 公众号: 调整批量获取用户方法的输入参数。 * update: 公众号: 调整批量获取用户方法的输入参数。 --- officialaccount/user/user.go | 54 ++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/officialaccount/user/user.go b/officialaccount/user/user.go index ebbafc90c..fedfcbcdf 100644 --- a/officialaccount/user/user.go +++ b/officialaccount/user/user.go @@ -2,6 +2,7 @@ package user import ( "encoding/json" + "errors" "fmt" "net/url" @@ -10,9 +11,10 @@ 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" + userInfoURL = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=%s&openid=%s&lang=zh_CN" + userInfoBatchURL = "https://api.weixin.qq.com/cgi-bin/user/info/batchget" + 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 用户管理 @@ -30,7 +32,11 @@ func NewUser(context *context.Context) *User { // Info 用户基本信息 type Info struct { util.CommonError + userInfo +} +// 用户基本信息 +type userInfo struct { Subscribe int32 `json:"subscribe"` OpenID string `json:"openid"` Nickname string `json:"nickname"` @@ -88,6 +94,48 @@ func (user *User) GetUserInfo(openID string) (userInfo *Info, err error) { return } +// BatchGetUserInfoParams 批量获取用户基本信息参数 +type BatchGetUserInfoParams struct { + UserList []BatchGetUserListItem `json:"user_list"` // 需要批量获取基本信息的用户列表 +} + +// BatchGetUserListItem 需要获取基本信息的用户 +type BatchGetUserListItem struct { + OpenID string `json:"openid"` // 用户的标识,对当前公众号唯一 + Lang string `json:"lang"` // 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语,默认为zh-CN +} + +// InfoList 用户基本信息列表 +type InfoList struct { + util.CommonError + UserInfoList []userInfo `json:"user_info_list"` +} + +// BatchGetUserInfo 批量获取用户基本信息 +func (user *User) BatchGetUserInfo(params BatchGetUserInfoParams) (*InfoList, error) { + if len(params.UserList) > 100 { + return nil, errors.New("params length must be less than or equal to 100") + } + + ak, err := user.GetAccessToken() + if err != nil { + return nil, err + } + + uri := fmt.Sprintf("%s?access_token=%s", userInfoBatchURL, ak) + res, err := util.PostJSON(uri, params) + if err != nil { + return nil, err + } + + var data InfoList + err = util.DecodeWithError(res, &data, "BatchGetUserInfo") + if err != nil { + return nil, err + } + return &data, nil +} + // UpdateRemark 设置用户备注名 func (user *User) UpdateRemark(openID, remark string) (err error) { var accessToken string