- 京东回调改用http.Request

This commit is contained in:
gazebo
2019-05-08 16:58:04 +08:00
parent 3409f64107
commit 27c08160ad
2 changed files with 49 additions and 20 deletions

View File

@@ -2,13 +2,20 @@ package jdapi
import ( import (
"fmt" "fmt"
"io/ioutil"
"net/http"
"net/url" "net/url"
"strings"
"git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi"
"git.rosy.net.cn/baseapi/platformapi" "git.rosy.net.cn/baseapi/platformapi"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
) )
const (
CallbackPrefix = "/djsw/"
)
// 如下的常量其实都是京东回调消息的 // 如下的常量其实都是京东回调消息的
const ( const (
OrderStatusAddComment = "12001" OrderStatusAddComment = "12001"
@@ -78,7 +85,7 @@ type CallbackResponse struct {
} }
type CallbackOrderMsg struct { type CallbackOrderMsg struct {
ID int `json:"-"` // 用于传递Jdorder的主键值减少一次读库操作 MsgURL string `json:"msgURL"`
BillID string `json:"billId"` BillID string `json:"billId"`
OutBillID string `json:"outBillId"` OutBillID string `json:"outBillId"`
StatusID string `json:"statusId"` StatusID string `json:"statusId"`
@@ -87,6 +94,7 @@ type CallbackOrderMsg struct {
} }
type CallbackDeliveryStatusMsg struct { type CallbackDeliveryStatusMsg struct {
MsgURL string `json:"msgURL"`
OrderID string `json:"orderId"` OrderID string `json:"orderId"`
DeliveryStatusTime string `json:"deliveryStatusTime"` DeliveryStatusTime string `json:"deliveryStatusTime"`
DeliveryManNo string `json:"deliveryManNo"` DeliveryManNo string `json:"deliveryManNo"`
@@ -119,6 +127,7 @@ const (
) )
type CallbackStoreStockMsg struct { type CallbackStoreStockMsg struct {
MsgURL string `json:"msgURL"`
StationNo string `json:"stationNo"` StationNo string `json:"stationNo"`
SkuId int64 `json:"skuId"` SkuId int64 `json:"skuId"`
Have bool `json:"have"` Have bool `json:"have"`
@@ -166,7 +175,12 @@ func (a *API) CheckCallbackValidation(values url.Values) (callbackResponse *Call
return nil return nil
} }
func (a *API) getCommonOrderCallbackMsg(data []byte, msg interface{}, needDecode bool) (callbackResponse *CallbackResponse) { 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) result, err := utils.HTTPBody2Values(data, needDecode)
if err != nil { if err != nil {
return FormatErrorResponse return FormatErrorResponse
@@ -183,28 +197,34 @@ func (a *API) getCommonOrderCallbackMsg(data []byte, msg interface{}, needDecode
return nil return nil
} }
func (a *API) GetOrderCallbackMsg(data []byte) (msg *CallbackOrderMsg, callbackResponse *CallbackResponse) { func (a *API) GetOrderCallbackMsg(request *http.Request) (msg *CallbackOrderMsg, callbackResponse *CallbackResponse) {
msg = new(CallbackOrderMsg) msg = new(CallbackOrderMsg)
callbackResponse = a.getCommonOrderCallbackMsg(data, msg, false) if callbackResponse = a.getCommonOrderCallbackMsg(request, msg, false); callbackResponse == nil {
msg.MsgURL = getMsgURLFromRequest(request)
}
return msg, callbackResponse return msg, callbackResponse
} }
func (a *API) GetOrderApplyCancelCallbackMsg(data []byte) (msg *CallbackOrderMsg, callbackResponse *CallbackResponse) { func (a *API) GetOrderApplyCancelCallbackMsg(request *http.Request) (msg *CallbackOrderMsg, callbackResponse *CallbackResponse) {
msg = new(CallbackOrderMsg) msg = new(CallbackOrderMsg)
callbackResponse = a.getCommonOrderCallbackMsg(data, msg, true) if callbackResponse = a.getCommonOrderCallbackMsg(request, msg, true); callbackResponse == nil {
msg.MsgURL = getMsgURLFromRequest(request)
}
return msg, callbackResponse return msg, callbackResponse
} }
func (a *API) GetOrderDeliveryCallbackMsg(data []byte) (msg *CallbackDeliveryStatusMsg, callbackResponse *CallbackResponse) { func (a *API) GetOrderDeliveryCallbackMsg(request *http.Request) (msg *CallbackDeliveryStatusMsg, callbackResponse *CallbackResponse) {
msg = new(CallbackDeliveryStatusMsg) if callbackResponse = a.getCommonOrderCallbackMsg(request, &msg, true); callbackResponse == nil {
callbackResponse = a.getCommonOrderCallbackMsg(data, msg, true) msg.MsgURL = getMsgURLFromRequest(request)
}
return msg, callbackResponse return msg, callbackResponse
} }
func (a *API) GetStoreStockCallbackMsg(data []byte) (msg *CallbackStoreStockMsg, callbackResponse *CallbackResponse) { func (a *API) GetStoreStockCallbackMsg(request *http.Request) (msg *CallbackStoreStockMsg, callbackResponse *CallbackResponse) {
msg = new(CallbackStoreStockMsg) msg = new(CallbackStoreStockMsg)
msg.MsgURL = getMsgURLFromRequest(request)
var tmpMsg map[string]interface{} var tmpMsg map[string]interface{}
callbackResponse = a.getCommonOrderCallbackMsg(data, &tmpMsg, true) callbackResponse = a.getCommonOrderCallbackMsg(request, &tmpMsg, true)
if callbackResponse == nil { if callbackResponse == nil {
msg.StationNo = utils.Interface2String(tmpMsg["stationNo"]) msg.StationNo = utils.Interface2String(tmpMsg["stationNo"])
msg.SkuId = utils.Str2Int64(utils.Interface2String(tmpMsg["skuId"])) msg.SkuId = utils.Str2Int64(utils.Interface2String(tmpMsg["skuId"]))
@@ -212,12 +232,15 @@ func (a *API) GetStoreStockCallbackMsg(data []byte) (msg *CallbackStoreStockMsg,
msg.OperPin = utils.Interface2String(tmpMsg["operPin"]) msg.OperPin = utils.Interface2String(tmpMsg["operPin"])
msg.OperTime = utils.Str2Int64(utils.Interface2String(tmpMsg["operTime"])) msg.OperTime = utils.Str2Int64(utils.Interface2String(tmpMsg["operTime"]))
msg.OperSource = int(utils.Str2Int64((utils.Interface2String(tmpMsg["operSource"])))) msg.OperSource = int(utils.Str2Int64((utils.Interface2String(tmpMsg["operSource"]))))
have := utils.Interface2String(tmpMsg["have"]) msg.Have = utils.Interface2String(tmpMsg["have"]) == "true"
if have == "true" {
msg.Have = true
} else {
msg.Have = false
}
} }
return msg, callbackResponse return msg, callbackResponse
} }
func getMsgURLFromRequest(request *http.Request) (msgURL string) {
index := strings.Index(request.URL.Path, CallbackPrefix)
if index >= 0 {
msgURL = request.URL.Path[index+len(CallbackPrefix):]
}
return msgURL
}

View File

@@ -78,9 +78,15 @@ type AfsServiceResponse struct {
OrderType int `json:"orderType"` OrderType int `json:"orderType"`
PickwareAddress string `json:"pickwareAddress"` PickwareAddress string `json:"pickwareAddress"`
QuestionDesc string `json:"questionDesc"` QuestionDesc string `json:"questionDesc"`
QuestionPic string `json:"questionPic"` QuestionPic string `json:"questionPic"`
QuestionTypeCid int `json:"questionTypeCid"` QuestionTypeCid int `json:"questionTypeCid"`
ApplyDeal string `json:"applyDeal"`
DeliveryState string `json:"deliveryState"`
DeliveryMan string `json:"deliveryMan"`
DeliveryMobile string `json:"deliveryMobile"`
StationID string `json:"stationId"` StationID string `json:"stationId"`
StationName string `json:"stationName"` StationName string `json:"stationName"`
StationNumOutSystem string `json:"stationNumOutSystem"` StationNumOutSystem string `json:"stationNumOutSystem"`