package tm import ( "context" "encoding/json" "github.com/gogf/gf/container/garray" "github.com/gogf/gf/encoding/gjson" "github.com/gogf/gf/util/gconv" ) type orderTm struct { } var Order = orderTm{} type OrderGoodsItem struct { ItemId string `json:"ItemId"` SkuId string `json:"SkuId"` Quantity string `json:"Quantity"` } type OrderAddress struct { DivisionCode string `json:"DivisionCode"` FullName string `json:"FullName"` Mobile string `json:"Mobile"` AddressDetail string `json:"AddressDetail"` } type OrderBeforeRes struct { Code string `json:"Code"` Message string `json:"Message"` RequestId string `json:"RequestId"` Success bool `json:"Success"` Model struct { RenderOrderInfos struct { RenderOrderInfos []struct { LmItemInfos struct { LmItemInfos []struct { ItemId int64 `json:"ItemId"` Quantity int `json:"Quantity"` CanSell bool `json:"CanSell"` SkuId int64 `json:"SkuId"` Message string `json:"Message"` ItemName string `json:"ItemName"` } `json:"LmItemInfos"` } `json:"LmItemInfos"` DeliveryInfos struct { DeliveryInfos []struct { ServiceType int `json:"ServiceType"` Id string `json:"Id"` PostFee int64 `json:"PostFee"` DisplayName string `json:"string"` } `json:"DeliveryInfos"` } `json:"DeliveryInfos"` } `json:"RenderOrderInfos"` } `json:"RenderOrderInfos"` } `json:"Model"` } //Before 验证订单商品 func (s *orderTm) Before(ctx context.Context, addr OrderAddress, itemLists []OrderGoodsItem) (res *OrderBeforeRes, err error) { method := "renderOrder" request := convert("ItemList", gconv.Maps(itemLists)) request["DeliveryAddress"] = gjson.New(addr).MustToJsonString() request["BizUid"] = server.BizUid request["AccountType"] = typeEp result, err := post(ctx, method, request) _ = json.Unmarshal([]byte(result), &res) return } type OrderCreateReq struct { AppID interface{} ChannelOrder string Address *OrderAddress ItemLists []OrderGoodsItem } type OrderCreateRes struct { Code string `json:"Code"` Message string `json:"Message"` RequestId string `json:"RequestId"` Success bool `json:"Success"` Model struct { OrderIds struct { OrderIds []string `json:"OrderIds"` } `json:"OrderIds"` PayTradeIds struct { PayTradeIds []string `json:"PayTradeIds"` } `json:"PayTradeIds"` LmOrderList struct { LmOrderList []struct { LmOrderId string `json:"LmOrderId"` } `json:"LmOrderList"` } `json:"LmOrderList"` } `json:"Model"` } //Create 下单接口 func (s *Config) Create(ctx context.Context, req OrderCreateReq) (res *OrderCreateRes, err error) { method := "createOrderV2" request := convert("ItemList", gconv.Maps(req.ItemLists)) request["DeliveryAddress"] = gjson.New(req.Address).MustToJsonString() request["BizUid"] = s.BizUid request["OutTradeId"] = req.ChannelOrder request["AccountType"] = typeAnony request["ThirdPartyUserId"] = gconv.String(req.AppID) result, err := post(ctx, method, request) _ = json.Unmarshal([]byte(result), &res) return } type OrderPayReq struct { AppID interface{} ChannelOrder string LmOrderId string } //Pay 订单支付 func (s *Config) Pay(ctx context.Context, req OrderPayReq) (res *OrderCreateRes, err error) { method := "enableOrder" result, err := post(ctx, method, map[string]string{ "BizUid": server.BizUid, "LmOrderId": req.LmOrderId, "OutTradeId": req.ChannelOrder, "AccountType": typeAnony, "ThirdPartyUserId": gconv.String(req.AppID), }) _ = json.Unmarshal([]byte(result), &res) return } type OrderListReq struct { AppID interface{} ChannelOrder string LmOrderId string LogisticsStatus string OrderStatus string } type OrderFilter struct { LmOrderList []string `json:"lmOrderList,omitempty"` ChannelOrder []string `json:"channelOrderIdList,omitempty"` LogisticsStatus string `json:"LogisticsStatus,omitempty"` OrderStatus string `json:"OrderStatus,omitempty"` } type OrderListRes struct { Code string `json:"Code"` Message string `json:"Message"` RequestId string `json:"RequestId"` Success bool `json:"Success"` PostFee struct { FundType string `json:"FundType"` FundAmount int64 `json:"FundAmount"` FundAmountMoney uint `json:"FundAmountMoney"` } `json:"PostFee"` LmOrderList struct { OrderIds struct { OrderIds []string `json:"OrderIds"` } `json:"OrderIds"` PayTradeIds struct { PayTradeIds []string `json:"PayTradeIds"` } `json:"PayTradeIds"` LmOrderList []struct { LmOrderId string `json:"LmOrderId"` //订单号,对外统一使用此ID做主键操作 OrderStatus int `json:"OrderStatus"` //订单状态,6=交易成功 OrderAmount uint `json:"OrderAmount"` //订单总金额 TbOrderId string `json:"TbOrderId"` //淘宝订单号 EnableStatus int `json:"EnableStatus"` CreateDate string `json:"CreateDate"` SubOrderList struct { SubOrderList []struct { ItemId int64 `json:"ItemId"` OrderStatus int `json:"OrderStatus"` //订单状态,6=交易成功 LmOrderId string `json:"LmOrderId"` //子订单号 TbOrderId string `json:"TbOrderId"` //淘宝子订单号 SkuId string `json:"SkuId"` //下单的商品SkuId Number int64 `json:"Number"` //下单数量 EnableStatus int `json:"EnableStatus"` ItemPic string `json:"ItemPic"` //商品图片 ItemPriceList struct { ItemPriceList []struct { FundType string `json:"FundType"` FundAmount int64 `json:"FundAmount"` FundAmountMoney uint `json:"FundAmountMoney"` //子订单金额,以分为单位 } `json:"ItemPriceList"` } `json:"ItemPriceList"` ItemTitle string `json:"ItemTitle"` //商品名称 SkuName string `json:"SkuName"` //下单的商品SKU显示名称 } `json:"SubOrderList"` } `json:"SubOrderList"` PostFee struct { FundType string `json:"FundType"` FundAmount int64 `json:"FundAmount"` FundAmountMoney int64 `json:"FundAmountMoney"` } `json:"PostFee"` LogisticsStatus int64 `json:"LogisticsStatus"` //物流状态 } `json:"LmOrderList"` } `json:"LmOrderList"` } //List 列表 func (s *orderTm) List(ctx context.Context, req OrderListReq) (res *OrderListRes, err error) { method := "queryOrderList" var filterOption = OrderFilter{ LogisticsStatus: req.LogisticsStatus, OrderStatus: req.OrderStatus, } if req.LmOrderId != "" { filterOption.LmOrderList = garray.NewStrArray().Append(req.LmOrderId).Slice() } if req.ChannelOrder != "" { filterOption.ChannelOrder = garray.NewStrArray().Append(req.ChannelOrder).Slice() } request := map[string]string{ "BizUid": server.BizUid, "FilterOption": gjson.New(filterOption).MustToJsonString(), "PageNumber": "1", "PageSize": "20", "AccountType": typeAnony, "ThirdPartyUserId": gconv.String(req.AppID), } result, err := post(ctx, method, request) _ = gjson.New(result).Scan(&res) return } type OrderCancelReq struct { AppID interface{} LmOrderId string } //Cancel 仅适⽤下单[Create]未⽀付[Pay]的订单 func (s *orderTm) Cancel(ctx context.Context, req OrderCancelReq) (res *OrderListRes, err error) { method := "cancelOrder" result, err := post(ctx, method, map[string]string{ "BizUid": server.BizUid, "LmOrderId": req.LmOrderId, "AccountType": typeAnony, "ThirdPartyUserId": gconv.String(req.AppID), }) _ = json.Unmarshal([]byte(result), &res) return }