|
|
package order
|
|
|
|
|
|
import (
|
|
|
"git.oa00.com/go/jdsdk/address"
|
|
|
"git.oa00.com/go/jdsdk/config"
|
|
|
"git.oa00.com/go/jdsdk/request"
|
|
|
)
|
|
|
|
|
|
const (
|
|
|
freightFee = "jingdong.ctp.order.getFreightFee" // 运费
|
|
|
shipmentType = "jingdong.ctp.order.getShipmentType" // 配送方式
|
|
|
createOrder = "jingdong.ctp.order.submitOrder" // 创建订单
|
|
|
queryOrder = "jingdong.ctp.order.querySubmitOrder" // 查询订单
|
|
|
orderDetail = "jingdong.ctp.order.getOrderDetail" // 订单详情
|
|
|
orderCancel = "jingdong.ctp.order.cancelOrder" // 订单取消
|
|
|
orderTrajectory = "jingdong.ctp.order.getLogistics" // 订单轨迹
|
|
|
orderConfirm = "jingdong.ctp.order.confirmDelivery" // 确认收货
|
|
|
orderPush = "jingdong.ctp.order.pushOrder" // 订单推送
|
|
|
orderPayInfo = "jingdong.ctp.order.getOrderPayInfo" // 订单支付信息
|
|
|
|
|
|
NotSupport = 9 // 商品不支持当前地址配送
|
|
|
|
|
|
paymentType = 2 // 在线支付
|
|
|
)
|
|
|
|
|
|
type Order struct {
|
|
|
}
|
|
|
type SkuItem struct {
|
|
|
SkuPrice float64 `json:"skuPrice"` // 单价
|
|
|
SkuId string `json:"skuId"` // skuId
|
|
|
SkuName string `json:"skuName"` // skuName
|
|
|
Quantity uint `json:"quantity"` // 数量
|
|
|
}
|
|
|
type ApiFreightFeeParam struct {
|
|
|
SkuList []SkuItem `json:"skuList"` // 商品列表
|
|
|
OrderFee float64 `json:"orderFee"` // 商品总金额
|
|
|
Address address.Address `json:"address"` // 收货地址
|
|
|
}
|
|
|
type apiFreightFeeParam struct {
|
|
|
ApiFreightFeeParam
|
|
|
PaymentType uint `json:"paymentType"` // 支付方式。固定传2:在线支付
|
|
|
Pin string `json:"pin"` // 下单账号
|
|
|
}
|
|
|
type resFreightFee struct {
|
|
|
FreightFee float64 `json:"freightFee"` // 运费
|
|
|
}
|
|
|
|
|
|
// GetFreightFee @Title 获取运费
|
|
|
func (o *Order) GetFreightFee(data ApiFreightFeeParam) (result resFreightFee, err error) {
|
|
|
err = request.ExecProtocol(freightFee, apiFreightFeeParam{
|
|
|
ApiFreightFeeParam: data,
|
|
|
PaymentType: paymentType,
|
|
|
Pin: config.SdkConfig.Pin,
|
|
|
}, &result)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
type apiShipmentTypeParam struct {
|
|
|
apiFreightFeeParam
|
|
|
}
|
|
|
type skuShipmentType struct {
|
|
|
SkuId string `json:"skuId"` // skuId
|
|
|
ShipmentType uint `json:"shipmentType"` // 配送方式
|
|
|
}
|
|
|
type shipmentDetail struct {
|
|
|
GiftList []skuShipmentType `json:"giftList"` // 赠品sku列表
|
|
|
AttachmentList []skuShipmentType `json:"attachmentList"` // 附件sku信息
|
|
|
ShipmentType uint `json:"shipmentType"` // 配送方式
|
|
|
}
|
|
|
type shipmentItem struct {
|
|
|
ShipmentDetail shipmentDetail `json:"shipmentDetail"` // 配送明细
|
|
|
SkuId string `json:"skuId"` // skuId
|
|
|
}
|
|
|
type resShipmentType struct {
|
|
|
ShipmentType uint `json:"shipmentType"` // 配送方式。1:京东配送 2:京配转三方配送 3:第三方配送 4:普通快递配送 9:不支持配送
|
|
|
ShipmentInfoList []shipmentItem `json:"shipmentInfoList"` // 配送明细
|
|
|
}
|
|
|
|
|
|
// GetShipmentType @Title 获取配送方式
|
|
|
func (o *Order) GetShipmentType(data ApiFreightFeeParam) (result resShipmentType, err error) {
|
|
|
err = request.ExecProtocol(shipmentType, apiShipmentTypeParam{
|
|
|
apiFreightFeeParam{
|
|
|
ApiFreightFeeParam: data,
|
|
|
PaymentType: paymentType,
|
|
|
Pin: config.SdkConfig.Pin,
|
|
|
},
|
|
|
}, &result)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
type MainSku struct {
|
|
|
MainSku SkuItem `json:"mainSku"`
|
|
|
}
|
|
|
type Receiver struct {
|
|
|
ReceiverName string `json:"receiverName"` // 姓名
|
|
|
ReceiverMobile string `json:"receiverMobile"` // 手机号
|
|
|
ReceiverEmail string `json:"receiverEmail"` // 邮箱
|
|
|
ZipCode string `json:"zipCode"` // 邮编
|
|
|
}
|
|
|
|
|
|
type OrderParam struct {
|
|
|
ChannelOrderId string `json:"channelOrderId"` // 渠道订单号
|
|
|
ProductList []MainSku `json:"productList"` // 商品信息列表
|
|
|
OrderFee float64 `json:"orderFee"` // 总金额-不含运费
|
|
|
FreightFee float64 `json:"freightFee"` // 运费
|
|
|
Address address.Address `json:"address"` // 收货地址
|
|
|
Receiver Receiver `json:"receiver"` // 收货人
|
|
|
Invoice Invoice `json:"invoice"` // 发票信息
|
|
|
UserIp string `json:"userIp"` // 用户ip
|
|
|
ShipmentType uint `json:"shipmentType"` // 配送方式
|
|
|
AutoCancelTime uint `json:"autoCancelTime"` // 自动取消时间 秒
|
|
|
}
|
|
|
type Invoice struct {
|
|
|
InvoiceType uint `json:"invoiceType"` // 发票类型 2=增票 3=电子票
|
|
|
VatInvoice VatInvoice `json:"vatInvoice"` // 增值税发票信息
|
|
|
}
|
|
|
|
|
|
type VatInvoiceAddress struct {
|
|
|
VatProvinceId uint `json:"vatProvinceId"` // 省
|
|
|
VatCityId uint `json:"vatCityId"` // 市
|
|
|
VatCountyId uint `json:"vatCountyId"` // 区
|
|
|
VatTownId uint `json:"vatTownId"` // 街道
|
|
|
VatFullAddress string `json:"vatFullAddress"` // 全地址
|
|
|
}
|
|
|
type VatInvoice struct {
|
|
|
CompanyName string `json:"companyName"` // 公司名
|
|
|
Code string `json:"code"` // 营业执照号
|
|
|
RegAddr string `json:"regAddr"` // 注册地址
|
|
|
RegPhone string `json:"regPhone"` // 注册手机
|
|
|
RegBank string `json:"regBank"` // 开户行
|
|
|
RegBankAccount string `json:"regBankAccount"` // 开户账号
|
|
|
ConsigneeName string `json:"consigneeName"` // 收件人
|
|
|
ConsigneeMobile string `json:"consigneeMobile"` // 收件电话
|
|
|
VatAddress VatInvoiceAddress `json:"vatAddress"` // 邮寄地址
|
|
|
}
|
|
|
|
|
|
type param struct {
|
|
|
OrderParam
|
|
|
Pin string `json:"pin"` // 下单账号
|
|
|
PaymentType uint `json:"paymentType"` // 支付方式 2=在线支付
|
|
|
ChannelOrderSource string `json:"channelOrderSource"` // 订单来源 OTHER=其他
|
|
|
SendGoods uint `json:"sendGoods"` // 物品类型 固定1
|
|
|
}
|
|
|
type resOrder struct {
|
|
|
ChannelOrderId string `json:"channelOrderId"` // 渠道订单id
|
|
|
OrderId uint `json:"orderId"` // 京东订单id
|
|
|
ExtendInfo extendInfo `json:"extendInfo"` // 拓展属性
|
|
|
}
|
|
|
|
|
|
type extendInfo struct {
|
|
|
Code string `json:"code"` // 返回码 0001=重复下单
|
|
|
}
|
|
|
|
|
|
// Create @Title 下单
|
|
|
func (o *Order) Create(data OrderParam) (result resOrder, err error) {
|
|
|
err = request.ExecProtocol(createOrder, param{
|
|
|
OrderParam: data,
|
|
|
Pin: config.SdkConfig.Pin,
|
|
|
PaymentType: paymentType,
|
|
|
ChannelOrderSource: "OTHER",
|
|
|
SendGoods: 1,
|
|
|
}, &result)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// Query @Title 订单查询
|
|
|
func (o *Order) Query(channelOrderId string) (result resOrder, err error) {
|
|
|
err = request.ExecParam(queryOrder, map[string]interface{}{
|
|
|
"channelOrderId": channelOrderId,
|
|
|
}, &result)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
type OrderInfo struct {
|
|
|
SkuList []orderSkuItem `json:"skuList"` // 商品列表
|
|
|
OrderId uint64 `json:"orderId"` // 订单号
|
|
|
BaseOrderInfo baseOrderInfo `json:"baseOrderInfo"` // 订单基本信息
|
|
|
OrderRelationFee orderRelationFee `json:"orderRelationFee"` // 订单费用信息
|
|
|
}
|
|
|
|
|
|
type orderRelationFee struct {
|
|
|
ShouldPaymentFee float64 `json:"shouldPaymentFee"` // 订单总金额
|
|
|
DiscountFee float64 `json:"discountFee"` // 订单优惠金额
|
|
|
FreightFee float64 `json:"freightFee"` // 运费金额
|
|
|
}
|
|
|
|
|
|
type baseOrderInfo struct {
|
|
|
RootOrderId uint64 `json:"rootOrderId"` // 父订单号
|
|
|
OrderStatus int `json:"orderStatus"` // 订单状态 -100=已取消 0=提单成功 1=等待付款 4=已支付 6=等待打印 7=拣货完成 8=出库完成 9=等待发货 15=待用户确认 16=用户拒收 18=用户签收 21=订单锁定
|
|
|
SubmitTime float64 `json:"submitTime"` // 订单创建时间
|
|
|
CompleteTime float64 `json:"completeTime"` // 订单完成时间
|
|
|
PayTime float64 `json:"payTime"` // 订单支付时间
|
|
|
OutWarehouseTime float64 `json:"outWarehouseTime"` // 订单出库时间
|
|
|
OrderType int `json:"orderType"` // 订单类型 0=自营/混单 1=商家自发订单 2=厂直订单 99=其他订单
|
|
|
Remark string `json:"remark"` // 订单备注
|
|
|
}
|
|
|
|
|
|
type orderSkuItem struct {
|
|
|
SkuId uint64 `json:"skuId"` // skuId
|
|
|
SkuName string `json:"skuName"` // 商品名称
|
|
|
Quantity uint `json:"quantity"` // 数量
|
|
|
ShouldPrice float64 `json:"shouldPrice"` // 单价
|
|
|
SkuGiftType uint `json:"skuGiftType"` // sku类型 1=主品 2=赠品
|
|
|
MainSkuId uint64 `json:"mainSkuId"` // 赠品主skuId
|
|
|
}
|
|
|
|
|
|
// Detail @Title 订单详情 京东订单id
|
|
|
func (o *Order) Detail(orderId string) (result OrderInfo, err error) {
|
|
|
err = request.ExecParam(orderDetail, map[string]interface{}{
|
|
|
"orderId": orderId,
|
|
|
}, &result)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// Cancel @Title 订单取消 京东订单id
|
|
|
func (o *Order) Cancel(orderId string) (result OrderInfo, err error) {
|
|
|
err = request.ExecParam(orderCancel, map[string]interface{}{
|
|
|
"orderId": orderId,
|
|
|
"cancelReasonCode": 100,
|
|
|
}, &result)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
type resTrajectory struct {
|
|
|
WaybillCode string `json:"waybillCode"` // 运单号
|
|
|
OperatorNodeList []operatorNodeItem `json:"operatorNodeList"` // 轨迹
|
|
|
}
|
|
|
type operatorNodeItem struct {
|
|
|
Content string `json:"content"` // 详细信息
|
|
|
GroupState string `json:"groupState"` // 阶段状态
|
|
|
ScanState string `json:"scanState"` // 扫描状态
|
|
|
MsgTime int64 `json:"msgTime"` // 操作时间
|
|
|
SystemOperator string `json:"systemOperator"` // 操作人
|
|
|
OrderId uint64 `json:"orderId"` // 订单号
|
|
|
}
|
|
|
|
|
|
// Trajectory @Title 订单轨迹
|
|
|
func (o *Order) Trajectory(orderId string) (result []resTrajectory, err error) {
|
|
|
err = request.ExecParam(orderTrajectory, map[string]interface{}{
|
|
|
"orderId": orderId,
|
|
|
}, &result)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// Confirm @Title 确认收货
|
|
|
func (o *Order) Confirm(orderId string) (err error) {
|
|
|
err = request.ExecParam(orderConfirm, map[string]interface{}{
|
|
|
"orderId": orderId,
|
|
|
}, nil)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// Push @Title 订单推送
|
|
|
func (o *Order) Push(orderId string) (err error) {
|
|
|
err = request.ExecParam(orderPush, map[string]interface{}{
|
|
|
"orderId": orderId,
|
|
|
}, nil)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
type resPayInfo struct {
|
|
|
RefundTotalFee float64 `json:"refundTotalFee"` // 退款总金额
|
|
|
RootOrderId uint64 `json:"rootOrderId"` // 父订单号
|
|
|
ChannelOrderId uint64 `json:"channelOrderId"` // 渠道订单号
|
|
|
FreightFee float64 `json:"freightFee"` // 运费金额
|
|
|
PaidInTotalFee float64 `json:"paidInTotalFee"` // 实际支付金额
|
|
|
OrderFee float64 `json:"orderFee"` // 商品总金额
|
|
|
RefundDetailList []payRefundItem `json:"refundDetailList"` // 退款列表
|
|
|
PaidInDetailList []payItem `json:"paidInDetailList"` // 追夫列表
|
|
|
}
|
|
|
|
|
|
type payRefundItem struct {
|
|
|
RefundFee float64 `json:"refundFee"` // 退款金额
|
|
|
RefundType float64 `json:"refundType"` // 退款类型 1=取消退款 2=售后退款 3=拆分取消非退款 4=多支付退款 5=其他退款类型
|
|
|
RefundTime int64 `json:"refundTime"` // 退款时间
|
|
|
}
|
|
|
type payItem struct {
|
|
|
PaidInFee float64 `json:"paidInFee"` // 支付金额
|
|
|
PaidInType float64 `json:"paidInType"` // 支付类型 2=在线支付
|
|
|
PaidInTime int64 `json:"paidInTime"` // 支付时间
|
|
|
}
|
|
|
|
|
|
// PayInfo @Title 订单支付信息
|
|
|
func (o *Order) PayInfo(orderId string) (result resPayInfo, err error) {
|
|
|
err = request.ExecParam(orderPayInfo, map[string]interface{}{
|
|
|
"orderId": orderId,
|
|
|
}, &result)
|
|
|
return
|
|
|
}
|