修改jdapi回调取消息为两步

This commit is contained in:
gazebo
2019-12-03 15:06:24 +08:00
parent 1dc40112d5
commit cd6896bc4b
3 changed files with 50 additions and 39 deletions

View File

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

View File

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

View File

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