package jdapi import ( "fmt" "net/http" "net/url" "git.rosy.net.cn/baseapi/platform/common" "git.rosy.net.cn/baseapi/utils" ) type JDCallbackResponse struct { Code string `json:"code"` Msg string `json:"msg"` Data string `json:"data"` } type JDOrderMsg struct { Id int `json:"-"` // 用于传递Jdorder的主键值,减少一次读库操作 BillId string `json:"billId"` StatusId string `json:"statusId"` Timestamp string `json:"timestamp"` } type JDDeliveryStatusMsg struct { OrderId string DeliveryStatusTime string DeliveryManNo string DeliveryManName string DeliveryManPhone string DeliveryCarrierNo string DeliveryCarrierName string DeliveryStatus int Remark string FailType string CreatePin string OpTime int64 InputTime string } var ( SuccessResponse = &JDCallbackResponse{Code: "0", Msg: "success", Data: ""} ) func (j *JDAPI) unmarshalData(strData string, msg interface{}) (callbackResponse *JDCallbackResponse) { err := utils.UnmarshalUseNumber([]byte(strData), msg) if err != nil { return &JDCallbackResponse{ Code: JDerrorCodeAbnormalParam, Msg: fmt.Sprintf(common.CBErrMsgUnmarshal, strData, err), Data: strData, } } return nil } func (j *JDAPI) CheckRequestValidation(request *http.Request) (callbackResponse *JDCallbackResponse) { mapData := make(map[string]string) mapData["token"] = request.FormValue("token") mapData["app_key"] = request.FormValue("app_key") mapData["timestamp"] = request.FormValue("timestamp") mapData["format"] = request.FormValue("format") mapData["app_secret"] = j.appSecret mapData["v"] = request.FormValue("v") mapData[JD_PARAM_JSON] = request.FormValue(JD_PARAM_JSON) sign := j.signParams(mapData) if sign != request.FormValue(signKey) { j.sugarLogger.Infof("Signature is not ok, mine:%v, get:%v", sign, request.FormValue(signKey)) return &JDCallbackResponse{ Code: JDerrorCodeInvalidSign, Msg: "signature is invalid", Data: string(utils.MustMarshal(mapData)), } } return nil } func (j *JDAPI) GetOrderMsg(request *http.Request) (msg *JDOrderMsg, callbackResponse *JDCallbackResponse) { if callbackResponse = j.CheckRequestValidation(request); callbackResponse != nil { return nil, callbackResponse } msg = new(JDOrderMsg) jdParamJSON := request.FormValue(JD_PARAM_JSON) callbackResponse = j.unmarshalData(jdParamJSON, msg) if callbackResponse != nil { return nil, callbackResponse } return msg, nil } func (j *JDAPI) GetOrderDeliveryMsg(request *http.Request) (msg *JDDeliveryStatusMsg, callbackResponse *JDCallbackResponse) { if callbackResponse = j.CheckRequestValidation(request); callbackResponse != nil { return nil, callbackResponse } msg = new(JDDeliveryStatusMsg) jdParamJSON := request.FormValue(JD_PARAM_JSON) jdParamJSON2, err := url.QueryUnescape(jdParamJSON) if err != nil { return nil, &JDCallbackResponse{ Code: JDerrorCodeAbnormalParam, Msg: fmt.Sprintf(common.CBErrMsgUnescape, jdParamJSON, err), Data: jdParamJSON, } } jdParamJSON = jdParamJSON2 callbackResponse = j.unmarshalData(jdParamJSON, msg) if callbackResponse != nil { return nil, callbackResponse } return msg, nil }