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

2 years ago
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
}