third-platform-sdk/platform/fliggy/api.go
2024-08-09 23:26:23 +08:00

101 lines
3.6 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 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"
)
// 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)
}
type fliggyApiImpl struct {
log logx.Logger
client *Client
}
func newFliggyApiImpl(log logx.Logger, client *Client) FliggyApi {
return &fliggyApiImpl{
log: log,
client: client,
}
}
// 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)
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
}