third-platform-sdk/platform/jd-union/api.go
2025-05-16 18:02:51 +08:00

169 lines
5.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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,
}
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
}