From 03574f0f9d0ea32add180c9d812b8eae6cd6778a Mon Sep 17 00:00:00 2001 From: gazebo Date: Mon, 18 Jun 2018 11:47:20 +0800 Subject: [PATCH] - refactor platform apis. --- platform/common/common.go | 5 +++ platform/elmapi/callback.go | 28 +++++++++++- platform/jdapi/callback.go | 86 ++++++++++++++++++++++++++++++++++++ platform/jdapi/jdapi.go | 4 ++ platform/jdapi/order.go | 29 ------------ platform/mtpsapi/callback.go | 82 ++++++++++++++++++++++++++++++++++ platform/mtpsapi/mtpsapi.go | 28 +++++++----- 7 files changed, 220 insertions(+), 42 deletions(-) create mode 100644 platform/jdapi/callback.go create mode 100644 platform/mtpsapi/callback.go diff --git a/platform/common/common.go b/platform/common/common.go index 7d9126cc..d44856b7 100644 --- a/platform/common/common.go +++ b/platform/common/common.go @@ -32,6 +32,11 @@ var ( ErrBusinessCode = errors.New("Business code is not ok") ) +var ( + CBErrMsgUnescape = "can not unescape data:%v, data:%v" + CBErrMsgUnmarshal = "can not unmarshal data:%v, data:%v" +) + func AccessPlatformAPIWithRetry(params *AccessPlatformAPIWithRetryParams, handleResponse func(response *http.Response) (int, error)) error { exceedLimitRetryCount := 0 recoverableErrorRetryCount := 0 diff --git a/platform/elmapi/callback.go b/platform/elmapi/callback.go index adafc899..b83f121f 100644 --- a/platform/elmapi/callback.go +++ b/platform/elmapi/callback.go @@ -1,5 +1,12 @@ package elmapi +import ( + "encoding/json" + "fmt" + + "git.rosy.net.cn/baseapi/platform/common" +) + const ( OrderValid = 10 MerchantValid = 12 @@ -25,5 +32,24 @@ type ELMCallbackMsg struct { } var ( - ELMResponseOK = &ELMCallbackResponse{"ok"} + SuccessResponse = &ELMCallbackResponse{"ok"} ) + +func (e *ELMAPI) unmarshalData(data []byte, msg interface{}) (callbackResponse *ELMCallbackResponse) { + err := json.Unmarshal(data, msg) + if err != nil { + return &ELMCallbackResponse{ + Message: fmt.Sprintf(common.CBErrMsgUnmarshal, data, err), + } + } + return nil +} + +func (e *ELMAPI) GetMsgFromData(data []byte) (msg *ELMCallbackMsg, callbackResponse *ELMCallbackResponse) { + msg = new(ELMCallbackMsg) + callbackResponse = e.unmarshalData(data, msg) + if callbackResponse != nil { + return nil, callbackResponse + } + return msg, nil +} diff --git a/platform/jdapi/callback.go b/platform/jdapi/callback.go new file mode 100644 index 00000000..56e0c787 --- /dev/null +++ b/platform/jdapi/callback.go @@ -0,0 +1,86 @@ +package jdapi + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" + + "git.rosy.net.cn/baseapi/platform/common" +) + +type JDCallbackResponse struct { + Code string `json:"code"` + Msg string `json:"msg"` + Data string `json:"data"` +} + +type JDOrderMsg struct { + Id int `json:"-"` // 用于传递Jdorder的主键值,减少一次读库操作 + BillId string `json:"billId"` + StatusId string `json:"statusId"` + Timestamp string `json:"timestamp"` +} + +type JDDeliveryStatusMsg struct { + OrderId string + DeliveryStatusTime string + DeliveryManNo string + DeliveryManName string + DeliveryManPhone string + DeliveryCarrierNo string + DeliveryCarrierName string + DeliveryStatus int + Remark string + FailType string + CreatePin string + OpTime int64 + InputTime string +} + +var ( + SuccessResponse = &JDCallbackResponse{Code: "0", Msg: "success", Data: ""} +) + +func (j *JDAPI) unmarshalData(strData string, msg interface{}) (callbackResponse *JDCallbackResponse) { + err := json.Unmarshal([]byte(strData), msg) + if err != nil { + return &JDCallbackResponse{ + Code: JDerrorCodeAbnormalParam, + Msg: fmt.Sprintf(common.CBErrMsgUnmarshal, strData, err), + Data: strData, + } + } + return nil +} + +func (j *JDAPI) GetOrderMsg(request *http.Request) (msg *JDOrderMsg, callbackResponse *JDCallbackResponse) { + msg = new(JDOrderMsg) + jdParamJSON := request.FormValue(JD_PARAM_JSON) + callbackResponse = j.unmarshalData(jdParamJSON, msg) + if callbackResponse != nil { + return nil, callbackResponse + } + return msg, nil +} + +func (j *JDAPI) GetOrderDeliveryMsg(request *http.Request) (msg *JDDeliveryStatusMsg, callbackResponse *JDCallbackResponse) { + msg = new(JDDeliveryStatusMsg) + + jdParamJSON := request.FormValue(JD_PARAM_JSON) + jdParamJSON2, err := url.QueryUnescape(jdParamJSON) + if err != nil { + return nil, &JDCallbackResponse{ + Code: JDerrorCodeAbnormalParam, + Msg: fmt.Sprintf(common.CBErrMsgUnescape, jdParamJSON, err), + Data: jdParamJSON, + } + } + jdParamJSON = jdParamJSON2 + + callbackResponse = j.unmarshalData(jdParamJSON, msg) + if callbackResponse != nil { + return nil, callbackResponse + } + return msg, nil +} diff --git a/platform/jdapi/jdapi.go b/platform/jdapi/jdapi.go index af5387f4..d915df87 100644 --- a/platform/jdapi/jdapi.go +++ b/platform/jdapi/jdapi.go @@ -24,6 +24,10 @@ const ( maxRetryCountWhenReachLimited = 10 ) +const ( + JD_PARAM_JSON = "jd_param_json" +) + const ( // JDErrorCodeSuccess 操作成功 JDErrorCodeSuccess = "0" diff --git a/platform/jdapi/order.go b/platform/jdapi/order.go index ece20614..25435152 100644 --- a/platform/jdapi/order.go +++ b/platform/jdapi/order.go @@ -4,35 +4,6 @@ import ( "git.rosy.net.cn/baseapi/utils" ) -type JDOrderMsgResponse struct { - Code string `json:"code"` - Msg string `json:"msg"` - Data string `json:"data"` -} - -type JDOrderMsg struct { - Id int `json:"-"` // 用于传递Jdorder的主键值,减少一次读库操作 - BillId string `json:"billId"` - StatusId string `json:"statusId"` - Timestamp string `json:"timestamp"` -} - -type JDDeliveryStatusMsg struct { - OrderId string - DeliveryStatusTime string - DeliveryManNo string - DeliveryManName string - DeliveryManPhone string - DeliveryCarrierNo string - DeliveryCarrierName string - DeliveryStatus int - Remark string - FailType string - CreatePin string - OpTime int64 - InputTime string -} - const ( JdOrderStatusNew = "32000" JdOrderStatusAdjust = "33080" diff --git a/platform/mtpsapi/callback.go b/platform/mtpsapi/callback.go new file mode 100644 index 00000000..f57bba0b --- /dev/null +++ b/platform/mtpsapi/callback.go @@ -0,0 +1,82 @@ +package mtpsapi + +import ( + "net/http" + + "git.rosy.net.cn/baseapi/utils" +) + +type MtpsCallbackResponse struct { + Code string `json:"code"` +} + +type MtpsCallbackCommon struct { + AppKey string + Timestamp int64 + Sign string +} + +type MtpsCallbackOrderMsg struct { + MtpsOrderInfoCommon + MtpsCallbackCommon + Status int + CancelReasonId int + CancelReason string +} + +type MtpsCallbackOrderExceptionMsg struct { + MtpsOrderInfoCommon + MtpsCallbackCommon + ExceptionId int64 + ExceptionCode int + ExceptionDescr string + ExceptionTime int64 +} + +var ( + SuccessResponse = &MtpsCallbackResponse{Code: "0"} +) + +func (m *MTPSAPI) GetOrderCallbackMsg(request *http.Request) (orderMsg *MtpsCallbackOrderMsg, callbackResponse *MtpsCallbackResponse) { + orderMsg = &MtpsCallbackOrderMsg{ + MtpsOrderInfoCommon: MtpsOrderInfoCommon{ + DeliveryId: utils.Str2Int64(request.FormValue("delivery_id")), + MtPeisongId: request.FormValue("mt_peisong_id"), + OrderId: request.FormValue("order_id"), + CourierName: request.FormValue("courier_name"), + CourierPhone: request.FormValue("courier_phone"), + }, + MtpsCallbackCommon: MtpsCallbackCommon{ + AppKey: request.FormValue("appkey"), + Timestamp: utils.Str2Int64(request.FormValue("timestamp")), + Sign: request.FormValue("sign"), + }, + Status: int(utils.Str2Int64(request.FormValue("status"))), + CancelReasonId: int(utils.Str2Int64(request.FormValue("cancel_reason_id"))), + CancelReason: request.FormValue("cancel_reason"), + } + return orderMsg, nil +} + +func (m *MTPSAPI) GetOrderExceptionCallbackMsg(request *http.Request) (orderMsg *MtpsCallbackOrderExceptionMsg, callbackResponse *MtpsCallbackResponse) { + orderMsg = &MtpsCallbackOrderExceptionMsg{ + MtpsOrderInfoCommon: MtpsOrderInfoCommon{ + DeliveryId: utils.Str2Int64(request.FormValue("delivery_id")), + MtPeisongId: request.FormValue("mt_peisong_id"), + OrderId: request.FormValue("order_id"), + CourierName: request.FormValue("courier_name"), + CourierPhone: request.FormValue("courier_phone"), + }, + MtpsCallbackCommon: MtpsCallbackCommon{ + AppKey: request.FormValue("appkey"), + Timestamp: utils.Str2Int64(request.FormValue("timestamp")), + Sign: request.FormValue("sign"), + }, + ExceptionId: utils.Str2Int64(request.FormValue("exception_id")), + ExceptionCode: int(utils.Str2Int64(request.FormValue("exception_code"))), + ExceptionDescr: request.FormValue("exception_descr"), + ExceptionTime: utils.Str2Int64(request.FormValue("exception_time")), + } + + return orderMsg, nil +} diff --git a/platform/mtpsapi/mtpsapi.go b/platform/mtpsapi/mtpsapi.go index b8597ed1..de8e990d 100644 --- a/platform/mtpsapi/mtpsapi.go +++ b/platform/mtpsapi/mtpsapi.go @@ -32,6 +32,22 @@ const ( mtpsStatusMissingBusinessParams = 3 ) +type MtpsOrderInfoCommon struct { + DeliveryId int64 + MtPeisongId string + OrderId string + CourierName string + CourierPhone string +} + +type MtpsOrderInfo struct { + MtpsOrderInfoCommon + Status int + OperateTime int + CancelReasonId int + CancelReason string +} + type MTPSResult struct { Code int `json:"code"` Message string `json:"message"` @@ -45,18 +61,6 @@ type MTPSAPI struct { client *http.Client } -// type MTPSOderStatus struct { -// DeliveryId int64 `json:"delivery_id"` -// MtPeiSongId string `json:"mt_peisong_id"` -// OrderId string `json:"order_id"` -// Status int `json:"status"` -// OperateTime int `json:"operate_time"` -// CourierName string `json:"courier_name"` -// CourierPhone string `json:"courier_phone"` -// CancelReasonId int `json:"cancel_reason_id"` -// CancelReason string `json:"cancel_reason"` -// } - func NewMTPSAPI(appKey, secret string, sugarLogger *zap.SugaredLogger) *MTPSAPI { api := &MTPSAPI{ appKey: appKey,