hdh_order_express.go 2.5 KB
package hdh

import (
	"context"
	"encoding/json"
	"github.com/gogf/gf/net/ghttp"
)

//物流轨迹回调接口
type ExpressNotifyRes struct {
	OrderNum string `json:"orderNum"` //订单号
	PkgList  []struct {
		ExpressCode int `json:"expressCode"` //物流状态code
		ExpressList []struct {
			ExpressCompany string `json:"expressCompany"` //物流公司
			ExpressDetail  []struct {
				Express string `json:"express"` //物流节点
				Time    string `json:"time"`    //时间
			} `json:"expressDetail"` //物流详情
			ExpressNum string `json:"expressNum"` //物流单号
		} `json:"expressList"` //物流轨迹信息
		OrderStatus     string `json:"orderStatus"`     //子订单状态
		OrderStatusCode int    `json:"orderStatusCode"` //订单状态code参考订单状态字典
		PkgNo           string `json:"pkgNo"`           //包裹号(一笔订单可能被拆分为多个包裹)
		Status          string `json:"status"`          //包裹物流轨迹状态 参考物流状态字典
	} `json:"pkgList"` //包裹信息
	UserOrderNum string `json:"userOrderNum"` //用户订单号
}

//物流信息查询请求
type ExpressQueryReq struct {
	AppID    string `json:"appId"`
	OrderNum string `json:"orderNum"`
}

//物流信息查询返回
type ExpressQueryRes struct {
	Code string `json:"code"`
	Data []struct {
		ExpressCode int `json:"expressCode"`
		ExpressList []struct {
			ExpressCompany string `json:"expressCompany"`
			ExpressDetail  []struct {
				Express string `json:"express"`
				Time    string `json:"time"`
			} `json:"expressDetail"`
			ExpressNum string `json:"expressNum"`
		} `json:"expressList"`
		ItemList []struct {
			ChannelName string `json:"channelName"`
			ChannelType string `json:"channelType"`
			ItemId      string `json:"itemId"`
			Number      int    `json:"number"`
			SkuId       string `json:"skuId"`
		} `json:"itemList"`
		OrderStatus     string `json:"orderStatus"`
		OrderStatusCode int    `json:"orderStatusCode"`
		PkgNo           string `json:"pkgNo"`
		Status          string `json:"status"`
	} `json:"data"`
	Message string `json:"message"`
	Success int    `json:"success"`
}

//物流信息查询
func ExpressQuery(ctx context.Context, req *ExpressQueryReq) (res *ExpressQueryRes, err error) {

	result, err := post(ctx, "/track/query_track.do", req)
	if nil != err {
		return
	}
	err = json.Unmarshal([]byte(result), &res)
	return
}

//物流信息回调
func ExpressNotify(r *ghttp.Request) (res *ExpressNotifyRes, err error) {
	body, err := CheckSign(r)
	if nil != err {
		return
	}
	err = json.Unmarshal([]byte(body), &res)
	return
}