diff --git a/service/meituan/generate_link.go b/service/meituan/generate_link.go index b8262b56..7e97577e 100644 --- a/service/meituan/generate_link.go +++ b/service/meituan/generate_link.go @@ -21,7 +21,7 @@ func NewGenerateLinkResult(result GenerateLinkResponse, body []byte, err error) return &GenerateLinkResult{Result: result, Body: body, Err: err} } -// GenerateLink 自助取链接口 +// GenerateLink 自助取链接口(新版) // https://union.meituan.com/v2/apiDetail?id=25 func (app *App) GenerateLink(actId int64, sid string, linkType, shortLink int) *GenerateLinkResult { // 参数 diff --git a/service/meituan/getqualityscorebysid.go b/service/meituan/getqualityscorebysid.go new file mode 100644 index 00000000..8bf7e908 --- /dev/null +++ b/service/meituan/getqualityscorebysid.go @@ -0,0 +1,48 @@ +package meituan + +import ( + "encoding/json" + "gopkg.in/dtapps/go-library.v3/utils/gotime" + "net/http" +) + +type GetQuaLitYsCoreBySidResponse struct { + Status int `json:"status"` + Des string `json:"des"` + Data struct { + DataList []struct { + Appkey string `json:"appkey"` // appkey + Sid string `json:"sid"` // 推广位sid + Date string `json:"date"` // 质量分归属日期 + QualityGrade string `json:"qualityGrade"` // 质量分 + RepurchaseRate string `json:"repurchaseRate"` // sid维度的七日复购率 + } `json:"dataList"` + Total int `json:"total"` + } `json:"data"` +} +type GetQuaLitYsCoreBySidResult struct { + Result GetQuaLitYsCoreBySidResponse // 结果 + Body []byte // 内容 + Err error // 错误 +} + +func NewGetQuaLitYsCoreBySidResult(result GetQuaLitYsCoreBySidResponse, body []byte, err error) *GetQuaLitYsCoreBySidResult { + return &GetQuaLitYsCoreBySidResult{Result: result, Body: body, Err: err} +} + +// GetQuaLitYsCoreBySid 优选sid质量分&复购率查询 +// https://union.meituan.com/v2/apiDetail?id=28 +func (app *App) GetQuaLitYsCoreBySid(notMustParams ...Params) *GetQuaLitYsCoreBySidResult { + // 参数 + params := app.NewParamsWith(notMustParams...) + // 请求时刻10位时间戳(秒级),有效期60s + params["ts"] = gotime.Current().Timestamp() + params["appkey"] = app.AppKey + params["sign"] = app.getSign(app.Secret, params) + // 请求 + body, err := app.request("https://openapi.meituan.com/api/getqualityscorebysid", params, http.MethodGet) + // 定义 + var response GetQuaLitYsCoreBySidResponse + err = json.Unmarshal(body, &response) + return NewGetQuaLitYsCoreBySidResult(response, body, err) +} diff --git a/service/meituan/mini_code.go b/service/meituan/mini_code.go index 6a5e0ffc..803e5ebb 100644 --- a/service/meituan/mini_code.go +++ b/service/meituan/mini_code.go @@ -21,7 +21,7 @@ func NewMiniCodeResult(result MiniCodeResponse, body []byte, err error) *MiniCod return &MiniCodeResult{Result: result, Body: body, Err: err} } -// MiniCode 小程序二维码生成 +// MiniCode 小程序生成二维码(新版) // https://union.meituan.com/v2/apiDetail?id=26 func (app *App) MiniCode(actId int64, sid string) *MiniCodeResult { // 参数 diff --git a/service/meituan/order.go b/service/meituan/order.go new file mode 100644 index 00000000..6a977dce --- /dev/null +++ b/service/meituan/order.go @@ -0,0 +1,60 @@ +package meituan + +import ( + "encoding/json" + "net/http" +) + +type OrderResponse struct { + Status int `json:"status"` + Des string `json:"des"` + Data struct { + BusinessLine int `json:"businessLine"` // 业务线 + SubBusinessLine int `json:"subBusinessLine"` // 子业务线 + ActId int `json:"actId"` // 活动id,可以在联盟活动列表中查看获取 + Quantity int `json:"quantity"` // 商品数量 + OrderId string `json:"orderId"` // 订单id + Paytime string `json:"paytime"` // 订单支付时间,10位时间戳 + ModTime string `json:"modTime"` // 订单信息修改时间,10位时间戳 + Payprice string `json:"payprice"` // 订单用户实际支付金额 + Profit string `json:"profit,omitempty"` // 订单预估返佣金额 + CpaProfit string `json:"cpaProfit,omitempty"` // 订单预估cpa总收益(优选、话费券) + Sid string `json:"sid"` // 订单对应的推广位sid + Appkey string `json:"appkey"` // 订单对应的appkey,外卖、话费、闪购、优选、酒店订单会返回该字段 + Smstitle string `json:"smstitle"` // 订单标题 + Status int `json:"status"` // 订单状态,外卖、话费、闪购、优选、酒店订单会返回该字段 1 已付款 8 已完成 9 已退款或风控 + TradeTypeList []int `json:"tradeTypeList"` // 订单的奖励类型 3 首购奖励 5 留存奖励 2 cps 3 首购奖励 + RiskOrder int `json:"riskOrder"` // 0表示非风控订单,1表示风控订单 + Refundprofit string `json:"refundprofit,omitempty"` // 订单需要扣除的返佣金额,外卖、话费、闪购、优选、酒店订单若发生退款会返回该字段 + CpaRefundProfit interface{} `json:"cpaRefundProfit"` // 订单需要扣除的cpa返佣金额(优选、话费券) + RefundInfoList interface{} `json:"refundInfoList"` // 退款列表 + RefundProfitList interface{} `json:"refundProfitList"` + Extra interface{} `json:"extra"` + } `json:"data"` +} + +type OrderResult struct { + Result OrderResponse // 结果 + Body []byte // 内容 + Err error // 错误 +} + +func NewOrderResult(result OrderResponse, body []byte, err error) *OrderResult { + return &OrderResult{Result: result, Body: body, Err: err} +} + +// Order 单订单查询接口(新版) +// https://union.meituan.com/v2/apiDetail?id=24 +func (app *App) Order(notMustParams ...Params) *OrderResult { + // 参数 + params := app.NewParamsWith(notMustParams...) + // 请求时刻10位时间戳(秒级),有效期60s + params["appkey"] = app.AppKey + params["sign"] = app.getSign(app.Secret, params) + // 请求 + body, err := app.request("https://openapi.meituan.com/api/order", params, http.MethodGet) + // 定义 + var response OrderResponse + err = json.Unmarshal(body, &response) + return NewOrderResult(response, body, err) +} diff --git a/service/meituan/order_list.go b/service/meituan/order_list.go index 1455a9f4..59ce9d97 100644 --- a/service/meituan/order_list.go +++ b/service/meituan/order_list.go @@ -6,35 +6,29 @@ import ( "net/http" ) -// OrderList 请求参数 -type OrderList struct { - Type string `json:"type"` // 查询订单类型 0 团购订单 2 酒店订单 4 外卖订单 5 话费&团好货订单 6 闪购订单 8 优选订单 - StartTime string `json:"startTime"` // 查询起始时间10位时间戳,以下单时间为准 - EndTime string `json:"endTime"` // 查询截止时间10位时间戳,以下单时间为准 - Page string `json:"page"` // 分页参数,起始值从1开始 - Limit string `json:"limit"` // 每页显示数据条数,最大值为100 - QueryTimeType string `json:"queryTimeType,omitempty"` // 查询时间类型,枚举值 1 按订单支付时间查询 2 按订单发生修改时间查询 -} - type OrderListResponse struct { DataList []struct { - Orderid string `json:"orderid"` // 订单id - Paytime string `json:"paytime"` // 订单支付时间,10位时间戳 - Payprice string `json:"payprice"` // 订单用户实际支付金额 - Profit string `json:"profit"` // 订单预估返佣金额 - CpaProfit string `json:"cpaProfit"` // 订单预估cpa总收益(优选、话费券) - Sid string `json:"sid"` // 订单对应的推广位sid - Appkey string `json:"appkey,omitempty"` // 订单对应的appkey,外卖、话费、闪购、优选订单会返回该字段 - Smstitle string `json:"smstitle"` // 订单标题 - Refundprice string `json:"refundprice,omitempty"` // 订单实际退款金额,外卖、话费、闪购、优选、酒店订单若发生退款会返回该字段 - Refundtime string `json:"refundtime,omitempty"` // 订单退款时间,10位时间戳,外卖、话费、闪购、优选、酒店订单若发生退款会返回该字段 - Refundprofit string `json:"refundprofit,omitempty"` // 订单需要扣除的返佣金额,外卖、话费、闪购、优选、酒店订单若发生退款会返回该字段 - CpaRefundProfit string `json:"cpaRefundProfit"` // 订单需要扣除的cpa返佣金额(优选、话费券) - Status string `json:"status,omitempty"` // 订单状态,外卖、话费、闪购、优选、酒店订单会返回该字段 1 已付款 8 已完成 9 已退款或风控 - TradeTypeList []interface{} `json:"tradeTypeList,omitempty"` // 订单的奖励类型 话费订单类型返回该字段 3 首购奖励 5 留存奖励 优选订单类型返回该字段 2 cps 3 首购奖励 - TradeTypeBusinessTypeMapStr string `json:"tradeTypeBusinessTypeMapStr"` // 奖励类型对应平台类型的映射 格式:{3:[3,5]} value的枚举值:1 外卖 2 分销酒店 3 平台 4 券类型酒店 5 团好货 6 优选 - RiskOrder string `json:"riskOrder,omitempty"` // 0表示正常退款,1表示风控退款,订单状态为退款时有效 - } `json:"dataList"` // 订单列表 + Orderid string `json:"orderid"` // 订单id + Paytime string `json:"paytime"` // 订单支付时间,10位时间戳 + Payprice string `json:"payprice"` // 订单用户实际支付金额 + Sid string `json:"sid"` // 订单对应的推广位sid + Smstitle string `json:"smstitle"` // 订单标题 + Appkey string `json:"appkey"` // 订单对应的appkey,外卖、话费、闪购、优选订单会返回该字段 + Status int `json:"status"` // 订单状态,外卖、话费、闪购、优选、酒店订单会返回该字段 1 已付款 8 已完成 9 已退款或风控 + Profit string `json:"profit"` // 订单预估返佣金额 + CpaProfit string `json:"cpaProfit"` // 订单预估cpa总收益(优选、话费券) + Refundtime string `json:"refundtime"` // 订单退款时间,10位时间戳,外卖、话费、闪购、优选、酒店订单若发生退款会返回该字段(退款时间为最近的一次退款) + Refundprice string `json:"refundprice"` // 订单实际退款金额,外卖、话费、闪购、优选、酒店订单若发生退款会返回该字段 + Refundprofit string `json:"refundprofit"` // 订单需要扣除的返佣金额,外卖、话费、闪购、优选、酒店订单若发生退款会返回该字段 + CpaRefundProfit string `json:"cpaRefundProfit"` // 订单需要扣除的cpa返佣金额(优选、话费券) + Extra string `json:"extra"` + TradeTypeList []int `json:"tradeTypeList"` // 订单的奖励类型 3 首购奖励 5 留存奖励 2 cps 3 首购奖励 + TradeTypeBusinessTypeMapStr string `json:"tradeTypeBusinessTypeMapStr"` + RiskOrder int `json:"riskOrder"` // 0表示非风控订单,1表示风控订单 + BusinessLine int `json:"businessLine"` // 业务线 + SubBusinessLine int `json:"subBusinessLine"` // 子业务线 + ActId int `json:"actId"` // 活动id,可以在联盟活动列表中查看获取 + } `json:"dataList"` Total int `json:"total"` // 查询条件命中的总数据条数,用于计算分页参数 } @@ -48,16 +42,17 @@ func NewOrderListResult(result OrderListResponse, body []byte, err error) *Order return &OrderListResult{Result: result, Body: body, Err: err} } -// OrderList 订单列表查询(新) -// https://union.meituan.com/v2/apiDetail?id=1 +// OrderList 订单列表查询接口(新版) +// https://union.meituan.com/v2/apiDetail?id=23 func (app *App) OrderList(notMustParams ...Params) *OrderListResult { // 参数 params := app.NewParamsWith(notMustParams...) // 请求时刻10位时间戳(秒级),有效期60s params["ts"] = gotime.Current().Timestamp() - params["key"] = app.AppKey + params["appkey"] = app.AppKey params["sign"] = app.getSign(app.Secret, params) - body, err := app.request("https://runion.meituan.com/api/orderList", params, http.MethodGet) + // 请求 + body, err := app.request("https://openapi.meituan.com/api/orderList", params, http.MethodGet) // 定义 var response OrderListResponse err = json.Unmarshal(body, &response) diff --git a/service/meituan/sign.go b/service/meituan/sign.go index 149e5bf9..9745b5d3 100644 --- a/service/meituan/sign.go +++ b/service/meituan/sign.go @@ -11,6 +11,8 @@ import ( "strconv" ) +// 签名(sign)生成逻辑(新版) +// https://union.meituan.com/v2/apiDetail?id=27 func (app *App) getSign(Secret string, params map[string]interface{}) string { // 参数按照参数名的字典升序排列 var keys []string