diff --git a/platformapi/jdapi/callback.go b/platformapi/jdapi/callback.go index e2cf34e1..eecc46e5 100644 --- a/platformapi/jdapi/callback.go +++ b/platformapi/jdapi/callback.go @@ -112,7 +112,7 @@ type CallbackResponse struct { } type CallbackMsg struct { - MsgURL string `json:"-"` + MsgURL string `json:"msgURL"` AppKey string `json:"app_key"` Token string `json:"token"` @@ -122,11 +122,11 @@ type CallbackMsg struct { V string `json:"v"` JdParamJSON string `json:"jd_param_json"` - Param interface{} `json:"param"` + Param interface{} `json:"-"` // 这里json必须是-,否则会导致json encode时死递归 } type CallbackOrderMsg struct { - MsgURL string `json:"msgURL"` + *CallbackMsg BillID string `json:"billId"` OutBillID string `json:"outBillId"` StatusID string `json:"statusId"` @@ -135,6 +135,7 @@ type CallbackOrderMsg struct { } type CallbackDeliveryStatusMsg struct { + *CallbackMsg OrderID string `json:"orderId"` DeliveryStatusTime string `json:"deliveryStatusTime"` DeliveryManNo string `json:"deliveryManNo"` @@ -151,6 +152,7 @@ type CallbackDeliveryStatusMsg struct { } type CallbackStoreStockMsg struct { + *CallbackMsg StationNo string `json:"stationNo"` SkuID int64 `json:"skuId"` Have bool `json:"have"` @@ -247,7 +249,9 @@ func (a *API) getCommonOrderCallbackMsg(values url.Values, msg interface{}) (cal func (a *API) GetOrderCallbackMsg(values url.Values, msgURL string) (msg *CallbackOrderMsg, callbackResponse *CallbackResponse) { if callbackResponse = a.getCommonOrderCallbackMsg(values, &msg); callbackResponse == nil { - msg.MsgURL = msgURL + msg.CallbackMsg = &CallbackMsg{ + MsgURL: msgURL, + } } return msg, callbackResponse } @@ -302,17 +306,23 @@ func GetCallbackMsg2(request *http.Request) (callbackMsg *CallbackMsg, mapData m callbackMsg.MsgURL = msgURL if msgURL == CallbackMsgDeliveryCarrierModify { var deliveryMsg *CallbackDeliveryStatusMsg - err = utils.UnmarshalUseNumber([]byte(callbackMsg.JdParamJSON), &deliveryMsg) - callbackMsg.Param = deliveryMsg + if err = utils.UnmarshalUseNumber([]byte(callbackMsg.JdParamJSON), &deliveryMsg); err == nil { + callbackMsg.Param = deliveryMsg + deliveryMsg.CallbackMsg = callbackMsg + } } else if msgURL == CallbackMsgStockIsHave { var mapData map[string]interface{} if err = utils.UnmarshalUseNumber([]byte(callbackMsg.JdParamJSON), &mapData); err == nil { - callbackMsg.Param = map2StockCallbackMsg(mapData) + stockMsg := map2StockCallbackMsg(mapData) + callbackMsg.Param = stockMsg + stockMsg.CallbackMsg = callbackMsg } } else { var orderMsg *CallbackOrderMsg - err = utils.UnmarshalUseNumber([]byte(callbackMsg.JdParamJSON), &orderMsg) - callbackMsg.Param = orderMsg + if err = utils.UnmarshalUseNumber([]byte(callbackMsg.JdParamJSON), &orderMsg); err == nil { + callbackMsg.Param = orderMsg + orderMsg.CallbackMsg = callbackMsg + } } } if err != nil { diff --git a/platformapi/jdapi/callback_test.go b/platformapi/jdapi/callback_test.go index 4ba252f4..b79832c4 100644 --- a/platformapi/jdapi/callback_test.go +++ b/platformapi/jdapi/callback_test.go @@ -13,10 +13,11 @@ import ( func TestGetCallbackMsg(t *testing.T) { for _, strPair := range [][]string{ []string{ - CallbackMsgOrderAccounting, + "newOrder", ` - 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 - `, + timestamp=2019-12-07+06%3A27%3A42&sign=565F552F7BD692664A24C0F869A2FEC5&v=1.0&jd_param_json=%7B%22billId%22%3A%221100001049331247%22%2C%22statusId%22%3A%2232000%22%2C%22timestamp%22%3A%222019-12-07+06%3A27%3A38%22%7D&token=77e703b7-7997-441b-a12a-2e522efb117a&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json + + `, }, []string{ CallbackMsgPushDeliveryStatus, @@ -32,10 +33,11 @@ func TestGetCallbackMsg(t *testing.T) { }, } { callbackStr := strings.TrimSpace(strPair[1]) - callbackMsg, mapData, resp := GetCallbackMsg2(utils.BuildRequest(http.MethodPost, strPair[0], callbackStr, "")) + callbackMsg, mapData, resp := GetCallbackMsg2(utils.BuildRequest(http.MethodPost, "/djsw/"+strPair[0], callbackStr, "")) if resp != nil { t.Fatal(resp) } + sugarLogger.Debug(callbackMsg.MsgURL) resp = api.CheckCallbackValidation2(mapData, callbackMsg.Sign) if resp != nil { t.Fatal(resp) @@ -44,6 +46,26 @@ 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", diff --git a/platformapi/jdapi/jdapi.go b/platformapi/jdapi/jdapi.go index 58ba54c2..4db8077a 100644 --- a/platformapi/jdapi/jdapi.go +++ b/platformapi/jdapi/jdapi.go @@ -153,6 +153,10 @@ func (a *API) GetToken() (token string) { return a.token } +func (a *API) GetAppKey() (appKey string) { + return a.appKey +} + func (a *API) AccessAPI2(apiStr string, jdParams map[string]interface{}, traceInfo string) (retVal map[string]interface{}, err error) { params := make(map[string]interface{}) params["v"] = "1.0"