package weixinapi import "git.rosy.net.cn/baseapi/utils" const ( MaxRemarkByteCount = 30 ticketType = "wx_card" authType = 0 //Int 是 授权类型,0:开票授权,1:填写字段开票授权,2:领票授权 ) 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"` } type CBTicketInfo struct { Errcode int `json:"errcode"` Errmsg string `json:"errmsg"` Ticket string `json:"ticket"` ExpiresIn int `json:"expires_in"` } 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 } //获取授权页ticket func (a *API) CBGetTicketInfo() (ticketInfo *CBTicketInfo, err error) { bodyJson := map[string]interface{}{ "type": ticketType, } result, err := a.AccessAPI("cgi-bin/ticket/getticket", bodyJson, "") if err == nil { err = utils.Map2StructByJson(result, &ticketInfo, false) } return ticketInfo, err }