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 FormatErrorResponse } 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 }