Files
baseapi/platformapi/weixinapi/cgibin.go
suyl f746cd1023 aa
2021-06-17 14:32:39 +08:00

172 lines
5.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package weixinapi
import "git.rosy.net.cn/baseapi/utils"
const (
MaxRemarkByteCount = 30
ticketType = "wx_card"
authType = 0 //Int 是 授权类型0开票授权1填写字段开票授权2领票授权
//图片image、视频video、语音 voice、图文news
MaterialTypeImage = "image"
MaterialTypeVideo = "video"
MaterialTypeVoice = "voice"
MaterialTypeNews = "news"
)
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
}
type CBBatchgetMaterialResult struct {
Item []struct {
MediaID string `json:"media_id"`
Content struct {
NewsItem []struct {
Title string `json:"title"`
Author string `json:"author"`
Digest string `json:"digest"`
Content string `json:"content"`
ContentSourceURL string `json:"content_source_url"`
ThumbMediaID string `json:"thumb_media_id"`
ShowCoverPic int `json:"show_cover_pic"`
URL string `json:"url"`
ThumbURL string `json:"thumb_url"`
NeedOpenComment int `json:"need_open_comment"`
OnlyFansCanComment int `json:"only_fans_can_comment"`
} `json:"news_item"`
CreateTime int `json:"create_time"`
UpdateTime int `json:"update_time"`
} `json:"content"`
UpdateTime int `json:"update_time"`
} `json:"item"`
TotalCount int `json:"total_count"`
ItemCount int `json:"item_count"`
}
//获取素材列表
func (a *API) CBBatchgetMaterial(mediaType string, offset, count int) (ticketInfo *CBBatchgetMaterialResult, err error) {
bodyJson := map[string]interface{}{
"type": mediaType,
"offset": offset,
"count": count,
}
result, err := a.AccessAPI("cgi-bin/material/batchget_material", nil, string(utils.MustMarshal(bodyJson)))
if err == nil {
err = utils.Map2StructByJson(result, &ticketInfo, false)
}
return ticketInfo, err
}
//上传图片
func (a *API) CBUploadImg(data []byte, fileName, contentType string) (url string, err error) {
result, err := a.AccessAPIUpload(data, fileName, contentType)
if err == nil {
return result["url"].(string), err
}
return url, err
}