package uuptapi import ( "encoding/json" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/globals" "io/ioutil" "net/http" ) const ( uuCallbackURL = "http://callback.jxc4.com/UuPt/UuWaybillCallback" //uu跑腿订单回调地址 ) var ( SuccessResponse = &CallbackResponse{ReturnCode: "ok"} SignatureIsNotOk = &CallbackResponse{ReturnCode: "fail"} ) type CallbackResponse struct { ReturnCode string `json:"return_code"` ReturnMsg string `json:"return_msg"` } func Err2CallbackResponse(err error) *CallbackResponse { if err == nil { return &CallbackResponse{ ReturnCode: ReturnSuccess, //ReturnMsg: ReturnSuccessMsg, } } return &CallbackResponse{ ReturnCode: ReturnFail, ReturnMsg: utils.Format4Output(err, false), } } //订单提交后状态变化回调 func (a *API) WaybillCallback(request *http.Request) (*WaybillCallbackParam, *CallbackResponse) { //if callbackResponse := a.CheckCallbackValidation(request); callbackResponse != nil { // return nil, callbackResponse //} buf, err := ioutil.ReadAll(request.Body) if err != nil { globals.SugarLogger.Debugf("========buf err %v", err) return nil, &CallbackResponse{ ReturnCode: "2065", ReturnMsg: "错误", } } retVal := &WaybillCallbackParam{} if err := json.Unmarshal(buf, retVal); err != nil { globals.SugarLogger.Debugf("========buf err %v", err) return nil, &CallbackResponse{ ReturnCode: "20625", ReturnMsg: "错误2", } } globals.SugarLogger.Debugf("====retVal := %s", utils.Format4Output(retVal, false)) //retVal := WaybillCallbackParam{} //if err := utils.Map2StructByJson(utils.URLValues2Map(request.PostForm), &retVal, true); err != nil { // return nil, Err2CallbackResponse(err) //} globals.SugarLogger.Debugf("retval======%s", utils.Format4Output(retVal, false)) //con := retVal != WaybillCallbackParam{} //if con { // return &retVal, Err2CallbackResponse(nil) //} else { // return nil, Err2CallbackResponse(fmt.Errorf("UU跑腿运单回调信息为空")) //} return retVal, Err2CallbackResponse(nil) } 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 }