96 lines
2.7 KiB
Go
96 lines
2.7 KiB
Go
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
|
|
}
|