代码拉取完成,页面将自动刷新
package base
import (
"time"
"github.com/gogf/gf/container/gvar"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/os/gcache"
)
//AccessToken
type AccessToken struct {
Cache *gcache.Cache
// Appid string
// Secret string
TokenKey string //请求结果中
RequestTokenKey string //请求时的 获取token key 与请求时不一致时设置,例如第三方平台带小程序公众号请求
isRefresh bool
CacheKey string
Credentials TokenCredentail
EndPoint string
RequestPostMethod bool
Client *Client
}
type Token struct {
}
//GetToken
func (at *AccessToken) GetToken(refresh ...bool) string {
if len(refresh) > 0 && refresh[0] {
at = at.Refresh()
}
//cache refresh
if token, err := at.Cache.Get(at.CacheKey); err != nil {
panic(err.Error())
} else {
if token != nil && !at.isRefresh {
return gvar.New(token).String()
}
}
return at.requestToken()
}
//GetTokenKey
func (at *AccessToken) GetTokenKey() string {
return at.TokenKey
}
//GetRequestTokenKey
func (at *AccessToken) GetRequestTokenKey() string {
if at.RequestTokenKey == "" {
return at.TokenKey
}
return at.RequestTokenKey
}
//Refresh
func (at *AccessToken) Refresh() *AccessToken {
at.isRefresh = true
return at
}
//SetToken
func (at *AccessToken) SetToken(token string, lifetime time.Duration) *AccessToken {
if err := at.Cache.Set(at.CacheKey, token, lifetime); err != nil {
panic(err.Error())
}
if _, err := at.Cache.Contains(at.CacheKey); err != nil {
panic("Failed to cache access token.")
}
return at
}
func (at *AccessToken) requestToken() string {
var v *gjson.Json
if at.RequestPostMethod {
v = at.Client.RequestJson("POST", at.EndPoint, at.Credentials.Get())
} else {
v = at.Client.RequestJson("GET", at.EndPoint, at.Credentials.Get())
}
if have := v.Contains(at.TokenKey); have {
at.SetToken(v.GetString(at.TokenKey), v.GetDuration("expires_in", 7200)*time.Second)
return v.GetString(at.TokenKey)
} else {
return ""
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。