package mtwmapi import ( "net/http" "net/url" "strings" "git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi/utils" ) const ( MsgTypeWaybillStatus = "waybillStatus" MsgTypeNewOrder = "newOrder" MsgTypeOrderAccepted = "orderAccepted" MsgTypeOrderFinished = "orderFinished" MsgTypeOrderFinancial = "orderFinancial" MsgTypeOrderCanceled = "orderCancled" MsgTypeUserUrgeOrder = "userUrgeOrder" MsgTypePrivateNumberDowngrade = "numberDowngrade" MsgTypeOrderModified = "orderModified" MsgTypeOrderRefund = "orderRefund" MsgTypeOrderPartialRefund = "orderPartialRefund" ) type CallbackResponse struct { Data string `json:"data"` } // !!!特别注意,Data中的数据 type CallbackMsg struct { Data url.Values Cmd string } var ( SuccessResponse = &CallbackResponse{Data: "ok"} SignatureIsNotOk = &CallbackResponse{Data: "sign failed"} ) func Err2CallbackResponse(err error, data string) *CallbackResponse { if err == nil { return SuccessResponse } if data == "" { data = err.Error() } return &CallbackResponse{ Data: data, } } 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 { msg.Data.Set(k, v.(string)) } return msg, nil } return nil, SuccessResponse }