优化jdapi.CallbackMsg

This commit is contained in:
gazebo
2019-12-07 23:52:35 +08:00
parent 61176c2618
commit bd0285aaf3
3 changed files with 49 additions and 13 deletions

View File

@@ -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 {

View File

@@ -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",

View File

@@ -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"