From 90bad61d0af0d13152756a109245636b55116f6d Mon Sep 17 00:00:00 2001 From: wukesheng Date: Thu, 1 Aug 2024 23:44:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E7=A8=8B=E9=85=92=E5=BA=97=EF=BC=9A?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=9F=E6=88=90h5=E9=93=BE=E6=8E=A5api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platform/elong-hotel/api.go | 55 +++++++++++++++++++++++--------- platform/elong-hotel/api_test.go | 24 +++++++++++--- platform/elong-hotel/client.go | 1 + platform/elong-hotel/types.go | 22 +++++++++++-- 4 files changed, 80 insertions(+), 22 deletions(-) diff --git a/platform/elong-hotel/api.go b/platform/elong-hotel/api.go index 2ecac95..b82caa6 100644 --- a/platform/elong-hotel/api.go +++ b/platform/elong-hotel/api.go @@ -9,6 +9,7 @@ import ( "time" "github.com/zeromicro/go-zero/core/logx" + "github.com/zywaited/xcopy" "repository.lenntc.com/lenntc/third-platform-sdk/client" "repository.lenntc.com/lenntc/third-platform-sdk/util" @@ -19,8 +20,10 @@ import ( type ElongHotelApi interface { // GetExternalChannelConfig 获取渠道配置信息 GetExternalChannelConfig(ctx context.Context, req GetExternalChannelConfigRequest, env string) (*ExternalChannelConfigResponse, error) - // GenerateUrl 生成链接 - GenerateUrl(ctx context.Context, req GenerateUrlRequest) (string, error) + // GenerateWechatUrl 生成微信小程序链接 + GenerateWechatUrl(ctx context.Context, req GenerateWechatUrlRequest) (string, error) + // GenerateH5Url 生成H5链接 + GenerateH5Url(ctx context.Context, req GenerateH5UrlRequest) (string, error) // QueryOrderList 查询订单列表 QueryOrderList(ctx context.Context, req QueryOrderListRequest, env string) (*ExternalOrderData, error) } @@ -37,9 +40,9 @@ func newElongHotelApiImpl(log logx.Logger, client *Client) ElongHotelApi { } } -// GenerateLink 生成短链 +// GetExternalChannelConfig 生成短链 func (t *elongHotelApiImpl) GetExternalChannelConfig(ctx context.Context, req GetExternalChannelConfigRequest, env string) (*ExternalChannelConfigResponse, error) { - var url string + var apiUrl string token := t.client.authConfig.Token tn := time.Now() actionTime := tn.Unix() @@ -55,11 +58,11 @@ func (t *elongHotelApiImpl) GetExternalChannelConfig(ctx context.Context, req Ge request := &client.HttpRequest{Headers: t.client.headers, QueryArgs: args} response := new(GetExternalChannelConfigResponse) if env == EnvHuidu { - url = HDApiDomain + GetLinkUri + apiUrl = HDApiDomain + GetLinkUri } else { - url = ApiDomain + GetLinkUri + apiUrl = ApiDomain + GetLinkUri } - if err := t.client.HttpGet(url, request, &client.HttpResponse{Result: response}); err != nil { + if err := t.client.HttpGet(apiUrl, request, &client.HttpResponse{Result: response}); err != nil { return nil, err } if response.Code != 200 { @@ -70,8 +73,8 @@ func (t *elongHotelApiImpl) GetExternalChannelConfig(ctx context.Context, req Ge return response.Data, nil } -// GenerateUrl 生成链接 -func (t *elongHotelApiImpl) GenerateUrl(ctx context.Context, req GenerateUrlRequest) (string, error) { +// GenerateWechatUrl 生成微信小程序链接 +func (t *elongHotelApiImpl) GenerateWechatUrl(ctx context.Context, req GenerateWechatUrlRequest) (string, error) { if len(req.ActivityUrl) == 0 { return "", errors.New("url参数不能为空") } @@ -95,23 +98,45 @@ func (t *elongHotelApiImpl) GenerateUrl(ctx context.Context, req GenerateUrlRequ srcUrl.RawQuery = srcParams.Encode() newSrc := url.QueryEscape(srcUrl.String()) urlParams.Set("src", newSrc) - urlParams.Add("isRefresh", "refresh") + urlSrc := fmt.Sprintf("src=%s", newSrc) + urlParams.Del("src") + u.RawQuery = fmt.Sprintf("%s&%s", urlSrc, urlParams.Encode()) + return u.String(), nil +} + +// GenerateH5Url 生成H5链接 +func (t *elongHotelApiImpl) GenerateH5Url(ctx context.Context, req GenerateH5UrlRequest) (string, error) { + if len(req.ActivityUrl) == 0 { + return "", errors.New("url参数不能为空") + } + u, err := url.Parse(req.ActivityUrl) + if err != nil { + return "", errors.New("activityUrl不是一个url") + } + urlParams := u.Query() + urlParams.Set("linkCode", req.LinkCode) + urlParams.Set("actId", req.ActId) u.RawQuery = urlParams.Encode() return u.String(), nil } // QueryOrderList 查询订单列表 func (t *elongHotelApiImpl) QueryOrderList(ctx context.Context, req QueryOrderListRequest, env string) (*ExternalOrderData, error) { - var url string - args := util.StructToMap(req) + var apiUrl string + var apiReq *QueryOrderListReq + if err := xcopy.Copy(&apiReq, req); err != nil { + return nil, err + } + apiReq.AppId = t.client.authConfig.AppId + args := util.StructToMap(apiReq) request := &client.HttpRequest{Headers: t.client.headers, QueryArgs: args} response := new(GetExternalOrderResp) if env == EnvHuidu { - url = HDApiDomain + GetOrderListUri + apiUrl = HDApiDomain + GetOrderListUri } else { - url = ApiDomain + GetOrderListUri + apiUrl = ApiDomain + GetOrderListUri } - if err := t.client.HttpGet(url, request, &client.HttpResponse{Result: response}); err != nil { + if err := t.client.HttpGet(apiUrl, request, &client.HttpResponse{Result: response}); err != nil { return nil, err } if response.Code != 200 { diff --git a/platform/elong-hotel/api_test.go b/platform/elong-hotel/api_test.go index 833939c..cef9617 100644 --- a/platform/elong-hotel/api_test.go +++ b/platform/elong-hotel/api_test.go @@ -44,12 +44,13 @@ func (a *apiClientSuite) Test_GenerateLink() { a.T().Logf("=====[Test_GenerateLink] result: %s", string(resultByte)) } -func (a *apiClientSuite) Test_GenerateUrl() { - req := GenerateUrlRequest{ - ActivityUrl: "/page/home/webview/webview?src=https%3A%2F%2Fmp.elong.com%2Ftenthousandaura%2F%3Factivitycode%3D5fd89a11-7b58-4f5c-8dc9-c360936d4207%26of%3D99810010", +func (a *apiClientSuite) Test_GenerateWechtUrl() { + req := GenerateWechatUrlRequest{ + //ActivityUrl: "/page/home/webview/webview?src=https%3A%2F%2Fmp.elong.com%2Ftenthousandaura%2F%3Factivitycode%3D5fd89a11-7b58-4f5c-8dc9-c360936d4207%26of%3D99810010", + ActivityUrl: "/page/home/webview/webview?src=https%3A%2F%2Fmp.elong.com%2Ftenthousandaura%2F%3Factivitycode%3D73086812-aaae-48ba-b14a-f087a6b61a92%26isSocket%3DHotelActivityId_9043%26of%3D5027785&isRefresh=refresh&isSocket=HotelActivityId_9043", Uid: "11111111111111111", } - result, err := a.api.GenerateUrl(context.Background(), req) + result, err := a.api.GenerateWechatUrl(context.Background(), req) if !a.NoError(err) { a.T().Errorf("========[Test_GenerateUrl] response error:%s", err) return @@ -57,9 +58,22 @@ func (a *apiClientSuite) Test_GenerateUrl() { a.T().Logf("=====[Test_GenerateUrl] result: %s", string(result)) } +func (a *apiClientSuite) Test_GenerateH5Url() { + req := GenerateH5UrlRequest{ + ActivityUrl: "http://www.baidu.com/page/miniprogram?src=asfsfsiwef", + LinkCode: "ffaefe3r3434334trq34", + ActId: "100006", + } + result, err := a.api.GenerateH5Url(context.Background(), req) + if !a.NoError(err) { + a.T().Errorf("========[Test_GenerateH5Url] response error:%s", err) + return + } + a.T().Logf("=====[Test_GenerateH5Url] result: %s", string(result)) +} + func (a *apiClientSuite) Test_QueryOrderList() { req := QueryOrderListRequest{ - AppId: "", Trackid: "", BeginDate: "2024-07-01 00:00:00", EndDate: "2024-07-01 23:59:59", diff --git a/platform/elong-hotel/client.go b/platform/elong-hotel/client.go index bf90f05..1bfc51e 100644 --- a/platform/elong-hotel/client.go +++ b/platform/elong-hotel/client.go @@ -9,6 +9,7 @@ import ( // AuthConfig api鉴权参数 type AuthConfig struct { Token string // 分配的token + AppId string // 应用id (getExternalChannelConfig接口返回的appId) } // 连接第三方平台的client diff --git a/platform/elong-hotel/types.go b/platform/elong-hotel/types.go index 51a8c35..f4df199 100644 --- a/platform/elong-hotel/types.go +++ b/platform/elong-hotel/types.go @@ -44,14 +44,32 @@ type OtherActivityUrl struct { ActivityUrl string `json:"activityUrl"` // 渠道方合作页地址 } -// GenerateUrlReq 生成链接的请求 -type GenerateUrlRequest struct { +// GenerateWechatUrlRequest 生成微信小程序链接的请求 +type GenerateWechatUrlRequest struct { ActivityUrl string `json:"activityUrl"` // 活动url Uid string `json:"uid"` // 用户id } +// GenerateH5UrlRequest 生成H5链接请求 +type GenerateH5UrlRequest struct { + ActivityUrl string `json:"activityUrl"` // 活动url + LinkCode string `json:"linkCode"` // 链接code + ActId string `json:"actId"` // 活动id +} + // 获取外部订单请求 type QueryOrderListRequest struct { + Trackid string `json:"trackid"` // 必传,跟踪id,排查问题使用,guid即可 + BeginDate string `json:"begin_date"` // 订单更新时间查询起始,精确到秒, yyyy-MM-dd HH:mm:ss(除了传订单号外,其他查询必传) + EndDate string `json:"end_date"` // 订单更新时间查询结束,精确到秒, yyyy-MM-dd HH:mm:ss(除了传订单号外,其他查询必传) + OrderId string `json:"order_id"` // 指定订单号查询,返回该订单的最新详情 + Update int32 `json:"update"` // 0:仅已支付的订单, 1:所有状态订单, 默认查所有传1 + PageIndex int32 `json:"page_index"` // 分页index,从0开始(除了传订单号外,其他查询必传) + PageSize int32 `json:"page_size"` // 分页条数(除了传订单号外,其他查询必传) +} + +// 获取外部订单请求 +type QueryOrderListReq struct { AppId string `json:"appId"` // 必传,分配token查询接口提供的appId(getExternalChannelConfig接口返回的appId) Trackid string `json:"trackid"` // 必传,跟踪id,排查问题使用,guid即可 BeginDate string `json:"begin_date"` // 订单更新时间查询起始,精确到秒, yyyy-MM-dd HH:mm:ss(除了传订单号外,其他查询必传)