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

152 lines
5.2 KiB
Go
Raw Permalink Normal View History

2024-04-30 17:57:27 +08:00
package meituan_union
import (
"fmt"
"sort"
"strings"
"time"
2024-04-30 17:57:27 +08:00
"github.com/zeromicro/go-zero/core/logx"
"github.com/zywaited/xcopy"
2024-04-30 17:57:27 +08:00
2024-07-29 23:52:23 +08:00
"repository.lenntc.com/lenntc/third-platform-sdk/client"
"repository.lenntc.com/lenntc/third-platform-sdk/util"
2024-04-30 17:57:27 +08:00
)
2024-11-26 15:40:56 +08:00
// MeituanUnionApi 美团千载 平台的api
2024-04-30 17:57:27 +08:00
type MeituanUnionApi interface {
2024-05-01 14:55:19 +08:00
// Sign 签名
Sign(params map[string]interface{}) string
// NotifySign 通知签名
NotifySign(params map[string]interface{}) string
// GetLink 获取推广链接
2024-04-30 17:57:27 +08:00
GetLink(params GenerateLinkRequest) (*GenerateLinkResponse, error)
2024-05-01 14:55:19 +08:00
// MiniCode 获取小程序码
2024-04-30 17:57:27 +08:00
MiniCode(params MiniCodeRequest) (*MimiCodeResponse, error)
2024-05-01 14:55:19 +08:00
// GetOrderBySinge 获取单个订单
2024-04-30 17:57:27 +08:00
GetOrderBySinge(params GetOrderBySingeRequest) (*GetOrderBySingeResponse, error)
2024-05-01 14:55:19 +08:00
// GetOrderByBatch 批量获取订单
2024-04-30 17:57:27 +08:00
GetOrderByBatch(params GetOrderByBatchRequest) (*GetOrderByBatchResponse, error)
}
2024-04-30 18:30:05 +08:00
type meituanUnionApiImpl struct {
2024-04-30 17:57:27 +08:00
log logx.Logger
client *Client
}
2024-04-30 18:30:05 +08:00
func newMeituanUnionApiImpl(log logx.Logger, client *Client) MeituanUnionApi {
return &meituanUnionApiImpl{
2024-04-30 17:57:27 +08:00
log: log,
client: client,
}
}
2024-05-01 14:55:19 +08:00
// Sign 签名
func (a *meituanUnionApiImpl) Sign(params map[string]interface{}) string {
kvPairs := a.getSignStr(params)
sort.Strings(kvPairs)
paramStr := strings.Join(kvPairs, "")
return util.Md5String(a.client.authConfig.SignKey + paramStr + a.client.authConfig.SignKey)
}
// NotifySign 通知签名
func (a *meituanUnionApiImpl) NotifySign(params map[string]interface{}) string {
kvPairs := a.getSignStr(params)
sort.Strings(kvPairs)
paramStr := strings.Join(kvPairs, "")
return util.Md5String(a.client.authConfig.NotifyKey + paramStr + a.client.authConfig.NotifyKey)
}
// GetLink 获取推广链接
2024-04-30 18:30:05 +08:00
func (a *meituanUnionApiImpl) GetLink(params GenerateLinkRequest) (*GenerateLinkResponse, error) {
request := new(ThirdGenerateLinkRequest)
2024-05-15 22:54:19 +08:00
if err := xcopy.SetJSONTag(false).Copy(&request, params); err != nil {
a.log.WithFields().Errorf("[meituanUnionApiImpl][GetLink] copy request error: %v", err)
return nil, err
}
request.Sign = a.Sign(util.StructToMap(request))
queryArgs := util.StructToMap(request)
2024-04-30 17:57:27 +08:00
req := &client.HttpRequest{Headers: a.client.Headers, QueryArgs: queryArgs}
response := new(GenerateLinkResponse)
if err := a.client.HttpGet(GetLinkUrl, req, &client.HttpResponse{Result: response}); err != nil {
return nil, err
}
return response, nil
}
2024-05-01 14:55:19 +08:00
// MiniCode 获取小程序码
2024-04-30 18:30:05 +08:00
func (a *meituanUnionApiImpl) MiniCode(params MiniCodeRequest) (*MimiCodeResponse, error) {
request := new(ThirdMiniCodeRequest)
2024-05-15 22:54:19 +08:00
if err := xcopy.SetJSONTag(false).Copy(&request, params); err != nil {
a.log.WithFields().Errorf("[meituanUnionApiImpl][GetLink] copy request error: %v", err)
return nil, err
}
request.Sign = a.Sign(util.StructToMap(request))
queryArgs := util.StructToMap(request)
2024-04-30 17:57:27 +08:00
req := &client.HttpRequest{Headers: a.client.Headers, QueryArgs: queryArgs}
response := new(MimiCodeResponse)
2024-06-15 12:37:11 +08:00
if err := a.client.HttpGet(GetMiniCodeUrl, req, &client.HttpResponse{Result: response}); err != nil {
2024-04-30 17:57:27 +08:00
return nil, err
}
return response, nil
}
2024-05-01 14:55:19 +08:00
// GetOrderBySinge 获取单个订单
2024-04-30 18:30:05 +08:00
func (a *meituanUnionApiImpl) GetOrderBySinge(params GetOrderBySingeRequest) (*GetOrderBySingeResponse, error) {
request := new(ThirdGetOrderBySingeRequest)
2024-05-15 22:54:19 +08:00
if err := xcopy.SetJSONTag(false).Copy(&request, params); err != nil {
a.log.WithFields().Errorf("[meituanUnionApiImpl][GetLink] copy request error: %v", err)
return nil, err
}
request.Sign = a.Sign(util.StructToMap(request))
queryArgs := util.StructToMap(request)
2024-04-30 17:57:27 +08:00
req := &client.HttpRequest{Headers: a.client.Headers, QueryArgs: queryArgs}
2024-05-24 17:12:29 +08:00
// todo:: 返回完整的原始数据
2024-04-30 17:57:27 +08:00
response := new(GetOrderBySingeResponse)
2024-06-15 12:37:11 +08:00
if err := a.client.HttpGet(GetOrderSingeUrl, req, &client.HttpResponse{Result: response}); err != nil {
2024-04-30 17:57:27 +08:00
return nil, err
}
return response, nil
}
2024-05-01 14:55:19 +08:00
// GetOrderByBatch 批量获取订单
2024-04-30 18:30:05 +08:00
func (a *meituanUnionApiImpl) GetOrderByBatch(params GetOrderByBatchRequest) (*GetOrderByBatchResponse, error) {
fmt.Printf("params: %+v\n", util.StructToMap(params))
request := new(ThirdGetOrderByBatchRequest)
2024-05-15 22:54:19 +08:00
if err := xcopy.SetJSONTag(false).Copy(&request, params); err != nil {
a.log.WithFields().Errorf("[meituanUnionApiImpl][GetLink] copy request error: %v", err)
return nil, err
}
request.Ts = int32(time.Now().Unix())
request.Sign = a.Sign(util.StructToMap(request))
queryArgs := util.StructToMap(request)
fmt.Printf("queryArgs: %+v\n", queryArgs)
2024-04-30 17:57:27 +08:00
req := &client.HttpRequest{Headers: a.client.Headers, QueryArgs: queryArgs}
2024-05-24 17:12:29 +08:00
// todo:: 返回完整的原始数据
2024-04-30 17:57:27 +08:00
response := new(GetOrderByBatchResponse)
2024-06-15 12:37:11 +08:00
if err := a.client.HttpGet(GetOrderBatchUrl, req, &client.HttpResponse{Result: response}); err != nil {
a.log.Errorf("GetOrderByBatch error: %v", err)
2024-04-30 17:57:27 +08:00
return nil, err
}
return response, nil
}
2024-04-30 18:30:05 +08:00
func (a *meituanUnionApiImpl) getSignStr(dataMap map[string]any) []string {
2024-04-30 17:57:27 +08:00
var kvPairs []string
for k, v := range dataMap {
key := a.lowerFirstLetter(k)
if key == "sign" || key == "Sign" {
continue
}
kvPairs = append(kvPairs, fmt.Sprintf("%s%v", key, v))
}
return kvPairs
}
2024-04-30 18:30:05 +08:00
func (a *meituanUnionApiImpl) lowerFirstLetter(s string) string {
2024-04-30 17:57:27 +08:00
if len(s) == 0 {
return s
}
return strings.ToLower(string(s[0])) + s[1:]
}