93 lines
2.3 KiB
Go
93 lines
2.3 KiB
Go
package tiktok
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"errors"
|
|
"fmt"
|
|
"git.rosy.net.cn/baseapi/utils"
|
|
"sort"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// 获取支付签名
|
|
func (a *API) Sign(paramsMap map[string]interface{}) string {
|
|
var paramsArr []string
|
|
for k, v := range paramsMap {
|
|
if k == "other_settle_params" || k == "app_id" || k == "sign" || k == "thirdparty_id " {
|
|
continue
|
|
}
|
|
value := strings.TrimSpace(fmt.Sprintf("%v", v))
|
|
if strings.HasPrefix(value, "\"") && strings.HasSuffix(value, "\"") && len(value) > 1 {
|
|
value = value[1 : len(value)-1]
|
|
}
|
|
value = strings.TrimSpace(value)
|
|
if value == "" || value == "nil" {
|
|
continue
|
|
}
|
|
switch k {
|
|
case "app_id", "thirdparty_id", "sign":
|
|
default:
|
|
paramsArr = append(paramsArr, value)
|
|
}
|
|
}
|
|
if a.clientKey == TiktokJXDJAppID {
|
|
paramsArr = append(paramsArr, salt2)
|
|
} else {
|
|
paramsArr = append(paramsArr, salt)
|
|
}
|
|
sort.Strings(paramsArr)
|
|
return fmt.Sprintf("%x", md5.Sum([]byte(strings.Join(paramsArr, "&"))))
|
|
}
|
|
|
|
// 抖音预发单
|
|
func (a *API) CreateOrderByTicktock(param *TickTokCreateOrder) (string, string, error) {
|
|
param.Sign = a.Sign(utils.Struct2FlatMap(param))
|
|
data, err := a.AccessAPI2(PayUrl, utils.Struct2FlatMap(param))
|
|
if err != nil {
|
|
return "", "", err
|
|
}
|
|
|
|
result := &PreOrderResult{}
|
|
if err := utils.Map2StructByJson(data, result, false); err != nil {
|
|
return "", "", err
|
|
}
|
|
if result.ErrNo != 0 {
|
|
return "", "", errors.New(result.ErrTips)
|
|
}
|
|
return result.Data.OrderId, result.Data.OrderToken, nil
|
|
}
|
|
|
|
// 获取抖音token
|
|
func (a *API) GetTiktokToken() error {
|
|
tokenReq := make(map[string]interface{}, 3)
|
|
tokenReq["appid"] = a.clientKey
|
|
tokenReq["secret"] = a.clientSecret
|
|
//tokenReq["appid"] = TiktokAppId
|
|
//tokenReq["secret"] = TiktokSecret
|
|
tokenReq["grant_type"] = "client_credential"
|
|
result, err := a.AccessAPI2(GetTiktokToken, tokenReq)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
accessToken := &AccessToken{}
|
|
if err := utils.Map2StructByJson(result, accessToken, false); err != nil {
|
|
return err
|
|
}
|
|
if accessToken.ErrNo != 0 {
|
|
return errors.New(accessToken.ErrTips)
|
|
}
|
|
a.msgToken = accessToken.Data.AccessToken
|
|
a.expiresIn = accessToken.Data.ExpiresIn
|
|
return nil
|
|
}
|
|
|
|
// 检查token是否过期
|
|
func (a *API) CheckTokenIsExist() error {
|
|
if a.msgToken == "" || time.Now().Unix() > a.expiresIn {
|
|
return a.GetTiktokToken()
|
|
}
|
|
return nil
|
|
}
|