2024-08-05 17:19:30 +08:00
|
|
|
|
package fliggy
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
2024-08-05 23:40:11 +08:00
|
|
|
|
"context"
|
|
|
|
|
|
"errors"
|
2024-08-05 17:19:30 +08:00
|
|
|
|
"fmt"
|
2024-08-05 23:40:11 +08:00
|
|
|
|
"net/url"
|
2024-08-05 17:19:30 +08:00
|
|
|
|
"repository.lenntc.com/lenntc/third-platform-sdk/sdk/fliggysdk/defaultability/domain"
|
|
|
|
|
|
"repository.lenntc.com/lenntc/third-platform-sdk/sdk/fliggysdk/defaultability/request"
|
2024-08-05 23:40:11 +08:00
|
|
|
|
"strings"
|
2024-08-05 17:19:30 +08:00
|
|
|
|
|
|
|
|
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// FliggyApi 飞猪平台
|
|
|
|
|
|
// Api defines the interface of fliggy api
|
|
|
|
|
|
type FliggyApi interface {
|
2024-08-05 23:40:11 +08:00
|
|
|
|
// GenerateH5Url 生成H5链接
|
|
|
|
|
|
GenerateH5Url(ctx context.Context, req GenerateH5UrlRequest) (string, error)
|
|
|
|
|
|
// GenerateWechatUrl 生成微信小程序链接
|
|
|
|
|
|
GenerateWechatUrl(ctx context.Context, req GenerateWechatUrlRequest) (string, error)
|
2024-08-05 17:19:30 +08:00
|
|
|
|
// FliggyPromoteOrdersList 飞猪分销订单列表
|
|
|
|
|
|
FliggyPromoteOrdersList(req *request.AlibabaFliggyPromoteOrdersListRequest) ([]*domain.AlibabaFliggyPromoteOrdersListOrder, error)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
type fliggyApiImpl struct {
|
|
|
|
|
|
log logx.Logger
|
|
|
|
|
|
client *Client
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func newFliggyApiImpl(log logx.Logger, client *Client) FliggyApi {
|
|
|
|
|
|
return &fliggyApiImpl{
|
|
|
|
|
|
log: log,
|
|
|
|
|
|
client: client,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-05 23:40:11 +08:00
|
|
|
|
// GenerateH5Url 生成H5推广链接
|
|
|
|
|
|
// 飞猪官方不支持H5取链,生成的H5url为小程序中间页URL
|
|
|
|
|
|
func (a *fliggyApiImpl) GenerateH5Url(ctx context.Context, req GenerateH5UrlRequest) (string, error) {
|
|
|
|
|
|
var activityUrl string
|
|
|
|
|
|
if len(req.ActivityUrl) == 0 {
|
|
|
|
|
|
return "", errors.New("url参数不能为空")
|
|
|
|
|
|
}
|
|
|
|
|
|
urls := strings.Split(req.ActivityUrl, "?")
|
|
|
|
|
|
if len(urls) == 1 {
|
|
|
|
|
|
activityUrl = fmt.Sprintf("%s?linkCode=%s&actId=%s", req.ActivityUrl, req.LinkCode, req.ActId)
|
|
|
|
|
|
return activityUrl, nil
|
|
|
|
|
|
} else if len(urls) == 2 {
|
|
|
|
|
|
activityUrl = fmt.Sprintf("%s&linkCode=%s&actId=%s", req.ActivityUrl, req.LinkCode, req.ActId)
|
|
|
|
|
|
return activityUrl, nil
|
|
|
|
|
|
} else {
|
|
|
|
|
|
return "", errors.New("url参数有误")
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// GenerateWechatUrl 生成微信小程序推广链接
|
|
|
|
|
|
func (a *fliggyApiImpl) GenerateWechatUrl(ctx context.Context, req GenerateWechatUrlRequest) (string, error) {
|
|
|
|
|
|
// 分两种类型的URL
|
|
|
|
|
|
// 1. 小程序路径为 pages/home/index 只处理fpsid的值即可
|
|
|
|
|
|
// 2. 小程序路径为 pages/main/webview 需要将小程序后面的参数url urldecode后 将fpsid填充 再次urlencode后拼接回 小程序路径后面?url=
|
|
|
|
|
|
urls := strings.Split("?", req.ActivityUrl)
|
|
|
|
|
|
if len(urls) < 2 {
|
|
|
|
|
|
return "", errors.New("活动链接错误")
|
|
|
|
|
|
}
|
|
|
|
|
|
newUrl := ""
|
|
|
|
|
|
switch urls[0] {
|
|
|
|
|
|
case "pages/home/index":
|
|
|
|
|
|
newUrl = strings.ReplaceAll(req.ActivityUrl, "fpsid=", fmt.Sprintf("fpsid=%s", req.FpSid))
|
|
|
|
|
|
case "pages/main/webview":
|
|
|
|
|
|
parsedURL, err := url.Parse(req.ActivityUrl)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return "", fmt.Errorf("error parsing url:%s", err.Error())
|
|
|
|
|
|
}
|
|
|
|
|
|
urlValue := parsedURL.Query().Get("url")
|
|
|
|
|
|
newUrlValue := strings.ReplaceAll(urlValue, "fpsid=", fmt.Sprintf("fpsid=%s", req.FpSid))
|
|
|
|
|
|
newUrl = fmt.Sprintf("pages/main/webview?url=%s", url.QueryEscape(newUrlValue))
|
|
|
|
|
|
}
|
|
|
|
|
|
return newUrl, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-05 17:19:30 +08:00
|
|
|
|
// FliggyPromoteOrdersList 飞猪分销订单列表
|
|
|
|
|
|
func (a *fliggyApiImpl) FliggyPromoteOrdersList(req *request.AlibabaFliggyPromoteOrdersListRequest) ([]*domain.AlibabaFliggyPromoteOrdersListOrder, error) {
|
|
|
|
|
|
resp, err := a.client.abilityClient.AlibabaFliggyPromoteOrdersList(req)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
a.log.WithFields(logx.LogField{Key: "data", Value: map[string]any{"req": req, "resp": resp}}).Errorf("[fliggyApiImpl][FliggyPromoteOrdersList] get promote orders failed, error: %v", err)
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if resp == nil {
|
|
|
|
|
|
return nil, fmt.Errorf("[fliggyApiImpl][FliggyPromoteOrdersList] get promote order list is empty")
|
|
|
|
|
|
}
|
|
|
|
|
|
var result []*domain.AlibabaFliggyPromoteOrdersListOrder
|
|
|
|
|
|
if resp.Model.List != nil {
|
|
|
|
|
|
for _, item := range *resp.Model.List {
|
|
|
|
|
|
entity := item
|
|
|
|
|
|
result = append(result, &entity)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return result, nil
|
|
|
|
|
|
}
|