Files
baseapi/platformapi/tiktok_shop/tiktok_api/api.go
邹宗楠 31a3dce31b 抖店api
2022-09-30 16:15:31 +08:00

141 lines
3.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"
)
type API struct {
appKey string
appSecret string
accessToken string
refreshToken string
expiresIn int64 // 当前时间的七天内为有效期
locker sync.RWMutex
accessTokenObj *doudian_sdk.AccessToken // 存储数据库
}
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
}
}
doudian_sdk.GlobalConfig.AppKey = appKey
doudian_sdk.GlobalConfig.AppSecret = appSecret
return &API{
appKey: appKey,
appSecret: appSecret,
accessToken: access.AccessToken,
refreshToken: access.RefreshToken,
expiresIn: access.ExpiresIn,
accessTokenObj: access,
}
}
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 = time.Now().Unix() + access.ExpiresIn
a.accessTokenObj = access
// 不要
strData, _ := json.Marshal(access)
globals.SugarLogger.Debug("=========", string(strData))
return &access.CreateTokenData, nil
}
// RefreshToken 刷新token
func (a *API) RefreshToken() (*doudian_sdk.CreateTokenData, error) {
doudian_sdk.GlobalConfig.AppKey = a.appKey
doudian_sdk.GlobalConfig.AppSecret = a.appSecret
refresh := doudian_sdk.NewRefreshTokenRequest()
refresh.GetParam().RefreshToken = a.refreshToken
refresh.GetParam().GrantType = "refresh_token"
createToken, err := refresh.Execute(a.accessTokenObj)
if err != nil {
return nil, err
}
a.accessToken = createToken.Data.AccessToken
a.refreshToken = createToken.Data.RefreshToken
a.expiresIn = time.Now().Unix() + createToken.Data.ExpiresIn
a.accessTokenObj.CreateTokenData = createToken.Data
// 不要
strData, _ := json.Marshal(createToken.Data)
globals.SugarLogger.Debug("=========", string(strData))
return &createToken.Data, nil
}
func (a *API) SetToken(token string) {
a.locker.Lock()
defer a.locker.Unlock()
var access *doudian_sdk.AccessToken
if err := json.Unmarshal([]byte(token), &access); err != nil {
return
}
a.accessToken = token
}
func (a *API) SetRefreshToken(token string) {
a.locker.Lock()
defer a.locker.Unlock()
a.refreshToken = token
}
// GetAppId 获取appid
func (a *API) GetAppId() string {
a.locker.Lock()
defer a.locker.Unlock()
return a.appKey
}
func (a *API) SetAccessToken(token string) {
a.locker.Lock()
defer a.locker.Unlock()
var access *doudian_sdk.AccessToken
if err := json.Unmarshal([]byte(token), &access); err != nil {
return
}
a.accessTokenObj = access
return
}