diff --git a/platformapi/tiktok_shop/tiktok_api/transport_callback.go b/platformapi/tiktok_shop/tiktok_api/transport_callback.go deleted file mode 100644 index b031e40a..00000000 --- a/platformapi/tiktok_shop/tiktok_api/transport_callback.go +++ /dev/null @@ -1 +0,0 @@ -package tiktok_api diff --git a/platformapi/uuptapi/callback.go b/platformapi/uuptapi/callback.go index 315659b1..30be4889 100644 --- a/platformapi/uuptapi/callback.go +++ b/platformapi/uuptapi/callback.go @@ -1,10 +1,9 @@ package uuptapi import ( - "encoding/json" "fmt" "git.rosy.net.cn/baseapi/utils" - "io/ioutil" + "git.rosy.net.cn/jx-callback/globals" "net/http" ) @@ -12,10 +11,10 @@ const ( uuCallbackURL = "http://callback.jxc4.com/UuPt/UuWaybillCallback" //uu跑腿订单回调地址 ) -//var ( -// SuccessResponse = &CallbackResponse{ReturnCode: "ok"} -// FailResponse = &CallbackResponse{ReturnCode: "fail"} -//) +var ( + SuccessResponse = &CallbackResponse{ReturnCode: "ok"} + SignatureIsNotOk = &CallbackResponse{ReturnCode: "fail"} +) type CallbackResponse struct { ReturnCode string `json:"return_code"` @@ -37,12 +36,11 @@ func Err2CallbackResponse(err error) *CallbackResponse { //订单提交后状态变化回调 func (a *API) WaybillCallback(request *http.Request) (*WaybillCallbackParam, *CallbackResponse) { - resp, err := ioutil.ReadAll(request.Body) - if err != nil { - return nil, Err2CallbackResponse(err) + if callbackResponse := a.CheckCallbackValidation(request); callbackResponse != nil { + return nil, callbackResponse } retVal := WaybillCallbackParam{} - if err := json.Unmarshal(resp, &retVal); err != nil { + if err := utils.Map2StructByJson(utils.URLValues2Map(request.PostForm), &retVal, true); err != nil { return nil, Err2CallbackResponse(err) } con := retVal != WaybillCallbackParam{} @@ -52,3 +50,17 @@ func (a *API) WaybillCallback(request *http.Request) (*WaybillCallbackParam, *Ca return nil, Err2CallbackResponse(fmt.Errorf("UU跑腿运单回调信息为空")) } } + +func (a *API) CheckCallbackValidation(request *http.Request) (callbackResponse *CallbackResponse) { + err := request.ParseForm() + if err == nil { + sign := a.signParam(utils.URLValues2Map(request.PostForm)) + if sign != request.FormValue(signKey) { + globals.SugarLogger.Infof("Signature is not ok, mine:%v, get:%v", sign, request.FormValue(signKey)) + return SignatureIsNotOk + } + } else { + callbackResponse = Err2CallbackResponse(err) + } + return callbackResponse +} diff --git a/platformapi/uuptapi/uupt_model.go b/platformapi/uuptapi/uupt_model.go index 6b4a0201..2023b59a 100644 --- a/platformapi/uuptapi/uupt_model.go +++ b/platformapi/uuptapi/uupt_model.go @@ -218,5 +218,10 @@ type WaybillCallbackParam struct { StateText string `json:"state_text"` //当前状态说明 OriginID string `json:"origin_id"` //第三方订单号 DriverPhoto string `json:"driver_photo"` //跑男头像(跑男接单后) - BaseRespInfo + Sign string `json:"sign"` //加密签名 + NonceStr string `json:"nonce_str"` //随机字符串,不长于32位 + AppID string `json:"appid"` //第三方用户唯一凭证 + ReturnMsg string `json:"return_msg"` //返回信息,如非空,为错误原因,如签名失败、参数格式校验错误 + ReturnCode string `json:"return_code"` //状态,ok/fail表示成功 + //BaseRespInfo }