1 Star 1 Fork 0

窦雪峰 / go-utils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
access_token.go 1.67 KB
一键复制 编辑 原始数据 按行查看 历史
/*
* @Author: i@douxuefeng.cn
* @Date: 2021-10-31 16:32:16
* @LastEditTime: 2021-11-15 23:44:54
* @LastEditors: i@douxuefeng.cn
* @Description:
* @FilePath: \go-utils\wechat\mp\access_token\access_token.go
*/
package access_token
import (
"encoding/json"
"fmt"
"gitee.com/douxuefeng/go-utils/request"
"gitee.com/douxuefeng/go-utils/wechat/mp/mpconfig"
"gitee.com/douxuefeng/go-utils/wechat/mp/params"
"github.com/sirupsen/logrus"
)
const (
accessTokenKey = "wx_access_token"
akUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential"
)
type AccessToken struct {
*mpconfig.MpConfig
}
func NewAccessToken(ak *mpconfig.MpConfig) *AccessToken {
return &AccessToken{ak}
}
func (ak *AccessToken) GetAccessToken() string {
if !ak.Cache.IsExist(accessTokenKey) {
ak.GetAccessTokenFromTencent()
}
token := ak.Cache.Get(accessTokenKey)
if token == nil {
// 如果未在缓存中获取token 重新获取
ak.Cache.Del(accessTokenKey)
return ak.GetAccessToken()
}
return token.(string)
}
// 强制从腾讯服务器获取token
func (ak *AccessToken) GetAccessTokenFromTencent() error {
// 执行写操作 ,阻塞其他
ak.Mutex.Lock()
defer ak.Mutex.Unlock()
var err error
url := akUrl + fmt.Sprintf("&appid=%s&secret=%s", ak.AppId, ak.AppSecret)
req := request.NewRequest()
res, err := req.Get(url)
if err != nil {
logrus.Error(err)
return err
}
var data params.AccessTokenResponse
err = json.Unmarshal(res.Body(), &data)
if data.Errcode != 0 {
logrus.Errorf("获取access_token失败,错误原因是%s\n", data.Errmsg)
return err
}
ak.Cache.Set(accessTokenKey, data.AccessToken, data.ExpiresIn-params.Expired)
return nil
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/douxuefeng/go-utils.git
git@gitee.com:douxuefeng/go-utils.git
douxuefeng
go-utils
go-utils
v0.1.5

搜索帮助

344bd9b3 5694891 D2dac590 5694891