Files
baseapi/platformapi/tiktok/tiktok_pay.go
2025-11-21 09:09:09 +08:00

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
}