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 }