third-platform-sdk/platform/didi-union/api.go
2024-07-29 23:52:23 +08:00

236 lines
11 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 didi_union
import (
"context"
"errors"
"fmt"
"time"
"github.com/zeromicro/go-zero/core/logx"
"github.com/zywaited/xcopy"
"repository.lenntc.com/lenntc/third-platform-sdk/sdk/dunion-go-sdk/model"
sdkutil "repository.lenntc.com/lenntc/third-platform-sdk/sdk/dunion-go-sdk/util"
)
// todo:: 定义统一的返回错误结构
// DidiUnionApi 调用第三方平台的api
// Api defines the interface of didi_union api
type DidiUnionApi interface {
// Sign 签名
Sign(data map[string]interface{}) string
// GenerateH5Link 生成h5推广链接
GenerateH5Link(ctx context.Context, req GenerateLinkRequest, opt model.Option) (*GenerateLinkResponse, error)
// GenerateMiniLink 生成小程序页面推广路径
GenerateMiniLink(ctx context.Context, req GenerateLinkRequest, opt model.Option) (*GenerateLinkResponse, error)
// GenerateAlipayMiniLink 生成支付宝小程序页面推广路径
GenerateAlipayMiniLink(ctx context.Context, req GenerateLinkRequest, opt model.Option) (*GenerateLinkResponse, error)
// GenerateH5Code 生成h5二维码需先取链得到dsi
GenerateH5Code(ctx context.Context, req GenerateCodeRequest, opt model.Option) (*GenerateCodeResponse, error)
// GenerateMiniCode 生成小程序太阳码需先取链得到dsi
GenerateMiniCode(ctx context.Context, req GenerateCodeRequest, opt model.Option) (*GenerateCodeResponse, error)
// GeneratePoster 生成推广海报需先取链得到dsi
GeneratePoster(ctx context.Context, req GeneratePosterRequest, opt model.Option) (*GeneratePosterResponse, error)
// QueryOrderList 查询订单列表
QueryOrderList(ctx context.Context, req QueryOrderListRequest, opt model.Option) (*QueryOrderListResponse, error)
// SelfQueryOrder 订单归因问题自查询
SelfQueryOrder(ctx context.Context, req SelfQueryOrderRequest, opt model.Option) (*SelfQueryOrderResponse, error)
}
type didiUnionApiImpl struct {
log logx.Logger
client *Client
}
func newDidiUnionApiImpl(log logx.Logger, client *Client) DidiUnionApi {
return &didiUnionApiImpl{
log: log,
client: client,
}
}
// Sign 签名
func (d *didiUnionApiImpl) Sign(params map[string]any) string {
params[sdkutil.AppKey] = d.client.authConfig.AppKey
params[sdkutil.Timestamp] = fmt.Sprintf("%d", time.Now().Unix())
sign := sdkutil.GetSign(params, d.client.authConfig.AppSecret)
return sign
}
// GenerateH5Link 生成h5推广链接
func (d *didiUnionApiImpl) GenerateH5Link(ctx context.Context, req GenerateLinkRequest, opt model.Option) (*GenerateLinkResponse, error) {
resp, err := d.client.clt.GenerateH5Link(ctx, req.ActivityID, req.PromotionID, req.SourceID, opt)
if err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GenerateH5Link] get link http request error, error: %v", err)
return nil, err
}
if resp.Errno > 0 {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GenerateH5Link] get link error, error: %v", resp.ErrorMsg())
return nil, errors.New(resp.ErrMsg)
}
var result *GenerateLinkResponse
if err := xcopy.SetJSONTag(false).Copy(&result, resp.Data); err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GenerateH5Link] copy resp to result error, error: %v", err)
return nil, errors.New(resp.ErrMsg)
}
return result, nil
}
// GenerateMiniLink 生成小程序页面推广路径
func (d *didiUnionApiImpl) GenerateMiniLink(ctx context.Context, req GenerateLinkRequest, opt model.Option) (*GenerateLinkResponse, error) {
resp, err := d.client.clt.GenerateMiniLink(ctx, req.ActivityID, req.PromotionID, req.SourceID, opt)
if err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GenerateMiniLink] http request error, error: %v", err)
return nil, err
}
if resp.Errno > 0 {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GenerateMiniLink] get link error, error: %v", resp.ErrorMsg())
return nil, errors.New(resp.ErrMsg)
}
var result *GenerateLinkResponse
if err := xcopy.SetJSONTag(false).Copy(&result, resp.Data); err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GenerateMiniLink] copy resp to result error, error: %v", err)
return nil, errors.New(resp.ErrMsg)
}
return result, nil
}
// GenerateAlipayMiniLink 生成小程序页面推广路径
func (d *didiUnionApiImpl) GenerateAlipayMiniLink(ctx context.Context, req GenerateLinkRequest, opt model.Option) (*GenerateLinkResponse, error) {
resp, err := d.client.clt.GenerateAlipayMiniLink(ctx, req.ActivityID, req.PromotionID, req.SourceID, opt)
if err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GenerateAlipayMiniLink] http request error, error: %v", err)
return nil, err
}
if resp.Errno > 0 {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GenerateAlipayMiniLink] get link error, error: %v", resp.ErrorMsg())
return nil, errors.New(resp.ErrMsg)
}
var result *GenerateLinkResponse
if err := xcopy.SetJSONTag(false).Copy(&result, resp.Data); err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GenerateAlipayMiniLink] copy resp to result error, error: %v", err)
return nil, errors.New(resp.ErrMsg)
}
return result, nil
}
// GenerateH5Code 生成h5二维码需先取链得到dsi
func (d *didiUnionApiImpl) GenerateH5Code(ctx context.Context, req GenerateCodeRequest, opt model.Option) (*GenerateCodeResponse, error) {
resp, err := d.client.clt.GenerateH5Code(ctx, req.Dsi, req.SourceID, opt)
if err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GenerateH5Code] http request error, error: %v", err)
return nil, err
}
if resp.Errno > 0 {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GenerateH5Code] get h5 code error, error: %v", resp.ErrorMsg())
return nil, errors.New(resp.ErrMsg)
}
var result *GenerateCodeResponse
if err := xcopy.SetJSONTag(false).Copy(&result, resp.Data); err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GenerateH5Code] copy resp to result error, error: %v", err)
return nil, errors.New(resp.ErrMsg)
}
return result, nil
}
// GenerateMiniCode 生成小程序太阳码需先取链得到dsi
func (d *didiUnionApiImpl) GenerateMiniCode(ctx context.Context, req GenerateCodeRequest, opt model.Option) (*GenerateCodeResponse, error) {
resp, err := d.client.clt.GenerateMiniCode(ctx, req.Dsi, req.SourceID, opt)
if err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GenerateMiniCode] http request error, error: %v", err)
return nil, err
}
if resp.Errno > 0 {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GenerateMiniCode] get mini code error, error: %v", resp.ErrorMsg())
return nil, errors.New(resp.ErrMsg)
}
var result *GenerateCodeResponse
if err := xcopy.SetJSONTag(false).Copy(&result, resp.Data); err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GenerateMiniCode] copy resp to result error, error: %v", err)
return nil, errors.New(resp.ErrMsg)
}
return result, nil
}
// GeneratePoster 生成推广海报需先取链得到dsi
func (d *didiUnionApiImpl) GeneratePoster(ctx context.Context, req GeneratePosterRequest, opt model.Option) (*GeneratePosterResponse, error) {
resp, err := d.client.clt.GeneratePoster(ctx, req.Dsi, req.SourceID, opt)
if err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GeneratePoster] http request error, error: %v", err)
return nil, err
}
if resp.Errno > 0 {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GeneratePoster] generate poster error, error: %v", resp.ErrorMsg())
return nil, errors.New(resp.ErrMsg)
}
var result *GeneratePosterResponse
if err := xcopy.SetJSONTag(false).Copy(&result, resp.Data); err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][GeneratePoster] copy resp to result error, error: %v", err)
return nil, errors.New(resp.ErrMsg)
}
return result, nil
}
// QueryOrderList 查询订单列表
func (d *didiUnionApiImpl) QueryOrderList(ctx context.Context, req QueryOrderListRequest, opt model.Option) (*QueryOrderListResponse, error) {
resp, err := d.client.clt.QueryOrderList(ctx, req.StartTime, req.EndTime, string(req.Typ), req.Page, req.Size, opt)
if err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][QueryOrderList] http request error, error: %v", err)
return nil, err
}
if resp.Errno > 0 {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][QueryOrderList] get order list error, error: %v", resp.ErrorMsg())
return nil, errors.New(resp.ErrMsg)
}
var result *QueryOrderListResponse
if err := xcopy.SetJSONTag(false).Copy(&result, resp.Data); err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][QueryOrderList] copy resp to result error, error: %v", err)
return nil, errors.New(resp.ErrMsg)
}
return result, nil
}
// SelfQueryOrder 订单归因问题自查询
func (d *didiUnionApiImpl) SelfQueryOrder(ctx context.Context, req SelfQueryOrderRequest, opt model.Option) (*SelfQueryOrderResponse, error) {
resp, err := d.client.clt.SelfQueryOrder(ctx, req.OrderID, opt)
if err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][SelfQueryOrder] http request error, error: %v", err)
return nil, err
}
if resp.Errno > 0 {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][SelfQueryOrder] query self order error, error: %v", resp.ErrorMsg())
return nil, errors.New(resp.ErrMsg)
}
var result *SelfQueryOrderResponse
if err := xcopy.SetJSONTag(false).Copy(&result, resp.Data); err != nil {
d.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).
Errorf("[didiUnionApiImpl][SelfQueryOrder] copy resp to result error, error: %v", err)
return nil, errors.New(resp.ErrMsg)
}
return result, nil
}