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"` Quantity string `json:"Quantity"` SkuId string `json:"SkuId"` } type OrderAddress struct { AddressDetail string `json:"AddressDetail"` DivisionCode string `json:"DivisionCode"` FullName string `json:"FullName"` Mobile string `json:"Mobile"` } 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 { UserId string 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 *orderTm) 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"] = server.BizUid request["OutTradeId"] = req.ChannelOrder request["AccountType"] = typeAnony request["ThirdPartyUserId"] = req.UserId result, err := post(ctx, method, request) _ = json.Unmarshal([]byte(result), &res) return } type OrderPayReq struct { UserId string ChannelOrder string LmOrderId string } //Pay 订单支付 func (s *orderTm) 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": req.UserId, }) _ = json.Unmarshal([]byte(result), &res) return } type OrderListReq struct { UserId string ChannelOrder string LmOrderId string LogisticsStatus string OrderStatus string EnableStatus string //0生效 1无效 -1都查 不填默认0 } type OrderFilter struct { LmOrderList []string `json:"lmOrderList,omitempty"` ChannelOrder []string `json:"channelOrderIdList,omitempty"` LogisticsStatus string `json:"LogisticsStatus,omitempty"` OrderStatus string `json:"OrderStatus,omitempty"` EnableStatus string `json:"enableStatus,omitempty"` } type OrderListRes struct { PostFee struct { FundAmount int `json:"FundAmount"` FundType string `json:"FundType"` FundAmountMoney int `json:"FundAmountMoney"` } `json:"PostFee"` RequestId string `json:"RequestId"` Message string `json:"Message"` PageSize int `json:"PageSize"` PageNumber int `json:"PageNumber"` LmOrderList struct { LmOrderList []struct { PostFee struct { FundAmount int `json:"FundAmount"` FundType string `json:"FundType"` FundAmountMoney int `json:"FundAmountMoney"` } `json:"PostFee"` ExtJson string `json:"ExtJson"` OrderStatus int `json:"OrderStatus"` //12=待⽀付,2=已⽀付,4=已退款关闭,6=交易成功,8=被淘宝关闭 ShopName string `json:"ShopName"` EnableStatus int `json:"EnableStatus"` TbOrderId int64 `json:"TbOrderId"` //淘宝单号 OrderAmount int `json:"OrderAmount"` FundStructureModels struct { FundStructureModels []struct { FundAmount int `json:"FundAmount"` FundType string `json:"FundType"` FundAmountMoney int `json:"FundAmountMoney"` } `json:"FundStructureModels"` } `json:"FundStructureModels"` CreateDate string `json:"CreateDate"` LmOrderId int64 `json:"LmOrderId"` //天猫单号 LogisticsStatus int `json:"LogisticsStatus"` //1=未发货 -> 等待卖家发货 2=已发货 -> 等待买家确认收货 3=已收货 -> 交易成功 4=已经退货 -> 交易失败 5=部分收货 -> 交易成功 6=部分发货中 8=还 未创建物流订单 SubOrderList struct { SubOrderList []struct { ItemPriceList struct { ItemPriceList []struct { FundAmount int `json:"FundAmount"` FundType string `json:"FundType"` FundAmountMoney int `json:"FundAmountMoney"` } `json:"ItemPriceList"` } `json:"ItemPriceList"` OrderStatus int `json:"OrderStatus"` //12=待⽀付,2=已⽀付,4=已退款关闭,6=交易成功,8=被淘宝关闭 Number int `json:"Number"` EnableStatus int `json:"EnableStatus"` TbOrderId int64 `json:"TbOrderId"` //淘宝单号 ItemTitle string `json:"ItemTitle"` SkuName string `json:"SkuName"` ItemPic string `json:"ItemPic"` SkuId string `json:"SkuId"` ItemId int64 `json:"ItemId"` LmOrderId int `json:"LmOrderId"` //天猫单号 } `json:"SubOrderList"` } `json:"SubOrderList"` } `json:"LmOrderList"` } `json:"LmOrderList"` Code string `json:"Code"` } //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, EnableStatus: "-1",//默认-1 全选 } if req.LmOrderId != "" { filterOption.LmOrderList = garray.NewStrArray().Append(req.LmOrderId).Slice() } if req.ChannelOrder != "" { filterOption.ChannelOrder = garray.NewStrArray().Append(req.ChannelOrder).Slice() } if req.EnableStatus != "" { filterOption.EnableStatus = req.EnableStatus } request := map[string]string{ "BizUid": server.BizUid, "FilterOption": gjson.New(filterOption).MustToJsonString(), "PageNumber": "1", "PageSize": "20", "AccountType": typeAnony, "ThirdPartyUserId": req.UserId, } result, err := post(ctx, method, request) _ = json.Unmarshal([]byte(result), &res) return } type OrderCancelReq struct { UserId string 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": req.UserId, }) _ = json.Unmarshal([]byte(result), &res) return }