diff --git a/platformapi/dingdingapi/dingdingapi_test.go b/platformapi/dingdingapi/dingdingapi_test.go index 0870a16f..7516bae4 100644 --- a/platformapi/dingdingapi/dingdingapi_test.go +++ b/platformapi/dingdingapi/dingdingapi_test.go @@ -18,7 +18,7 @@ func init() { sugarLogger = logger.Sugar() baseapi.Init(sugarLogger) - api = NewWithAgentID(239461075, "ding7ab5687f3784a8db", "ding7iu9cptairtcls0c", "LWrZAFeqUfuVv7n_tc8vPpCAx6PT4CwManx2XCVhJOqGsx2L5XCDuX1sAN_JtvsI") + api = NewWithAgentID(241047291, "ding7ab5687f3784a8db", "dingpx4hcf55zb4ubewg", "1zooB4bmEXPesdwb1ElWASVQ1vinOSZM-1XCUFrrSjHsNAId1UuVCT5tmHSmg5_V") api.RetrieveToken() } diff --git a/platformapi/ebaiapi/callback.go b/platformapi/ebaiapi/callback.go index 1012d6c7..1a337ddb 100644 --- a/platformapi/ebaiapi/callback.go +++ b/platformapi/ebaiapi/callback.go @@ -84,15 +84,18 @@ func (a *API) CheckCallbackValidation(request *http.Request) (callbackResponse * } func (a *API) GetCallbackMsg(request *http.Request) (msg *CallbackMsg, callbackResponse *CallbackResponse) { - request.ParseForm() - if callbackResponse = a.CheckCallbackValidation(request); callbackResponse != nil { - return nil, callbackResponse + err := request.ParseForm() + if err == nil { + if callbackResponse = a.CheckCallbackValidation(request); callbackResponse != nil { + return nil, callbackResponse + } + msg = new(CallbackMsg) + if callbackResponse = a.unmarshalData(request.FormValue("cmd"), []byte(request.FormValue("body")), &msg.Body); callbackResponse != nil { + return nil, callbackResponse + } + msg.Cmd = request.FormValue("cmd") + msg.Timestamp = utils.Str2Int64(utils.Interface2String(request.FormValue("timestamp"))) + return msg, nil } - msg = new(CallbackMsg) - if callbackResponse = a.unmarshalData(request.FormValue("cmd"), []byte(request.FormValue("body")), &msg.Body); callbackResponse != nil { - return nil, callbackResponse - } - msg.Cmd = request.FormValue("cmd") - msg.Timestamp = utils.Str2Int64(utils.Interface2String(request.FormValue("timestamp"))) - return msg, nil + return nil, a.Err2CallbackResponse("", err, nil) } diff --git a/platformapi/mtpsapi/callback.go b/platformapi/mtpsapi/callback.go index d5a7d8bf..4a5da2dc 100644 --- a/platformapi/mtpsapi/callback.go +++ b/platformapi/mtpsapi/callback.go @@ -50,22 +50,25 @@ func Err2CallbackResponse(err error, data string) *CallbackResponse { } func (a *API) CheckCallbackValidation(request *http.Request) (callbackResponse *CallbackResponse) { - request.ParseForm() - sign := a.signParams(request.PostForm) - if sign != request.FormValue(signKey) { - baseapi.SugarLogger.Infof("Signature is not ok, mine:%v, get:%v", sign, request.FormValue(signKey)) - return SignatureIsNotOk - } + err := request.ParseForm() + if err == nil { + sign := a.signParams(request.PostForm) + if sign != request.FormValue(signKey) { + baseapi.SugarLogger.Infof("Signature is not ok, mine:%v, get:%v", sign, request.FormValue(signKey)) + return SignatureIsNotOk + } - for _, valueKey := range []string{"delivery_id", "mt_peisong_id", "order_id"} { - if request.FormValue(valueKey) == "" { - baseapi.SugarLogger.Errorf("Missing mandatory param PostForm:%v, valueKey:%v", request.PostForm, valueKey) - return &CallbackResponse{ - Code: -1, + for _, valueKey := range []string{"delivery_id", "mt_peisong_id", "order_id"} { + if request.FormValue(valueKey) == "" { + baseapi.SugarLogger.Errorf("Missing mandatory param PostForm:%v, valueKey:%v", request.PostForm, valueKey) + return &CallbackResponse{ + Code: -1, + } } } + return nil } - return nil + return Err2CallbackResponse(err, "") } func (a *API) GetOrderCallbackMsg(request *http.Request) (orderMsg *CallbackOrderMsg, callbackResponse *CallbackResponse) { diff --git a/platformapi/mtwmapi/callback.go b/platformapi/mtwmapi/callback.go index 1eb13d95..d3c6a083 100644 --- a/platformapi/mtwmapi/callback.go +++ b/platformapi/mtwmapi/callback.go @@ -52,31 +52,39 @@ func Err2CallbackResponse(err error, data string) *CallbackResponse { } func (a *API) GetCallbackMsg(request *http.Request) (msg *CallbackMsg, callbackResponse *CallbackResponse) { - data := utils.URLValues2Map(request.PostForm) - if dataSign, ok := data[signKey]; ok { - fullURL := strings.TrimRight(a.callbackURL+request.URL.Path, "/") - sign := a.signParams(fullURL+"?", data) - if sign != dataSign.(string) { - baseapi.SugarLogger.Debugf("mtwm GetCallbackMsg my sign:%v, data sign:%v", sign, dataSign.(string)) - return nil, SignatureIsNotOk - } - cmd := strings.Trim(request.URL.EscapedPath(), "/") - cmd = cmd[strings.LastIndex(cmd, "/")+1:] - msg = &CallbackMsg{ - Cmd: cmd, - } - msg.Data = make(url.Values) - for k, v := range data { - // 美团外卖的用户催单信息的timestamp是毫秒(其它的事件是秒),统一归一化为秒 - if cmd == MsgTypeUserUrgeOrder && k == "timestamp" { - intV := utils.Str2Int64(v.(string)) - if intV > time.Now().Unix()*2 { - v = utils.Int64ToStr(intV / 1000) + err := request.ParseForm() + if err == nil { + data := utils.URLValues2Map(request.Form) + if dataSign, ok := data[signKey]; ok { + fullURL := strings.TrimRight(a.callbackURL+request.URL.Path, "/") + sign := a.signParams(fullURL+"?", data) + if sign != dataSign.(string) { + baseapi.SugarLogger.Debugf("mtwm GetCallbackMsg my sign:%v, data sign:%v", sign, dataSign.(string)) + callbackResponse = SignatureIsNotOk + } else { + cmd := strings.Trim(request.URL.EscapedPath(), "/") + cmd = cmd[strings.LastIndex(cmd, "/")+1:] + msg = &CallbackMsg{ + Cmd: cmd, + } + msg.Data = make(url.Values) + for k, v := range data { + // 美团外卖的用户催单信息的timestamp是毫秒(其它的事件是秒),统一归一化为秒 + if cmd == MsgTypeUserUrgeOrder && k == "timestamp" { + intV := utils.Str2Int64(v.(string)) + if intV > time.Now().Unix()*2 { + v = utils.Int64ToStr(intV / 1000) + } + } + msg.Data.Set(k, v.(string)) } } - msg.Data.Set(k, v.(string)) + } else { + callbackResponse = SignatureIsNotOk } - return msg, nil + } else { + baseapi.SugarLogger.Warnf("mtwm GetCallbackMsg ParseForm failed with error:%v", err) + callbackResponse = Err2CallbackResponse(err, "") } - return nil, SuccessResponse + return msg, callbackResponse }