package weixinapi import "git.rosy.net.cn/baseapi/utils" const ( MaxRemarkByteCount = 30 ) type CBUserInfo struct { Subscribe int `json:"subscribe"` OpenID string `json:"openid"` Nickname string `json:"nickname"` Sex int `json:"sex"` Language string `json:"language"` City string `json:"city"` Province string `json:"province"` Country string `json:"country"` HeadImgURL string `json:"headimgurl"` SubscribeTime int64 `json:"subscribe_time"` UnionID string `json:"unionid"` Remark string `json:"remark"` TagIDList []int `json:"tagid_list"` SubscribeScene string `json:"subscribe_scene"` QRScene int `json:"qr_scene"` QRSceneStr string `json:"qr_scene_str"` } func (a *API) CBSetToken(newToken string) bool { curToken := a.CBGetToken() if curToken != newToken { a.locker.Lock() defer a.locker.Unlock() a.token = newToken return true } return false } func (a *API) CBGetToken() string { a.locker.RLock() defer a.locker.RUnlock() return a.token } func (a *API) CBRetrieveToken() (tokenInfo *TokenInfo, err error) { result, err := a.AccessAPI("cgi-bin/token", utils.Params2Map("grant_type", "client_credential"), "") if err != nil { return nil, err } tokenInfo = &TokenInfo{ AccessToken: utils.Interface2String(result["access_token"]), ExpiresIn: int(utils.MustInterface2Int64(result["expires_in"])), } a.CBSetToken(tokenInfo.AccessToken) return tokenInfo, nil } func (a *API) CBMessageTemplateSend(userOpenID, templateID, downloadURL string, miniProgram, data interface{}) (err error) { bodyJson := map[string]interface{}{ "touser": userOpenID, "template_id": templateID, "url": downloadURL, "data": data, } if downloadURL != "" { bodyJson["url"] = downloadURL } if miniProgram != nil { bodyJson["miniprogram"] = miniProgram } _, err = a.AccessAPI("cgi-bin/message/template/send", nil, string(utils.MustMarshal(bodyJson))) return err } // remark的字节数不超过30个字节 func (a *API) CBUpdateRemark(userOpenID, remark string) (err error) { bodyJson := map[string]interface{}{ "openid": userOpenID, "remark": utils.LimitMixedStringLen(remark, MaxRemarkByteCount), } _, err = a.AccessAPI("cgi-bin/user/info/updateremark", nil, string(utils.MustMarshal(bodyJson))) return err } func (a *API) CBGetUserInfo(userOpenID string) (userInfo *CBUserInfo, err error) { bodyJson := map[string]interface{}{ "openid": userOpenID, "lang": "zh_CN", } result, err := a.AccessAPI("cgi-bin/user/info", bodyJson, "") if err == nil { err = utils.Map2StructByJson(result, &userInfo, false) } return userInfo, err }