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 }