Compare commits

..

2 Commits

Author SHA1 Message Date
yanfan
832a812e58 飞猪渠道支持H5 小程序取链接口 2024-08-05 23:40:11 +08:00
yanfan
23c4f451cc 修改index.go对飞猪渠道支持 2024-08-05 17:55:37 +08:00
3 changed files with 74 additions and 0 deletions

View File

@ -2,6 +2,7 @@ package third_platform_sdk
import ( import (
"github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/logx"
"repository.lenntc.com/lenntc/third-platform-sdk/platform/fliggy"
didiunion "repository.lenntc.com/lenntc/third-platform-sdk/platform/didi-union" didiunion "repository.lenntc.com/lenntc/third-platform-sdk/platform/didi-union"
elemeunion "repository.lenntc.com/lenntc/third-platform-sdk/platform/eleme-union" elemeunion "repository.lenntc.com/lenntc/third-platform-sdk/platform/eleme-union"
@ -31,6 +32,8 @@ const (
PlatformJutuike = "jutuike" PlatformJutuike = "jutuike"
// PlatformElongHotel 同程酒店 // PlatformElongHotel 同程酒店
PlatformElongHotel = "elong_hotel" PlatformElongHotel = "elong_hotel"
// PlatformFliggy 飞猪
PlatformFliggy = "fliggy"
) )
// PlatformNameMap 平台名称 // PlatformNameMap 平台名称
@ -43,6 +46,7 @@ var PlatformNameMap = map[string]string{
PlatformMeituanMedia: "美团-美天赚", PlatformMeituanMedia: "美团-美天赚",
PlatformJutuike: "聚推客", PlatformJutuike: "聚推客",
PlatformElongHotel: "同程酒店", PlatformElongHotel: "同程酒店",
PlatformFliggy: "飞猪",
} }
// GetPlatformName 获取平台名称 // GetPlatformName 获取平台名称
@ -89,3 +93,7 @@ func NewJutuikeApi(log logx.Logger, conf jutuike.AuthConfig) jutuike.JutuikeApi
func NewElongHotelApi(log logx.Logger, conf elonghotel.AuthConfig) elonghotel.ElongHotelApi { func NewElongHotelApi(log logx.Logger, conf elonghotel.AuthConfig) elonghotel.ElongHotelApi {
return elonghotel.NewApiClient(log, conf) return elonghotel.NewApiClient(log, conf)
} }
func NewFliggyApi(log logx.Logger, conf fliggy.AuthConfig) fliggy.FliggyApi {
return fliggy.NewApiClient(log, conf)
}

View File

@ -1,9 +1,13 @@
package fliggy package fliggy
import ( import (
"context"
"errors"
"fmt" "fmt"
"net/url"
"repository.lenntc.com/lenntc/third-platform-sdk/sdk/fliggysdk/defaultability/domain" "repository.lenntc.com/lenntc/third-platform-sdk/sdk/fliggysdk/defaultability/domain"
"repository.lenntc.com/lenntc/third-platform-sdk/sdk/fliggysdk/defaultability/request" "repository.lenntc.com/lenntc/third-platform-sdk/sdk/fliggysdk/defaultability/request"
"strings"
"github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/logx"
) )
@ -11,6 +15,10 @@ import (
// FliggyApi 飞猪平台 // FliggyApi 飞猪平台
// Api defines the interface of fliggy api // Api defines the interface of fliggy api
type FliggyApi interface { type FliggyApi interface {
// GenerateH5Url 生成H5链接
GenerateH5Url(ctx context.Context, req GenerateH5UrlRequest) (string, error)
// GenerateWechatUrl 生成微信小程序链接
GenerateWechatUrl(ctx context.Context, req GenerateWechatUrlRequest) (string, error)
// FliggyPromoteOrdersList 飞猪分销订单列表 // FliggyPromoteOrdersList 飞猪分销订单列表
FliggyPromoteOrdersList(req *request.AlibabaFliggyPromoteOrdersListRequest) ([]*domain.AlibabaFliggyPromoteOrdersListOrder, error) 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 飞猪分销订单列表 // FliggyPromoteOrdersList 飞猪分销订单列表
func (a *fliggyApiImpl) FliggyPromoteOrdersList(req *request.AlibabaFliggyPromoteOrdersListRequest) ([]*domain.AlibabaFliggyPromoteOrdersListOrder, error) { func (a *fliggyApiImpl) FliggyPromoteOrdersList(req *request.AlibabaFliggyPromoteOrdersListRequest) ([]*domain.AlibabaFliggyPromoteOrdersListOrder, error) {
resp, err := a.client.abilityClient.AlibabaFliggyPromoteOrdersList(req) resp, err := a.client.abilityClient.AlibabaFliggyPromoteOrdersList(req)

View File

@ -10,3 +10,17 @@ type PublicParam struct {
Format string // 否 返回内容响应格式。不传默认为xml格式可选值xmljson。 Format string // 否 返回内容响应格式。不传默认为xml格式可选值xmljson。
Simplify bool // 否 是否采用精简JSON返回格式仅当format=json时有效可选值falsetrue不传为false。 Simplify bool // 否 是否采用精简JSON返回格式仅当format=json时有效可选值falsetrue不传为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
}