- call parseForm explicit for http.Response

This commit is contained in:
gazebo
2019-03-22 18:16:33 +08:00
parent 6cd940c926
commit fe9d3b6359
4 changed files with 60 additions and 46 deletions

View File

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