Files
baseapi/platformapi/tiktok_shop/tiktok_api/api.go
邹宗楠 167de3cae6 1
2022-09-01 15:51:23 +08:00

107 lines
2.6 KiB
Go

package tiktok_api
import (
"encoding/json"
doudian_sdk "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/core"
"git.rosy.net.cn/jx-callback/globals"
"sync"
"time"
)
const (
CallbackSuccessCode = 0
CallbackSuccess = "success"
CallbackFailCode = 1000
CallbackFail = "fail"
)
var AccessToken *doudian_sdk.AccessToken // 存储数据库
type API struct {
appKey string
appSecret string
accessToken string
refreshToken string
expiresIn int64
locker sync.RWMutex
}
func New(appKey, appSecret, accessToken string) *API {
var access *doudian_sdk.AccessToken
if accessToken != "" {
if err := json.Unmarshal([]byte(accessToken), &access); err != nil {
globals.SugarLogger.Debug("accessToken init err :", err)
return nil
} else {
AccessToken = access
}
}
return &API{
appKey: appKey,
appSecret: appSecret,
}
}
func (a *API) GetToken() string {
if a.expiresIn != 0 && a.expiresIn > time.Now().Unix() && a.accessToken != "" {
return a.accessToken
} else {
if _, err := a.RefreshToken(); err != nil {
globals.SugarLogger.Debug("Tiktok RefreshToken Err : ", err)
return ""
}
return a.accessToken
}
}
// CreateToken 创建token只有第一次授权或者更新授权才需要,其他时候直接刷新就可以啦
func (a *API) CreateToken(code string) (*doudian_sdk.CreateTokenData, error) {
doudian_sdk.GlobalConfig.AppKey = a.appKey
doudian_sdk.GlobalConfig.AppSecret = a.appSecret
buildParam := &doudian_sdk.BuildAccessTokenParam{
Code: code, // 定死还是自动获取
ShopId: 0,
Config: nil,
}
access, err := doudian_sdk.BuildAccessToken(buildParam)
if err != nil {
return nil, err
}
a.accessToken = access.AccessToken
a.refreshToken = access.RefreshToken
a.expiresIn = access.ExpiresIn
AccessToken = access
return &access.CreateTokenData, nil
}
// RefreshToken 刷新token
func (a *API) RefreshToken() (*doudian_sdk.CreateTokenData, error) {
refresh := doudian_sdk.NewRefreshTokenRequest()
refresh.GetParam().RefreshToken = a.refreshToken
refresh.GetParam().GrantType = "refresh_token"
createToken, err := refresh.Execute(AccessToken)
if err != nil {
return nil, err
}
a.accessToken = createToken.Data.AccessToken
a.refreshToken = createToken.Data.RefreshToken
a.expiresIn = createToken.Data.ExpiresIn
AccessToken.CreateTokenData = createToken.Data
return &createToken.Data, nil
}
func (a *API) SetToken(token string) {
a.locker.Lock()
defer a.locker.Unlock()
a.accessToken = token
}
func (a *API) SetRefreshToken(token string) {
a.locker.Lock()
defer a.locker.Unlock()
a.refreshToken = token
}