third-platform-sdk/platform/jd-union/api.go

172 lines
5.1 KiB
Go
Raw Normal View History

2025-05-15 17:59:51 +08:00
package jd_union
import (
"encoding/json"
"fmt"
"github.com/spf13/cast"
"github.com/zeromicro/go-zero/core/logx"
"repository.lenntc.com/lenntc/third-platform-sdk/client"
"repository.lenntc.com/lenntc/third-platform-sdk/util"
"sort"
"strings"
"time"
)
// JdUnionApi 京东联盟平台
type JdUnionApi interface {
// Sign 签名
Sign(data map[string]interface{}) string
// QueryOrderList 查询订单列表
QueryOrderList(req QueryOrderListRequest) (*QueryOrderListResponse, error)
// PromotionLink 转链
PromotionLink(PromotionLinkRequest) (*PromotionLinkResponse, error)
}
type jdUnionApiImpl struct {
log logx.Logger
client *Client
params map[string]any
}
func newJdUnionApiImpl(log logx.Logger, client *Client) JdUnionApi {
return &jdUnionApiImpl{
log: log,
client: client,
params: map[string]any{
"method": "",
"access_token": "",
"app_key": client.authConfig.AppKey,
"sign_method": SignMethod,
"timestamp": time.Now().Format(time.DateTime),
"360buy_param_json": "",
"v": Version,
},
}
}
func (t *jdUnionApiImpl) Sign(data map[string]any) string {
// key排序
arr := sort.StringSlice{}
for k := range data {
if k == "sign" {
continue
}
arr = append(arr, k)
}
arr.Sort()
// 参数拼接
var build strings.Builder
build.WriteString(t.client.authConfig.AppSecret)
for _, k := range arr {
build.WriteString(fmt.Sprintf("%s%v", k, data[k]))
}
build.WriteString(t.client.authConfig.AppSecret)
return strings.ToUpper(util.Md5String(build.String()))
}
func (t *jdUnionApiImpl) QueryOrderList(req QueryOrderListRequest) (*QueryOrderListResponse, error) {
params := make(map[string]any)
if req.OrderId != "" {
params["orderId"] = req.OrderId
} else {
params["pageIndex"] = req.PageIndex
params["pageSize"] = req.PageSize
params["type"] = req.Type
params["startTime"] = req.StartTime
params["endTime"] = req.EndTime
}
requestPrams := map[string]any{
"orderReq": params,
}
paramsJson, _ := json.Marshal(requestPrams)
SystemParams := t.params
SystemParams["method"] = QueryOrderListMethod
SystemParams["360buy_param_json"] = string(paramsJson)
SystemParams["sign"] = t.Sign(SystemParams)
//values := url.Values{}
//for key, value := range SystemParams {
// values.Set(key, cast.ToString(value))
//}
//fmt.Println(fmt.Sprintf("%s?%s", BaseUrl, values.Encode()))
requestUrl := BaseUrl
request := &client.HttpRequest{Headers: t.client.headers, QueryArgs: SystemParams}
response := new(JdUnionOpenOrderRowQueryResponse)
if err := t.client.HttpPost(requestUrl, request, &client.HttpResponse{Result: response}); err != nil {
return nil, err
}
if response == nil {
return nil, nil
}
if response.ErrorResponse != nil {
return nil, fmt.Errorf("京东联盟请求订单接口响应错误Code[%s]请求ID[%s],错误信息:%s", response.ErrorResponse.Code, response.ErrorResponse.RequestId, response.ErrorResponse.ZhDesc)
}
if response.JdUnionOpenOrderRowQueryResponse == nil {
return nil, nil
}
if cast.ToInt64(response.JdUnionOpenOrderRowQueryResponse.Code) != 0 {
return nil, nil
}
resp := new(QueryOrderListResponse)
err := json.Unmarshal([]byte(response.JdUnionOpenOrderRowQueryResponse.QueryResult), resp)
if err != nil {
return nil, fmt.Errorf("京东联盟请求订单接口解析QueryResult失败错误信息%s", err.Error())
}
return resp, nil
}
// 转链
func (t *jdUnionApiImpl) PromotionLink(req PromotionLinkRequest) (*PromotionLinkResponse, error) {
params := map[string]any{
"materialId": req.MaterialId,
"positionId": req.PositionId,
"siteId": req.SiteId,
}
if req.PositionId > 0 {
params["positionId"] = req.PositionId
}
requestPrams := map[string]any{
"promotionCodeReq": params,
}
paramsJson, _ := json.Marshal(requestPrams)
SystemParams := t.params
SystemParams["method"] = PromotionLinkMethod
SystemParams["360buy_param_json"] = string(paramsJson)
SystemParams["sign"] = t.Sign(SystemParams)
//values := url.Values{}
//for key, value := range SystemParams {
// values.Set(key, cast.ToString(value))
//}
//fmt.Println(fmt.Sprintf("%s?%s", BaseUrl, values.Encode()))
requestUrl := BaseUrl
request := &client.HttpRequest{Headers: t.client.headers, QueryArgs: SystemParams}
response := new(JdUnionOpenPromotionCommonGetResponse)
if err := t.client.HttpPost(requestUrl, request, &client.HttpResponse{Result: response}); err != nil {
return nil, err
}
if response == nil {
return nil, nil
}
if response.ErrorResponse != nil {
return nil, fmt.Errorf("京东联盟请求转链接口响应错误Code[%s]请求ID[%s],错误信息:%s", response.ErrorResponse.Code, response.ErrorResponse.RequestId, response.ErrorResponse.ZhDesc)
}
if response.JdUnionOpenPromotionCommonGetResponse == nil {
return nil, nil
}
if cast.ToInt64(response.JdUnionOpenPromotionCommonGetResponse.Code) != 0 {
return nil, nil
}
resp := new(PromotionLinkResponse)
err := json.Unmarshal([]byte(response.JdUnionOpenPromotionCommonGetResponse.GetResult), resp)
if err != nil {
return nil, fmt.Errorf("京东联盟请求转链接口解析GetResult失败错误信息%s", err.Error())
}
return resp, nil
}