108 lines
3.5 KiB
Go
108 lines
3.5 KiB
Go
package jdapi
|
||
|
||
import (
|
||
"fmt"
|
||
"net/url"
|
||
|
||
"git.rosy.net.cn/baseapi"
|
||
"git.rosy.net.cn/baseapi/platformapi"
|
||
"git.rosy.net.cn/baseapi/utils"
|
||
)
|
||
|
||
type CallbackResponse struct {
|
||
Code string `json:"code"`
|
||
Msg string `json:"msg"`
|
||
Data string `json:"data"`
|
||
}
|
||
|
||
type CallbackOrderMsg struct {
|
||
ID int `json:"-"` // 用于传递Jdorder的主键值,减少一次读库操作
|
||
BillID string `json:"billId"`
|
||
StatusID string `json:"statusId"`
|
||
Timestamp string `json:"timestamp"`
|
||
Remark string `json:"remark"`
|
||
}
|
||
|
||
type CallbackDeliveryStatusMsg struct {
|
||
OrderID string `json:"orderId"`
|
||
DeliveryStatusTime string `json:"deliveryStatusTime"`
|
||
DeliveryManNo string `json:"deliveryManNo"`
|
||
DeliveryManName string `json:"deliveryManName"`
|
||
DeliveryManPhone string `json:"deliveryManPhone"`
|
||
DeliveryCarrierNo string `json:"deliveryCarrierNo"`
|
||
DeliveryCarrierName string `json:"deliveryCarrierName"`
|
||
DeliveryStatus string `json:"deliveryStatus"`
|
||
Remark string `json:"remark"`
|
||
FailType string `json:"failType"`
|
||
CreatePin string `json:"createPin"`
|
||
OpTime string `json:"opTime"`
|
||
InputTime string `json:"inputTime"`
|
||
}
|
||
|
||
var (
|
||
SuccessResponse = &CallbackResponse{Code: "0", Msg: "success", Data: ""}
|
||
FormatErrorResponse = &CallbackResponse{Code: "-1", Msg: "failed", Data: ""}
|
||
)
|
||
|
||
func (a *API) unmarshalData(strData string, msg interface{}) (callbackResponse *CallbackResponse) {
|
||
err := utils.UnmarshalUseNumber([]byte(strData), msg)
|
||
if err != nil {
|
||
return &CallbackResponse{
|
||
Code: ResponseCodeAbnormalParam,
|
||
Msg: fmt.Sprintf(platformapi.ErrStrUnmarshalError, strData, err),
|
||
Data: strData,
|
||
}
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func (a *API) CheckCallbackValidation(values url.Values) (callbackResponse *CallbackResponse) {
|
||
mapData := utils.URLValues2Map(values)
|
||
mapData["app_secret"] = a.appSecret
|
||
sign := a.signParams(mapData)
|
||
if sign != values.Get(signKey) {
|
||
baseapi.SugarLogger.Infof("Signature is not ok, mine:%v, get:%v", sign, values.Get(signKey))
|
||
return &CallbackResponse{
|
||
Code: ResponseCodeInvalidSign,
|
||
Msg: platformapi.ErrStrCallbackSignatureIsWrong,
|
||
Data: string(utils.MustMarshal(mapData)),
|
||
}
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func (a *API) getCommonOrderCallbackMsg(data []byte, msg interface{}, needDecode bool) (callbackResponse *CallbackResponse) {
|
||
result, err := utils.HTTPBody2Values(data, needDecode)
|
||
if err != nil {
|
||
return FormatErrorResponse
|
||
}
|
||
if callbackResponse = a.CheckCallbackValidation(result); callbackResponse != nil {
|
||
return callbackResponse
|
||
}
|
||
|
||
jdParamJSON := result.Get(paramJson)
|
||
baseapi.SugarLogger.Debug(jdParamJSON)
|
||
if callbackResponse = a.unmarshalData(jdParamJSON, msg); callbackResponse != nil {
|
||
return callbackResponse
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func (a *API) GetOrderCallbackMsg(data []byte) (msg *CallbackOrderMsg, callbackResponse *CallbackResponse) {
|
||
msg = new(CallbackOrderMsg)
|
||
callbackResponse = a.getCommonOrderCallbackMsg(data, msg, false)
|
||
return msg, callbackResponse
|
||
}
|
||
|
||
func (a *API) GetOrderApplyCancelCallbackMsg(data []byte) (msg *CallbackOrderMsg, callbackResponse *CallbackResponse) {
|
||
msg = new(CallbackOrderMsg)
|
||
callbackResponse = a.getCommonOrderCallbackMsg(data, msg, true)
|
||
return msg, callbackResponse
|
||
}
|
||
|
||
func (a *API) GetOrderDeliveryCallbackMsg(data []byte) (msg *CallbackDeliveryStatusMsg, callbackResponse *CallbackResponse) {
|
||
msg = new(CallbackDeliveryStatusMsg)
|
||
callbackResponse = a.getCommonOrderCallbackMsg(data, msg, true)
|
||
return msg, callbackResponse
|
||
}
|