diff --git a/platformapi/jdapi/callback.go b/platformapi/jdapi/callback.go index cf8ee0de..aee27c48 100644 --- a/platformapi/jdapi/callback.go +++ b/platformapi/jdapi/callback.go @@ -1,14 +1,11 @@ package jdapi import ( - "fmt" "io/ioutil" "net/http" - "net/url" "strings" "git.rosy.net.cn/baseapi" - "git.rosy.net.cn/baseapi/platformapi" "git.rosy.net.cn/baseapi/utils" ) @@ -37,6 +34,9 @@ const ( OrderStatusFinished = "90000" OrderStatusCanceled = "20020" + OrderStatusVenderAgreeCancel = "20031" // 商家同意取消申请 + OrderStatusVenderRejctCancel = "20032" // 商家驳回取消申请 + OrderStatusUserApplyCancel = "20030" // 这个其实不是一个状态,是一个动作 OrderStatusLocked = "20010" OrderStatusUnlocked = "20050" @@ -87,10 +87,11 @@ const ( const ( // 订单 - CallbackMsgDeliveryCarrierModify = "deliveryCarrierModify" // 订单转自送消息(是指转自送成功后,用处不大) - CallbackMsgOrderAccounting = "orderAccounting" // 订单应结消息 - CallbackMsgApplyCancelOrder = "applyCancelOrder" - CallbackMsgPushDeliveryStatus = "pushDeliveryStatus" + CallbackMsgDeliveryCarrierModify = "deliveryCarrierModify" // 订单转自送消息(是指转自送成功后,用处不大) + CallbackMsgOrderAccounting = "orderAccounting" // 订单应结消息 + CallbackMsgApplyCancelOrder = "applyCancelOrder" + CallbackMsgPushDeliveryStatus = "pushDeliveryStatus" + CallbackMsgVenderAuditApplyCancelOrder = "venderAuditApplyCancelOrder" // 账务 CallbackMsgEndOrderFinance = "endOrderFinance" // 订单金额拆分完成消息 @@ -183,9 +184,10 @@ var ( FormatErrorResponse = &CallbackResponse{Code: "-1", Msg: "failed", Data: ""} needDecodeMap = map[string]bool{ - CallbackMsgApplyCancelOrder: true, - CallbackMsgPushDeliveryStatus: true, - CallbackMsgStockIsHave: true, + CallbackMsgApplyCancelOrder: true, + CallbackMsgPushDeliveryStatus: true, + CallbackMsgStockIsHave: true, + CallbackMsgVenderAuditApplyCancelOrder: true, } ) @@ -200,83 +202,6 @@ func Err2CallbackResponse(err error, data string) *CallbackResponse { } } -func unmarshalData(strData string, msg interface{}) (callbackResponse *CallbackResponse) { - err := utils.UnmarshalUseNumber([]byte(strData), msg) - if err != nil { - return &CallbackResponse{ - Code: ResponseCodeAbnormalParam, - Msg: fmt.Sprintf(platformapi.ErrStrUnmarshalError, strData, err), - Data: strData, - } - } - return nil -} - -func GetCallbackMsg(request *http.Request, needDecode bool) (values url.Values, token, msgURL string, callbackResponse *CallbackResponse) { - data, err := ioutil.ReadAll(request.Body) - if err != nil { - return nil, "", "", Err2CallbackResponse(err, "") - } - values, err = utils.HTTPBody2Values(data, needDecode) - if err != nil { - return nil, "", "", FormatErrorResponse - } - token = values.Get("token") - return values, token, getMsgURLFromRequest(request), nil -} - -func (a *API) CheckCallbackValidation(values url.Values) (callbackResponse *CallbackResponse) { - mapData := utils.URLValues2Map(values) - sign := a.signParams(mapData) - if sign != values.Get(signKey) { - baseapi.SugarLogger.Infof("Signature is not ok, mine:%v, get:%v", sign, values.Get(signKey)) - return FormatErrorResponse - } - return nil -} - -func (a *API) getCommonOrderCallbackMsg(values url.Values, msg interface{}) (callbackResponse *CallbackResponse) { - if callbackResponse = a.CheckCallbackValidation(values); callbackResponse != nil { - return callbackResponse - } - jdParamJSON := values.Get(paramJson) - // baseapi.SugarLogger.Debug(jdParamJSON) - if callbackResponse = unmarshalData(jdParamJSON, msg); callbackResponse != nil { - return callbackResponse - } - return nil -} - -func (a *API) GetOrderCallbackMsg(values url.Values, msgURL string) (msg *CallbackOrderMsg, callbackResponse *CallbackResponse) { - if callbackResponse = a.getCommonOrderCallbackMsg(values, &msg); callbackResponse == nil { - msg.CallbackMsg = &CallbackMsg{ - MsgURL: msgURL, - } - } - return msg, callbackResponse -} - -func (a *API) GetOrderDeliveryCallbackMsg(values url.Values, msgURL string) (msg *CallbackDeliveryStatusMsg, callbackResponse *CallbackResponse) { - if callbackResponse = a.getCommonOrderCallbackMsg(values, &msg); callbackResponse == nil { - msg.CallbackMsg = &CallbackMsg{ - MsgURL: msgURL, - } - } - return msg, callbackResponse -} - -func (a *API) GetStoreStockCallbackMsg(values url.Values, msgURL string) (msg *CallbackStoreStockMsg, callbackResponse *CallbackResponse) { - var tmpMsg map[string]interface{} - callbackResponse = a.getCommonOrderCallbackMsg(values, &tmpMsg) - if callbackResponse == nil { - msg = map2StockCallbackMsg(tmpMsg) - msg.CallbackMsg = &CallbackMsg{ - MsgURL: msgURL, - } - } - return msg, callbackResponse -} - func map2StockCallbackMsg(mapData map[string]interface{}) (msg *CallbackStoreStockMsg) { msg = &CallbackStoreStockMsg{ StationNo: utils.Interface2String(mapData["stationNo"]), @@ -298,7 +223,7 @@ func getMsgURLFromRequest(request *http.Request) (msgURL string) { return msgURL } -func GetCallbackMsg2(request *http.Request) (callbackMsg *CallbackMsg, mapData map[string]interface{}, callbackResponse *CallbackResponse) { +func GetCallbackMsg(request *http.Request) (callbackMsg *CallbackMsg, mapData map[string]interface{}, callbackResponse *CallbackResponse) { msgURL := getMsgURLFromRequest(request) data, err := ioutil.ReadAll(request.Body) if err != nil { @@ -338,7 +263,7 @@ func GetCallbackMsg2(request *http.Request) (callbackMsg *CallbackMsg, mapData m return callbackMsg, mapData, callbackResponse } -func (a *API) CheckCallbackValidation2(mapData map[string]interface{}, signInData string) (callbackResponse *CallbackResponse) { +func (a *API) CheckCallbackValidation(mapData map[string]interface{}, signInData string) (callbackResponse *CallbackResponse) { sign := a.signParams(mapData) if sign != signInData { baseapi.SugarLogger.Infof("Signature is not ok, mine:%s, signInData:%s", sign, signInData) diff --git a/platformapi/jdapi/callback_test.go b/platformapi/jdapi/callback_test.go index b79832c4..8722e5cf 100644 --- a/platformapi/jdapi/callback_test.go +++ b/platformapi/jdapi/callback_test.go @@ -33,12 +33,12 @@ func TestGetCallbackMsg(t *testing.T) { }, } { callbackStr := strings.TrimSpace(strPair[1]) - callbackMsg, mapData, resp := GetCallbackMsg2(utils.BuildRequest(http.MethodPost, "/djsw/"+strPair[0], callbackStr, "")) + callbackMsg, mapData, resp := GetCallbackMsg(utils.BuildRequest(http.MethodPost, "/djsw/"+strPair[0], callbackStr, "")) if resp != nil { t.Fatal(resp) } sugarLogger.Debug(callbackMsg.MsgURL) - resp = api.CheckCallbackValidation2(mapData, callbackMsg.Sign) + resp = api.CheckCallbackValidation(mapData, callbackMsg.Sign) if resp != nil { t.Fatal(resp) } @@ -46,26 +46,6 @@ func TestGetCallbackMsg(t *testing.T) { } } -func TestGetOrderCallbackMsg(t *testing.T) { - callbackStr := strings.TrimSpace( - ` - timestamp=2019-12-03+06%3A28%3A40&sign=84AF173723A89E95AD7D0CFECA293683&v=1.0&jd_param_json=%7B%22billId%22%3A%22929053552000142%22%2C%22statusId%22%3A%2232000%22%2C%22timestamp%22%3A%222019-12-03+06%3A28%3A37%22%7D&token=77e703b7-7997-441b-a12a-2e522efb117a&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json - - `) - values, token, msgURL, resp := GetCallbackMsg(utils.BuildRequest(http.MethodPost, "/djsw/"+CallbackMsgOrderAccounting, callbackStr, ""), false) - if resp != nil { - t.Fatal(resp) - } - sugarLogger.Debug(token) - sugarLogger.Debug(msgURL) - orderMsg, resp := api.GetOrderCallbackMsg(values, msgURL) - if resp != nil { - t.Fatal(resp) - } - sugarLogger.Debug(utils.Format4Output(orderMsg, false)) - sugarLogger.Debug(orderMsg.MsgURL) -} - func TestSimulateSendNewOrderMsg(t *testing.T) { orderInfo := &CallbackOrderMsg{ BillID: "813344594000041",