- fix jd callback msg handling, some callback msg should unescqpe firstly.

This commit is contained in:
gazebo
2018-06-27 14:54:36 +08:00
parent b0d9fad396
commit e96e04ae0e
4 changed files with 88 additions and 34 deletions

View File

@@ -32,7 +32,7 @@ type CallbackDeliveryStatusMsg struct {
DeliveryManPhone string `json:"deliveryManPhone"`
DeliveryCarrierNo string `json:"deliveryCarrierNo"`
DeliveryCarrierName string `json:"deliveryCarrierName"`
DeliveryStatus int `json:"deliveryStatus"`
DeliveryStatus string `json:"deliveryStatus"`
Remark string `json:"remark"`
FailType string `json:"failType"`
CreatePin string `json:"createPin"`
@@ -41,7 +41,8 @@ type CallbackDeliveryStatusMsg struct {
}
var (
SuccessResponse = &CallbackResponse{Code: "0", Msg: "success", Data: ""}
SuccessResponse = &CallbackResponse{Code: "0", Msg: "success", Data: ""}
FormatErrorResponse = &CallbackResponse{Code: "-1", Msg: "failed", Data: ""}
)
func (a *API) unmarshalData(strData string, msg interface{}) (callbackResponse *CallbackResponse) {
@@ -56,19 +57,18 @@ func (a *API) unmarshalData(strData string, msg interface{}) (callbackResponse *
return nil
}
func (a *API) CheckCallbackValidation(request *http.Request) (callbackResponse *CallbackResponse) {
func (a *API) CheckCallbackValidation(values url.Values) (callbackResponse *CallbackResponse) {
mapData := make(map[string]interface{})
mapData["token"] = request.FormValue("token")
mapData["app_key"] = request.FormValue("app_key")
mapData["timestamp"] = request.FormValue("timestamp")
mapData["format"] = request.FormValue("format")
mapData["token"] = values.Get("token")
mapData["app_key"] = values.Get("app_key")
mapData["timestamp"] = values.Get("timestamp")
mapData["format"] = values.Get("format")
mapData["app_secret"] = a.appSecret
mapData["v"] = request.FormValue("v")
mapData[paramJson] = request.FormValue(paramJson)
mapData["v"] = values.Get("v")
mapData[paramJson] = values.Get(paramJson)
sign := a.signParams(mapData)
if sign != request.FormValue(signKey) {
baseapi.SugarLogger.Infof("Signature is not ok, mine:%v, get:%v", sign, request.FormValue(signKey))
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,
@@ -79,23 +79,16 @@ func (a *API) CheckCallbackValidation(request *http.Request) (callbackResponse *
}
func (a *API) getCommonOrderCallbackMsg(request *http.Request, msg interface{}, needDecode bool) (callbackResponse *CallbackResponse) {
if callbackResponse = a.CheckCallbackValidation(request); callbackResponse != nil {
result, err := utils.HTTPRequest2Values(request, needDecode)
if err != nil {
return FormatErrorResponse
}
if callbackResponse = a.CheckCallbackValidation(result); callbackResponse != nil {
return callbackResponse
}
jdParamJSON := request.FormValue(paramJson)
if needDecode {
if jdParamJSON2, err := url.QueryUnescape(jdParamJSON); err == nil {
jdParamJSON = jdParamJSON2
} else {
return &CallbackResponse{
Code: ResponseCodeAbnormalParam,
Msg: fmt.Sprintf(platformapi.ErrStrUnescapeError, jdParamJSON, err),
Data: jdParamJSON,
}
}
}
jdParamJSON := result.Get(paramJson)
baseapi.SugarLogger.Debug(jdParamJSON)
if callbackResponse = a.unmarshalData(jdParamJSON, msg); callbackResponse != nil {
return callbackResponse
}