You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jdsdk/order/order.go

290 lines
11 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
}