Merge branch 'master' of e.coding.net:rosydev/baseapi
This commit is contained in:
@@ -89,6 +89,8 @@ const (
|
||||
// 订单
|
||||
CallbackMsgDeliveryCarrierModify = "deliveryCarrierModify" // 订单转自送消息(是指转自送成功后,用处不大)
|
||||
CallbackMsgOrderAccounting = "orderAccounting" // 订单应结消息
|
||||
CallbackMsgApplyCancelOrder = "applyCancelOrder"
|
||||
CallbackMsgPushDeliveryStatus = "pushDeliveryStatus"
|
||||
|
||||
// 账务
|
||||
CallbackMsgEndOrderFinance = "endOrderFinance" // 订单金额拆分完成消息
|
||||
@@ -99,6 +101,8 @@ const (
|
||||
CallbackMsgUpdateApplyAfterSaleBill = "updateApplyAfterSaleBill" // 修改售后单申请消息
|
||||
CallbackMsgNewAfterSaleBill = "newAfterSaleBill" // 新建售后单消息
|
||||
CallbackMsgAfterSaleBillStatus = "afterSaleBillStatus" // 售后单状态消息
|
||||
|
||||
CallbackMsgStockIsHave = "stockIsHave"
|
||||
)
|
||||
|
||||
type CallbackResponse struct {
|
||||
@@ -107,8 +111,22 @@ type CallbackResponse struct {
|
||||
Data string `json:"data"`
|
||||
}
|
||||
|
||||
type CallbackMsg struct {
|
||||
MsgURL string `json:"msgURL"`
|
||||
|
||||
AppKey string `json:"app_key"`
|
||||
Token string `json:"token"`
|
||||
Timestamp string `json:"timestamp"`
|
||||
Sign string `json:"sign"`
|
||||
Format string `json:"format"`
|
||||
V string `json:"v"`
|
||||
|
||||
JdParamJSON string `json:"jd_param_json"`
|
||||
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"`
|
||||
@@ -117,7 +135,7 @@ type CallbackOrderMsg struct {
|
||||
}
|
||||
|
||||
type CallbackDeliveryStatusMsg struct {
|
||||
MsgURL string `json:"msgURL"`
|
||||
*CallbackMsg
|
||||
OrderID string `json:"orderId"`
|
||||
DeliveryStatusTime string `json:"deliveryStatusTime"`
|
||||
DeliveryManNo string `json:"deliveryManNo"`
|
||||
@@ -133,6 +151,17 @@ type CallbackDeliveryStatusMsg struct {
|
||||
InputTime string `json:"inputTime"`
|
||||
}
|
||||
|
||||
type CallbackStoreStockMsg struct {
|
||||
*CallbackMsg
|
||||
StationNo string `json:"stationNo"`
|
||||
SkuID int64 `json:"skuId"`
|
||||
Have bool `json:"have"`
|
||||
Vendibility int `json:"vendibility"`
|
||||
OperPin string `json:"operPin"`
|
||||
OperTime int64 `json:"operTime"`
|
||||
OperSource int `json:"operSource"`
|
||||
}
|
||||
|
||||
const (
|
||||
OpenSourceJDLSP = 1
|
||||
OpenSourceJDMedicineCity = 2
|
||||
@@ -149,20 +178,15 @@ const (
|
||||
OpenSourceBatchTask = 14
|
||||
)
|
||||
|
||||
type CallbackStoreStockMsg struct {
|
||||
MsgURL string `json:"msgURL"`
|
||||
StationNo string `json:"stationNo"`
|
||||
SkuId int64 `json:"skuId"`
|
||||
Have bool `json:"have"`
|
||||
Vendibility int `json:"vendibility"`
|
||||
OperPin string `json:"operPin"`
|
||||
OperTime int64 `json:"operTime"`
|
||||
OperSource int `json:"operSource"`
|
||||
}
|
||||
|
||||
var (
|
||||
SuccessResponse = &CallbackResponse{Code: "0", Msg: "success", Data: ""}
|
||||
FormatErrorResponse = &CallbackResponse{Code: "-1", Msg: "failed", Data: ""}
|
||||
|
||||
needDecodeMap = map[string]bool{
|
||||
CallbackMsgApplyCancelOrder: true,
|
||||
CallbackMsgPushDeliveryStatus: true,
|
||||
CallbackMsgStockIsHave: true,
|
||||
}
|
||||
)
|
||||
|
||||
func Err2CallbackResponse(err error, data string) *CallbackResponse {
|
||||
@@ -225,35 +249,47 @@ 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
|
||||
}
|
||||
|
||||
func (a *API) GetOrderDeliveryCallbackMsg(values url.Values, msgURL string) (msg *CallbackDeliveryStatusMsg, callbackResponse *CallbackResponse) {
|
||||
if callbackResponse = a.getCommonOrderCallbackMsg(values, &msg); callbackResponse == nil {
|
||||
msg.MsgURL = msgURL
|
||||
msg.CallbackMsg = &CallbackMsg{
|
||||
MsgURL: msgURL,
|
||||
}
|
||||
}
|
||||
return msg, callbackResponse
|
||||
}
|
||||
|
||||
func (a *API) GetStoreStockCallbackMsg(values url.Values, msgURL string) (msg *CallbackStoreStockMsg, callbackResponse *CallbackResponse) {
|
||||
msg = new(CallbackStoreStockMsg)
|
||||
msg.MsgURL = msgURL
|
||||
var tmpMsg map[string]interface{}
|
||||
callbackResponse = a.getCommonOrderCallbackMsg(values, &tmpMsg)
|
||||
if callbackResponse == nil {
|
||||
msg.StationNo = utils.Interface2String(tmpMsg["stationNo"])
|
||||
msg.SkuId = utils.Str2Int64(utils.Interface2String(tmpMsg["skuId"]))
|
||||
msg.Vendibility = int(utils.Str2Int64(utils.Interface2String(tmpMsg["vendibility"])))
|
||||
msg.OperPin = utils.Interface2String(tmpMsg["operPin"])
|
||||
msg.OperTime = utils.Str2Int64(utils.Interface2String(tmpMsg["operTime"]))
|
||||
msg.OperSource = int(utils.Str2Int64((utils.Interface2String(tmpMsg["operSource"]))))
|
||||
msg.Have = utils.Interface2String(tmpMsg["have"]) == "true"
|
||||
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"]),
|
||||
SkuID: utils.Str2Int64(utils.Interface2String(mapData["skuId"])),
|
||||
Vendibility: int(utils.Str2Int64(utils.Interface2String(mapData["vendibility"]))),
|
||||
OperPin: utils.Interface2String(mapData["operPin"]),
|
||||
OperTime: utils.Str2Int64(utils.Interface2String(mapData["operTime"])),
|
||||
OperSource: int(utils.Str2Int64((utils.Interface2String(mapData["operSource"])))),
|
||||
Have: utils.Interface2String(mapData["have"]) == "true",
|
||||
}
|
||||
return msg
|
||||
}
|
||||
|
||||
func getMsgURLFromRequest(request *http.Request) (msgURL string) {
|
||||
index := strings.Index(request.URL.Path, CallbackPrefix)
|
||||
if index >= 0 {
|
||||
@@ -261,3 +297,52 @@ func getMsgURLFromRequest(request *http.Request) (msgURL string) {
|
||||
}
|
||||
return msgURL
|
||||
}
|
||||
|
||||
func GetCallbackMsg2(request *http.Request) (callbackMsg *CallbackMsg, mapData map[string]interface{}, callbackResponse *CallbackResponse) {
|
||||
msgURL := getMsgURLFromRequest(request)
|
||||
data, err := ioutil.ReadAll(request.Body)
|
||||
if err != nil {
|
||||
return nil, nil, Err2CallbackResponse(err, "")
|
||||
}
|
||||
values, err := utils.HTTPBody2Values(data, needDecodeMap[msgURL])
|
||||
if err != nil {
|
||||
return nil, nil, FormatErrorResponse
|
||||
}
|
||||
mapData = utils.URLValues2Map(values)
|
||||
if err = utils.Map2StructByJson(mapData, &callbackMsg, false); err == nil {
|
||||
callbackMsg.MsgURL = msgURL
|
||||
if msgURL == CallbackMsgDeliveryCarrierModify {
|
||||
var deliveryMsg *CallbackDeliveryStatusMsg
|
||||
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 {
|
||||
stockMsg := map2StockCallbackMsg(mapData)
|
||||
callbackMsg.Param = stockMsg
|
||||
stockMsg.CallbackMsg = callbackMsg
|
||||
}
|
||||
} else {
|
||||
var orderMsg *CallbackOrderMsg
|
||||
if err = utils.UnmarshalUseNumber([]byte(callbackMsg.JdParamJSON), &orderMsg); err == nil {
|
||||
callbackMsg.Param = orderMsg
|
||||
orderMsg.CallbackMsg = callbackMsg
|
||||
}
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
return nil, nil, Err2CallbackResponse(err, "")
|
||||
}
|
||||
return callbackMsg, mapData, callbackResponse
|
||||
}
|
||||
|
||||
func (a *API) CheckCallbackValidation2(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)
|
||||
return FormatErrorResponse
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
145
platformapi/jdapi/callback_test.go
Normal file
145
platformapi/jdapi/callback_test.go
Normal file
@@ -0,0 +1,145 @@
|
||||
package jdapi
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
)
|
||||
|
||||
func TestGetCallbackMsg(t *testing.T) {
|
||||
for _, strPair := range [][]string{
|
||||
[]string{
|
||||
"newOrder",
|
||||
`
|
||||
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,
|
||||
`
|
||||
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
|
||||
`,
|
||||
},
|
||||
[]string{
|
||||
CallbackMsgApplyCancelOrder,
|
||||
`
|
||||
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
|
||||
`,
|
||||
},
|
||||
} {
|
||||
callbackStr := strings.TrimSpace(strPair[1])
|
||||
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)
|
||||
}
|
||||
sugarLogger.Debug(utils.Format4Output(callbackMsg, false))
|
||||
}
|
||||
}
|
||||
|
||||
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",
|
||||
StatusID: OrderStatusPurchased,
|
||||
Timestamp: utils.GetCurTimeStr(),
|
||||
}
|
||||
params := make(url.Values)
|
||||
params.Set("token", api.token)
|
||||
params.Set("app_key", api.appKey)
|
||||
params.Set("timestamp", utils.GetCurTimeStr())
|
||||
params.Set("v", "1.0")
|
||||
params.Set("format", "json")
|
||||
params.Set(paramJson, string(utils.MustMarshal(orderInfo)))
|
||||
|
||||
mapData := utils.URLValues2Map(params)
|
||||
params.Set(signKey, api.signParams(mapData))
|
||||
|
||||
response, err := http.PostForm("http://callback.test.jxc4.com/djsw/newOrder", params)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
bodyData, _ := ioutil.ReadAll(response.Body)
|
||||
sugarLogger.Debug(string(bodyData))
|
||||
}
|
||||
|
||||
/*
|
||||
DELETE t1
|
||||
FROM jdorder t1
|
||||
WHERE t1.jdorderid = 815438712001141;
|
||||
*/
|
||||
func TestCallbackMsgPlayback(t *testing.T) {
|
||||
baseURL := "http://callback.test.jxc4.com:8080/"
|
||||
playbackData := [][]string{
|
||||
[]string{
|
||||
"timestamp=2018-06-28+16%3A33%3A06&sign=B9FF8D5428F1DD1031DEF84AD08AB546&v=1.0&jd_param_json=%7B%22billId%22%3A%22815438712001141%22%2C%22statusId%22%3A%2232000%22%2C%22timestamp%22%3A%222018-06-28+16%3A33%3A03%22%7D&token=91633f2a-c5f5-4982-a925-a220d19095c3&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json",
|
||||
baseURL + "djsw/newOrder",
|
||||
},
|
||||
[]string{
|
||||
"timestamp=2018-06-28+16%3A40%3A19&sign=10C8ACAC71D954C0607046AC669079ED&v=1.0&jd_param_json=%7B%22billId%22%3A%22815438712001141%22%2C%22statusId%22%3A%222%22%2C%22timestamp%22%3A%222018-06-28+16%3A40%3A19%22%7D&token=91633f2a-c5f5-4982-a925-a220d19095c3&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json",
|
||||
baseURL + "djsw/pickFinishOrder",
|
||||
},
|
||||
[]string{
|
||||
"timestamp=2018-06-28%2B16%253A40%253A19&sign=E270E90A7F1712331AD210CCB477ED32&v=1.0&jd_param_json=%257B%2522createPin%2522%253A%2522JD_33d45ba55afeb1%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-28%2B16%253A40%253A19%2522%252C%2522inputTime%2522%253A%25222018-06-28%2B16%253A40%253A19%2522%252C%2522orderId%2522%253A%2522815438712001141%2522%257D&token=91633f2a-c5f5-4982-a925-a220d19095c3&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json",
|
||||
baseURL + "djsw/pushDeliveryStatus",
|
||||
},
|
||||
[]string{
|
||||
"sign=5d506d2ed7d0f353bd578df64a47c1a2b596278a×tamp=1530176122&delivery_id=423701&status=0&appkey=3c0a05d464c247c19d7ec13accc78605&order_id=815438712001141&mt_peisong_id=1530176122092538",
|
||||
baseURL + "mtps/status",
|
||||
},
|
||||
[]string{
|
||||
"sign=037e8ef50ce575c3fcc00b9507a46432c0a64768×tamp=1530176299&delivery_id=423701&status=20&appkey=3c0a05d464c247c19d7ec13accc78605&courier_phone=13281800720&courier_name=%E6%9D%8E%E5%B7%9D&order_id=815438712001141&mt_peisong_id=1530176122092538",
|
||||
baseURL + "mtps/status",
|
||||
},
|
||||
[]string{
|
||||
"timestamp=2018-06-28+16%3A58%3A20&sign=1DD702433D915DE19F4AC3DD39287E04&v=1.0&jd_param_json=%7B%22billId%22%3A%22815438712001141%22%2C%22statusId%22%3A%2233040%22%2C%22timestamp%22%3A%222018-06-28+16%3A58%3A20%22%7D&token=91633f2a-c5f5-4982-a925-a220d19095c3&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json",
|
||||
baseURL + "djsw/deliveryOrder",
|
||||
},
|
||||
[]string{
|
||||
"sign=73aae156870e530541d3da1c372411e9bc589470×tamp=1530176533&delivery_id=423701&status=30&appkey=3c0a05d464c247c19d7ec13accc78605&courier_phone=13281800720&courier_name=%E6%9D%8E%E5%B7%9D&order_id=815438712001141&mt_peisong_id=1530176122092538",
|
||||
baseURL + "mtps/status",
|
||||
},
|
||||
[]string{
|
||||
"sign=ffe6c9ac09d21505106631bb92fb983599dde69d×tamp=1530177544&delivery_id=423701&status=50&appkey=3c0a05d464c247c19d7ec13accc78605&courier_phone=13281800720&courier_name=%E6%9D%8E%E5%B7%9D&order_id=815438712001141&mt_peisong_id=1530176122092538",
|
||||
baseURL + "mtps/status",
|
||||
},
|
||||
[]string{
|
||||
"timestamp=2018-06-28+17%3A19%3A25&sign=06D8763C5B569485FD250F5C283E8B76&v=1.0&jd_param_json=%7B%22billId%22%3A%22815438712001141%22%2C%22statusId%22%3A%2233060%22%2C%22timestamp%22%3A%222018-06-28+17%3A19%3A04%22%7D&token=91633f2a-c5f5-4982-a925-a220d19095c3&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json",
|
||||
baseURL + "djsw/finishOrder",
|
||||
},
|
||||
}
|
||||
for _, v := range playbackData {
|
||||
_, err := utils.SendFakeRequest(http.MethodPost, v[1], v[0], "")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
package jdapi
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
@@ -51,125 +47,6 @@ func TestOrderQuery(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, _, msgURL, resp := GetCallbackMsg(utils.BuildRequest(http.MethodPost, "", callbackStr, ""), false)
|
||||
result, resp := api.GetOrderCallbackMsg(values, msgURL)
|
||||
|
||||
if resp != nil {
|
||||
t.Fatal(resp)
|
||||
}
|
||||
sugarLogger.Debug(result)
|
||||
}
|
||||
|
||||
func TestGetOrderDeliveryCallbackMsg(t *testing.T) {
|
||||
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)
|
||||
}
|
||||
sugarLogger.Debug(result)
|
||||
}
|
||||
|
||||
func TestGetOrderApplyCancelCallbackMsg(t *testing.T) {
|
||||
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)
|
||||
}
|
||||
sugarLogger.Debug(result)
|
||||
}
|
||||
|
||||
func TestSimulateSendNewOrderMsg(t *testing.T) {
|
||||
orderInfo := &CallbackOrderMsg{
|
||||
BillID: "813344594000041",
|
||||
StatusID: OrderStatusPurchased,
|
||||
Timestamp: utils.GetCurTimeStr(),
|
||||
}
|
||||
params := make(url.Values)
|
||||
params.Set("token", api.token)
|
||||
params.Set("app_key", api.appKey)
|
||||
params.Set("timestamp", utils.GetCurTimeStr())
|
||||
params.Set("v", "1.0")
|
||||
params.Set("format", "json")
|
||||
params.Set(paramJson, string(utils.MustMarshal(orderInfo)))
|
||||
|
||||
mapData := utils.URLValues2Map(params)
|
||||
params.Set(signKey, api.signParams(mapData))
|
||||
|
||||
response, err := http.PostForm("http://callback.test.jxc4.com/djsw/newOrder", params)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
bodyData, _ := ioutil.ReadAll(response.Body)
|
||||
sugarLogger.Debug(string(bodyData))
|
||||
}
|
||||
|
||||
/*
|
||||
DELETE t1
|
||||
FROM jdorder t1
|
||||
WHERE t1.jdorderid = 815438712001141;
|
||||
*/
|
||||
func TestCallbackMsgPlayback(t *testing.T) {
|
||||
baseURL := "http://callback.test.jxc4.com:8080/"
|
||||
playbackData := [][]string{
|
||||
[]string{
|
||||
"timestamp=2018-06-28+16%3A33%3A06&sign=B9FF8D5428F1DD1031DEF84AD08AB546&v=1.0&jd_param_json=%7B%22billId%22%3A%22815438712001141%22%2C%22statusId%22%3A%2232000%22%2C%22timestamp%22%3A%222018-06-28+16%3A33%3A03%22%7D&token=91633f2a-c5f5-4982-a925-a220d19095c3&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json",
|
||||
baseURL + "djsw/newOrder",
|
||||
},
|
||||
[]string{
|
||||
"timestamp=2018-06-28+16%3A40%3A19&sign=10C8ACAC71D954C0607046AC669079ED&v=1.0&jd_param_json=%7B%22billId%22%3A%22815438712001141%22%2C%22statusId%22%3A%222%22%2C%22timestamp%22%3A%222018-06-28+16%3A40%3A19%22%7D&token=91633f2a-c5f5-4982-a925-a220d19095c3&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json",
|
||||
baseURL + "djsw/pickFinishOrder",
|
||||
},
|
||||
[]string{
|
||||
"timestamp=2018-06-28%2B16%253A40%253A19&sign=E270E90A7F1712331AD210CCB477ED32&v=1.0&jd_param_json=%257B%2522createPin%2522%253A%2522JD_33d45ba55afeb1%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-28%2B16%253A40%253A19%2522%252C%2522inputTime%2522%253A%25222018-06-28%2B16%253A40%253A19%2522%252C%2522orderId%2522%253A%2522815438712001141%2522%257D&token=91633f2a-c5f5-4982-a925-a220d19095c3&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json",
|
||||
baseURL + "djsw/pushDeliveryStatus",
|
||||
},
|
||||
[]string{
|
||||
"sign=5d506d2ed7d0f353bd578df64a47c1a2b596278a×tamp=1530176122&delivery_id=423701&status=0&appkey=3c0a05d464c247c19d7ec13accc78605&order_id=815438712001141&mt_peisong_id=1530176122092538",
|
||||
baseURL + "mtps/status",
|
||||
},
|
||||
[]string{
|
||||
"sign=037e8ef50ce575c3fcc00b9507a46432c0a64768×tamp=1530176299&delivery_id=423701&status=20&appkey=3c0a05d464c247c19d7ec13accc78605&courier_phone=13281800720&courier_name=%E6%9D%8E%E5%B7%9D&order_id=815438712001141&mt_peisong_id=1530176122092538",
|
||||
baseURL + "mtps/status",
|
||||
},
|
||||
[]string{
|
||||
"timestamp=2018-06-28+16%3A58%3A20&sign=1DD702433D915DE19F4AC3DD39287E04&v=1.0&jd_param_json=%7B%22billId%22%3A%22815438712001141%22%2C%22statusId%22%3A%2233040%22%2C%22timestamp%22%3A%222018-06-28+16%3A58%3A20%22%7D&token=91633f2a-c5f5-4982-a925-a220d19095c3&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json",
|
||||
baseURL + "djsw/deliveryOrder",
|
||||
},
|
||||
[]string{
|
||||
"sign=73aae156870e530541d3da1c372411e9bc589470×tamp=1530176533&delivery_id=423701&status=30&appkey=3c0a05d464c247c19d7ec13accc78605&courier_phone=13281800720&courier_name=%E6%9D%8E%E5%B7%9D&order_id=815438712001141&mt_peisong_id=1530176122092538",
|
||||
baseURL + "mtps/status",
|
||||
},
|
||||
[]string{
|
||||
"sign=ffe6c9ac09d21505106631bb92fb983599dde69d×tamp=1530177544&delivery_id=423701&status=50&appkey=3c0a05d464c247c19d7ec13accc78605&courier_phone=13281800720&courier_name=%E6%9D%8E%E5%B7%9D&order_id=815438712001141&mt_peisong_id=1530176122092538",
|
||||
baseURL + "mtps/status",
|
||||
},
|
||||
[]string{
|
||||
"timestamp=2018-06-28+17%3A19%3A25&sign=06D8763C5B569485FD250F5C283E8B76&v=1.0&jd_param_json=%7B%22billId%22%3A%22815438712001141%22%2C%22statusId%22%3A%2233060%22%2C%22timestamp%22%3A%222018-06-28+17%3A19%3A04%22%7D&token=91633f2a-c5f5-4982-a925-a220d19095c3&app_key=1dba76d40cac446ca500c0391a0b6c9d&format=json",
|
||||
baseURL + "djsw/finishOrder",
|
||||
},
|
||||
}
|
||||
for _, v := range playbackData {
|
||||
_, err := utils.SendFakeRequest(http.MethodPost, v[1], v[0], "")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
func TestOrderAcceptOperate(t *testing.T) {
|
||||
err := api.OrderAcceptOperate("813344594000041", true, "")
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user