From cd6896bc4bcd0c72ed5073deb2cc04075848701a Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 3 Dec 2019 15:06:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9jdapi=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E6=81=AF=E4=B8=BA=E4=B8=A4=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platformapi/jdapi/callback.go | 60 +++++++++++++++------------------ platformapi/jdapi/jdapi.go | 4 +++ platformapi/jdapi/order_test.go | 25 ++++++++++---- 3 files changed, 50 insertions(+), 39 deletions(-) diff --git a/platformapi/jdapi/callback.go b/platformapi/jdapi/callback.go index 32ed0298..ed20a4a9 100644 --- a/platformapi/jdapi/callback.go +++ b/platformapi/jdapi/callback.go @@ -176,7 +176,7 @@ func Err2CallbackResponse(err error, data string) *CallbackResponse { } } -func (a *API) unmarshalData(strData string, msg interface{}) (callbackResponse *CallbackResponse) { +func unmarshalData(strData string, msg interface{}) (callbackResponse *CallbackResponse) { err := utils.UnmarshalUseNumber([]byte(strData), msg) if err != nil { return &CallbackResponse{ @@ -188,6 +188,19 @@ func (a *API) unmarshalData(strData string, msg interface{}) (callbackResponse * 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) @@ -198,56 +211,37 @@ func (a *API) CheckCallbackValidation(values url.Values) (callbackResponse *Call return nil } -func (a *API) getCommonOrderCallbackMsg(request *http.Request, msg interface{}, needDecode bool) (callbackResponse *CallbackResponse) { - data, err := ioutil.ReadAll(request.Body) - if err != nil { - return Err2CallbackResponse(err, "") - } - // baseapi.SugarLogger.Debug(string(data)) - result, err := utils.HTTPBody2Values(data, needDecode) - if err != nil { - return FormatErrorResponse - } - if callbackResponse = a.CheckCallbackValidation(result); callbackResponse != nil { +func (a *API) getCommonOrderCallbackMsg(values url.Values, msg interface{}) (callbackResponse *CallbackResponse) { + if callbackResponse = a.CheckCallbackValidation(values); callbackResponse != nil { return callbackResponse } - - jdParamJSON := result.Get(paramJson) + jdParamJSON := values.Get(paramJson) // baseapi.SugarLogger.Debug(jdParamJSON) - if callbackResponse = a.unmarshalData(jdParamJSON, msg); callbackResponse != nil { + if callbackResponse = unmarshalData(jdParamJSON, msg); callbackResponse != nil { return callbackResponse } return nil } -func (a *API) GetOrderCallbackMsg(request *http.Request) (msg *CallbackOrderMsg, callbackResponse *CallbackResponse) { - msg = new(CallbackOrderMsg) - if callbackResponse = a.getCommonOrderCallbackMsg(request, msg, false); callbackResponse == nil { - msg.MsgURL = getMsgURLFromRequest(request) +func (a *API) GetOrderCallbackMsg(values url.Values, msgURL string) (msg *CallbackOrderMsg, callbackResponse *CallbackResponse) { + if callbackResponse = a.getCommonOrderCallbackMsg(values, &msg); callbackResponse == nil { + msg.MsgURL = msgURL } return msg, callbackResponse } -func (a *API) GetOrderApplyCancelCallbackMsg(request *http.Request) (msg *CallbackOrderMsg, callbackResponse *CallbackResponse) { - msg = new(CallbackOrderMsg) - if callbackResponse = a.getCommonOrderCallbackMsg(request, msg, true); callbackResponse == nil { - msg.MsgURL = getMsgURLFromRequest(request) +func (a *API) GetOrderDeliveryCallbackMsg(values url.Values, msgURL string) (msg *CallbackDeliveryStatusMsg, callbackResponse *CallbackResponse) { + if callbackResponse = a.getCommonOrderCallbackMsg(values, &msg); callbackResponse == nil { + msg.MsgURL = msgURL } return msg, callbackResponse } -func (a *API) GetOrderDeliveryCallbackMsg(request *http.Request) (msg *CallbackDeliveryStatusMsg, callbackResponse *CallbackResponse) { - if callbackResponse = a.getCommonOrderCallbackMsg(request, &msg, true); callbackResponse == nil { - msg.MsgURL = getMsgURLFromRequest(request) - } - return msg, callbackResponse -} - -func (a *API) GetStoreStockCallbackMsg(request *http.Request) (msg *CallbackStoreStockMsg, callbackResponse *CallbackResponse) { +func (a *API) GetStoreStockCallbackMsg(values url.Values, msgURL string) (msg *CallbackStoreStockMsg, callbackResponse *CallbackResponse) { msg = new(CallbackStoreStockMsg) - msg.MsgURL = getMsgURLFromRequest(request) + msg.MsgURL = msgURL var tmpMsg map[string]interface{} - callbackResponse = a.getCommonOrderCallbackMsg(request, &tmpMsg, true) + callbackResponse = a.getCommonOrderCallbackMsg(values, &tmpMsg) if callbackResponse == nil { msg.StationNo = utils.Interface2String(tmpMsg["stationNo"]) msg.SkuId = utils.Str2Int64(utils.Interface2String(tmpMsg["skuId"])) diff --git a/platformapi/jdapi/jdapi.go b/platformapi/jdapi/jdapi.go index e3a341f1..58ba54c2 100644 --- a/platformapi/jdapi/jdapi.go +++ b/platformapi/jdapi/jdapi.go @@ -149,6 +149,10 @@ func NewPageOnly(cookie string, config ...*platformapi.APIConfig) *API { return api } +func (a *API) GetToken() (token string) { + return a.token +} + 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" diff --git a/platformapi/jdapi/order_test.go b/platformapi/jdapi/order_test.go index e8c8ad39..f9bb832a 100644 --- a/platformapi/jdapi/order_test.go +++ b/platformapi/jdapi/order_test.go @@ -4,6 +4,7 @@ import ( "io/ioutil" "net/http" "net/url" + "strings" "testing" "git.rosy.net.cn/baseapi/utils" @@ -51,8 +52,12 @@ func TestOrderQuery(t *testing.T) { } func TestGetOrderCallbackMsg(t *testing.T) { - callbackStr := "timestamp=2018-06-27+12%3A43%3A51&sign=84096ADFAB81E224D6231269AD1F6AAB&v=1.0&jd_param_json=%7B%22billId%22%3A%22815338526000221%22%2C%22statusId%22%3A%2232000%22%2C%22timestamp%22%3A%222018-06-27+12%3A42%3A34%22%7D&token=91633f2a-c5f5-4982-a925-a220d19095c3&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json" - result, resp := api.GetOrderCallbackMsg(utils.BuildRequest(http.MethodPost, "", callbackStr, "")) + 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, _, msgURL, resp := GetCallbackMsg(utils.BuildRequest(http.MethodPost, "", callbackStr, ""), false) + result, resp := api.GetOrderCallbackMsg(values, msgURL) if resp != nil { t.Fatal(resp) @@ -61,8 +66,12 @@ func TestGetOrderCallbackMsg(t *testing.T) { } func TestGetOrderDeliveryCallbackMsg(t *testing.T) { - callbackStr := "timestamp=2018-06-27%2B09%253A08%253A41&sign=54D9A8515BB5650DC3B81366E3286570&v=1.0&jd_param_json=%257B%2522createPin%2522%253A%2522JD_21134dac1c251d2%2522%252C%2522deliveryCarrierName%2522%253A%2522%25E8%25BE%25BE%25E8%25BE%25BE%25E4%25B8%2593%25E9%2580%2581%2522%252C%2522deliveryCarrierNo%2522%253A%25229966%2522%252C%2522deliveryStatus%2522%253A%252210%2522%252C%2522deliveryStatusTime%2522%253A%25222018-06-27%2B09%253A08%253A41%2522%252C%2522inputTime%2522%253A%25222018-06-27%2B09%253A08%253A41%2522%252C%2522orderId%2522%253A%2522815324888000121%2522%257D&token=91633f2a-c5f5-4982-a925-a220d19095c3&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json" - result, resp := api.GetOrderDeliveryCallbackMsg(utils.BuildRequest(http.MethodPost, "", callbackStr, "")) + callbackStr := strings.TrimSpace(` + timestamp=2018-06-27%2B09%253A08%253A41&sign=54D9A8515BB5650DC3B81366E3286570&v=1.0&jd_param_json=%257B%2522createPin%2522%253A%2522JD_21134dac1c251d2%2522%252C%2522deliveryCarrierName%2522%253A%2522%25E8%25BE%25BE%25E8%25BE%25BE%25E4%25B8%2593%25E9%2580%2581%2522%252C%2522deliveryCarrierNo%2522%253A%25229966%2522%252C%2522deliveryStatus%2522%253A%252210%2522%252C%2522deliveryStatusTime%2522%253A%25222018-06-27%2B09%253A08%253A41%2522%252C%2522inputTime%2522%253A%25222018-06-27%2B09%253A08%253A41%2522%252C%2522orderId%2522%253A%2522815324888000121%2522%257D&token=91633f2a-c5f5-4982-a925-a220d19095c3&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json + +`) + values, _, msgURL, resp := GetCallbackMsg(utils.BuildRequest(http.MethodPost, "", callbackStr, ""), true) + result, resp := api.GetOrderDeliveryCallbackMsg(values, msgURL) if resp != nil { t.Fatal(resp) @@ -71,8 +80,12 @@ func TestGetOrderDeliveryCallbackMsg(t *testing.T) { } func TestGetOrderApplyCancelCallbackMsg(t *testing.T) { - callbackStr := "timestamp=2018-06-27%2B13%253A35%253A29&sign=F1398D658514D8864FFB56F5EF2C4792&v=1.0&jd_param_json=%257B%2522billId%2522%253A%2522815339944000322%2522%252C%2522remark%2522%253A%2522%25E5%2595%2586%25E5%25AE%25B6%25E7%25BC%25BA%25E8%25B4%25A7%2522%252C%2522statusId%2522%253A%252220030%2522%252C%2522timestamp%2522%253A%25222018-06-27%2B13%253A35%253A24%2522%257D&token=91633f2a-c5f5-4982-a925-a220d19095c3&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json" - result, resp := api.GetOrderApplyCancelCallbackMsg(utils.BuildRequest(http.MethodPost, "", callbackStr, "")) + callbackStr := strings.TrimSpace(` + timestamp=2018-06-27%2B13%253A35%253A29&sign=F1398D658514D8864FFB56F5EF2C4792&v=1.0&jd_param_json=%257B%2522billId%2522%253A%2522815339944000322%2522%252C%2522remark%2522%253A%2522%25E5%2595%2586%25E5%25AE%25B6%25E7%25BC%25BA%25E8%25B4%25A7%2522%252C%2522statusId%2522%253A%252220030%2522%252C%2522timestamp%2522%253A%25222018-06-27%2B13%253A35%253A24%2522%257D&token=91633f2a-c5f5-4982-a925-a220d19095c3&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json + + `) + values, _, msgURL, resp := GetCallbackMsg(utils.BuildRequest(http.MethodPost, "", callbackStr, ""), true) + result, resp := api.GetOrderApplyCancelCallbackMsg(values, msgURL) if resp != nil { t.Fatal(resp)