dwd_order.go 7.3 KB
package dwd

import (
	"context"
	"github.com/gogf/gf/encoding/gjson"
)

//订单
type orderDwd struct {
}

var Order = &orderDwd{}

type OrderCreateReq struct {
	OrderSn   string            `json:"out_order_id"`    //外部关联主订单号
	Consignee string            `json:"consignee_name"`  //收件人
	Phone     string            `json:"consignee_phone"` //收件人电话
	Province  string            `json:"province"`        //省份
	City      string            `json:"city"`            //城市
	District  string            `json:"district"`        //区县
	Address   string            `json:"address"`         //详细地址
	List      []OrderCreateItem `json:"sub_orders"`      //子订单
}

type OrderCreateItem struct {
	SkuID  int    `json:"sku_id"`   //sku_id
	Amount int    `json:"amount"`   //数量
	Remark string `json:"user_mem"` //订单备注
}

type OrderCreateRes struct {
	Errno     int              `json:"errno"`
	Errmsg    string           `json:"errmsg"`
	Data      *OrderCreateData `json:"data"`
	RequestId string           `json:"request_id"`
	Timestamp int              `json:"timestamp"`
	Signature string           `json:"signature"`
}

type OrderCreateData struct {
	BatchNo        string `json:"batch_no"`
	OutOrderId     string `json:"out_order_id"`
	TotalPrice     int    `json:"total_price"`
	PayPrice       int    `json:"pay_price"`
	ConsigneeName  string `json:"consignee_name"`
	ConsigneePhone string `json:"consignee_phone"`
	Province       string `json:"province"`
	City           string `json:"city"`
	District       string `json:"district"`
	Address        string `json:"address"`
	DeliveryPrice  int    `json:"delivery_price"`
	Orders         []struct {
		OrderId       int64  `json:"order_id"`
		TotalPrice    int    `json:"total_price"`
		PayPrice      int    `json:"pay_price"`
		Amount        int    `json:"amount"`
		DeliveryPrice int    `json:"delivery_price"`
		UserMem       string `json:"user_mem"`
		SubOrders     []struct {
			SubOrderId int    `json:"sub_order_id"`
			SkuId      int    `json:"sku_id"`
			SkuName    string `json:"sku_name"`
			UnitPrice  int    `json:"unit_price"`
			Amount     int    `json:"amount"`
			TotalPrice int    `json:"total_price"`
			PayPrice   int    `json:"pay_price"`
			ProductId  int    `json:"product_id"`
			Thumbnail  string `json:"thumbnail"`
		} `json:"sub_orders"`
	} `json:"orders"`
}

//Create  下单
func (*orderDwd) Create(ctx context.Context, req OrderCreateReq) (res *OrderCreateRes, err error) {
	var method = "order.create"
	result, err := post(ctx, method, req)
	if err != nil {
		return
	}
	res = &OrderCreateRes{
		Errno:     result.Errno,
		Errmsg:    result.Errmsg,
		RequestId: result.RequestId,
		Timestamp: result.Timestamp,
		Signature: result.Signature,
	}
	_ = gjson.New(result.Data).Scan(&res.Data)
	return
}

type OrderCommonReq struct {
	BatchNo string `json:"batch_no"`
	OrderSn string `json:"out_order_id,omitempty"`
}
type OrderPayRes struct {
	Errno     int           `json:"errno"`
	Errmsg    string        `json:"errmsg"`
	Data      *OrderPayData `json:"data"`
	RequestId string        `json:"request_id"`
	Timestamp int           `json:"timestamp"`
	Signature string        `json:"signature"`
}

type OrderPayData struct {
	Res string `json:"res"`
}

//Pay  下单
func (*orderDwd) Pay(ctx context.Context, req OrderCommonReq) (res *OrderPayRes, err error) {
	var method = "order.pay"
	result, err := post(ctx, method, req)
	if err != nil {
		return
	}
	res = &OrderPayRes{
		Errno:     result.Errno,
		Errmsg:    result.Errmsg,
		RequestId: result.RequestId,
		Timestamp: result.Timestamp,
		Signature: result.Signature,
	}
	_ = gjson.New(result.Data).Scan(&res.Data)
	return
}

type OrderCancelReq struct {
	BatchNo string `json:"batch_no"`
	OrderSn string `json:"out_order_id,omitempty"`
}

type OrderCancelRes struct {
	Errno     int              `json:"errno"`
	Errmsg    string           `json:"errmsg"`
	Data      *OrderCancelData `json:"data"`
	RequestId string           `json:"request_id"`
	Timestamp int              `json:"timestamp"`
	Signature string           `json:"signature"`
}

type OrderCancelData struct {
	Res string `json:"res"`
}

//Cancel  取消(未支付订单)
func (*orderDwd) Cancel(ctx context.Context, req OrderCommonReq) (res *OrderCancelRes, err error) {
	var method = "order.cancel"
	result, err := post(ctx, method, req)
	if err != nil {
		return
	}
	res = &OrderCancelRes{
		Errno:     result.Errno,
		Errmsg:    result.Errmsg,
		RequestId: result.RequestId,
		Timestamp: result.Timestamp,
		Signature: result.Signature,
	}
	_ = gjson.New(result.Data).Scan(&res.Data)
	return
}

type OrderDetailRes struct {
	Errno     int              `json:"errno"`
	Errmsg    string           `json:"errmsg"`
	Data      *OrderDetailData `json:"data"`
	RequestId string           `json:"request_id"`
	Timestamp int              `json:"timestamp"`
	Signature string           `json:"signature"`
}

type OrderDetailData struct {
	OutOrderId     int    `json:"out_order_id "`
	BatchNo        string `json:"batch_no"`
	TotalPrice     int    `json:"total_price"`
	PayPrice       int    `json:"pay_price"`
	ConsigneeName  string `json:"consignee_name"`
	ConsigneePhone string `json:"consignee_phone"`
	Province       string `json:"province"`
	City           string `json:"city"`
	District       string `json:"district"`
	Address        string `json:"address"`
	DeliveryPrice  int    `json:"delivery_price"`
	UserMem        string `json:"user_mem"`
	Orders         []struct {
		OrderId    int64 `json:"order_id"`
		TotalPrice int   `json:"total_price"`
		PayPrice   int   `json:"pay_price"`
		Amount     int   `json:"amount"`
		Status     int   `json:"status"`
		//订单状态 1.未支付 2.已支付.3.已完成 4.已取消 5. 申请退款 6.退款中 7. 已退款
		// 8.拒绝退款 9.拼团支付成功 10.审核中 11.等待开奖 12.申请退货 13.待退货 14.退货中 15.拒绝退货 16.已退货 17已退货退款中
		//18 已退货退款 19.已退货拒绝退款
		DeliveryPrice  int    `json:"delivery_price"`
		DeliveryStatus int    `json:"delivery_status"` //配送状态:1.未发货 2.已发货 3.配送完成
		DeliveryNo     string `json:"delivery_no"`
		DeliveryCode   string `json:"delivery_code"`
		DeliveryTime   int    `json:"delivery_time"`
		ConfirmTime    int    `json:"confirm_time"`
		UserMem        string `json:"user_mem"`
		CreatedAt      int    `json:"created_at"`
		SubOrders      []struct {
			SubOrderId    int    `json:"sub_order_id"`
			SkuId         int    `json:"sku_id"`
			SkuName       string `json:"sku_name"`
			UnitPrice     int    `json:"unit_price"`
			Amount        int    `json:"amount"`
			TotalPrice    int    `json:"total_price"`
			PayPrice      int    `json:"pay_price"`
			ProductId     int    `json:"product_id"`
			Thumbnail     string `json:"thumbnail"`
			SaleAttribute []struct {
				AttributeName  string `json:"attribute_name"`
				AttributeValue string `json:"attribute_value"`
			} `json:"sale_attribute"`
		} `json:"sub_orders"`
	} `json:"orders"`
}

//Detail  详情
func (*orderDwd) Detail(ctx context.Context, req OrderCommonReq) (res *OrderDetailRes, err error) {
	var method = "order.detail"
	result, err := post(ctx, method, req)
	if err != nil {
		return
	}
	res = &OrderDetailRes{
		Errno:     result.Errno,
		Errmsg:    result.Errmsg,
		RequestId: result.RequestId,
		Timestamp: result.Timestamp,
		Signature: result.Signature,
	}
	_ = gjson.New(result.Data).Scan(&res.Data)
	return
}