From 832a812e58b2fa9f3f074ee9c9014c9d38a0aff8 Mon Sep 17 00:00:00 2001 From: yanfan <1406317364@qq.com> Date: Mon, 5 Aug 2024 23:40:11 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A3=9E=E7=8C=AA=E6=B8=A0=E9=81=93=E6=94=AF?= =?UTF-8?q?=E6=8C=81H5=20=E5=B0=8F=E7=A8=8B=E5=BA=8F=E5=8F=96=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platform/fliggy/api.go | 52 ++++++++++++++++++++++++++++++++++++++++ platform/fliggy/types.go | 14 +++++++++++ 2 files changed, 66 insertions(+) diff --git a/platform/fliggy/api.go b/platform/fliggy/api.go index 905d38e..f6e227a 100644 --- a/platform/fliggy/api.go +++ b/platform/fliggy/api.go @@ -1,9 +1,13 @@ package fliggy import ( + "context" + "errors" "fmt" + "net/url" "repository.lenntc.com/lenntc/third-platform-sdk/sdk/fliggysdk/defaultability/domain" "repository.lenntc.com/lenntc/third-platform-sdk/sdk/fliggysdk/defaultability/request" + "strings" "github.com/zeromicro/go-zero/core/logx" ) @@ -11,6 +15,10 @@ import ( // FliggyApi 飞猪平台 // Api defines the interface of fliggy api type FliggyApi interface { + // GenerateH5Url 生成H5链接 + GenerateH5Url(ctx context.Context, req GenerateH5UrlRequest) (string, error) + // GenerateWechatUrl 生成微信小程序链接 + GenerateWechatUrl(ctx context.Context, req GenerateWechatUrlRequest) (string, error) // FliggyPromoteOrdersList 飞猪分销订单列表 FliggyPromoteOrdersList(req *request.AlibabaFliggyPromoteOrdersListRequest) ([]*domain.AlibabaFliggyPromoteOrdersListOrder, error) } @@ -27,6 +35,50 @@ func newFliggyApiImpl(log logx.Logger, client *Client) FliggyApi { } } +// 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 +} + // FliggyPromoteOrdersList 飞猪分销订单列表 func (a *fliggyApiImpl) FliggyPromoteOrdersList(req *request.AlibabaFliggyPromoteOrdersListRequest) ([]*domain.AlibabaFliggyPromoteOrdersListOrder, error) { resp, err := a.client.abilityClient.AlibabaFliggyPromoteOrdersList(req) diff --git a/platform/fliggy/types.go b/platform/fliggy/types.go index 5d1353c..5bdb353 100644 --- a/platform/fliggy/types.go +++ b/platform/fliggy/types.go @@ -10,3 +10,17 @@ type PublicParam struct { Format string // 否 返回内容响应格式。不传默认为xml格式,可选值:xml,json。 Simplify bool // 否 是否采用精简JSON返回格式,仅当format=json时有效,可选值:false,true,不传为false。 } + +// GenerateWechatUrlRequest 生成微信小程序链接的请求 +type GenerateWechatUrlRequest struct { + ActivityUrl string `json:"activityUrl"` // 活动url + FpSid string `json:"fpsid"` // 二级分销ID +} + +// GenerateH5UrlRequest 生成H5链接请求 +type GenerateH5UrlRequest struct { + ActivityUrl string `json:"activityUrl"` // 活动url + FpSid string `json:"fpSid"` // 二级分销ID + LinkCode string `json:"linkCode"` // 链接code + ActId string `json:"actId"` // 活动id +}