From 84dac23be8180196be2de1ae23a5289771c4859b Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 3 Dec 2019 15:07:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=AC=E4=B8=9C=E5=9B=9E=E8=B0=83=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E6=A0=B9=E6=8D=AEtoken=E5=8A=A8=E6=80=81=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E4=B8=8D=E5=90=8C=E7=9A=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/partner_api.go | 1 + business/partner/purchase/jd/jd.go | 16 ++++++ controllers/jd_callback.go | 78 +++++++++++++++++----------- globals/api/apimanager/apimanager.go | 12 +++++ 4 files changed, 78 insertions(+), 29 deletions(-) diff --git a/business/partner/partner_api.go b/business/partner/partner_api.go index 386527933..3e1b15a17 100644 --- a/business/partner/partner_api.go +++ b/business/partner/partner_api.go @@ -2,6 +2,7 @@ package partner type IAPIManager interface { GetAPI(vendorID int, appOrgCode string) interface{} + GetAPIList(vendorID int) []interface{} GetAppOrgCodeList(vendorID int) (appOrgCodeList []string) } diff --git a/business/partner/purchase/jd/jd.go b/business/partner/purchase/jd/jd.go index f80525291..66b30d0f8 100644 --- a/business/partner/purchase/jd/jd.go +++ b/business/partner/purchase/jd/jd.go @@ -26,6 +26,22 @@ func getAPI(appOrgCode string) (apiObj *jdapi.API) { return partner.CurAPIManager.GetAPI(model.VendorIDJD, appOrgCode).(*jdapi.API) } +func GetAPIByToken(token string) (apiObj *jdapi.API) { + if token == "" { + apiObj = getAPI("") + } else { + apiList := partner.CurAPIManager.GetAPIList(model.VendorIDJD) + for _, v := range apiList { + jdAPI := v.(*jdapi.API) + if jdAPI.GetToken() == token { + apiObj = jdAPI + break + } + } + } + return apiObj +} + func (c *PurchaseHandler) GetVendorID() int { return model.VendorIDJD } diff --git a/controllers/jd_callback.go b/controllers/jd_callback.go index 3aa5f753b..60c39a6c4 100644 --- a/controllers/jd_callback.go +++ b/controllers/jd_callback.go @@ -2,14 +2,15 @@ package controllers import ( "bytes" + "fmt" "io/ioutil" "net/http" + "net/url" "git.rosy.net.cn/baseapi/platformapi/jdapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/partner/purchase/jd" "git.rosy.net.cn/jx-callback/globals" - "git.rosy.net.cn/jx-callback/globals/api" "github.com/astaxie/beego" "github.com/astaxie/beego/context" ) @@ -19,20 +20,27 @@ type DjswController struct { beego.Controller } +func (c *DjswController) handleMsg(isNeedDecode bool, handler func(*jdapi.API, url.Values, string) *jdapi.CallbackResponse) (callbackResponse *jdapi.CallbackResponse) { + values, token, msgURL, callbackResponse := jdapi.GetCallbackMsg(getUsefulRequest(c.Ctx), isNeedDecode) + if callbackResponse == nil { + if jdAPI := jd.GetAPIByToken(token); jdAPI != nil { + callbackResponse = handler(jdAPI, values, msgURL) + } else { + callbackResponse = jdapi.Err2CallbackResponse(fmt.Errorf("没有匹配的token,非法请求"), "") + } + } + return callbackResponse +} + func (c *DjswController) orderStatus(isCancelOrder bool) { if c.Ctx.Input.Method() == http.MethodPost { - var obj *jdapi.CallbackOrderMsg - var callbackResponse *jdapi.CallbackResponse - - if isCancelOrder { - obj, callbackResponse = api.JdAPI.GetOrderApplyCancelCallbackMsg(getUsefulRequest(c.Ctx)) - } else { - obj, callbackResponse = api.JdAPI.GetOrderCallbackMsg(getUsefulRequest(c.Ctx)) - } - globals.SugarLogger.Debug(utils.Format4Output(obj, true)) - if callbackResponse == nil { - callbackResponse = jd.OnOrderMsg(obj) - } + callbackResponse := c.handleMsg(isCancelOrder, func(a *jdapi.API, values url.Values, msgURL string) (callbackResponse *jdapi.CallbackResponse) { + obj, callbackResponse := a.GetOrderCallbackMsg(values, msgURL) + if callbackResponse == nil { + callbackResponse = jd.OnOrderMsg(obj) + } + return callbackResponse + }) c.Data["json"] = c.transferResponse("orderStatus", callbackResponse) c.ServeJSON() } else { @@ -82,10 +90,13 @@ func (c *DjswController) ApplyCancelOrder() { func (c *DjswController) PushDeliveryStatus() { if c.Ctx.Input.Method() == http.MethodPost { - obj, callbackResponse := api.JdAPI.GetOrderDeliveryCallbackMsg(getUsefulRequest(c.Ctx)) - if callbackResponse == nil { - callbackResponse = jd.OnWaybillMsg(obj) - } + callbackResponse := c.handleMsg(true, func(a *jdapi.API, values url.Values, msgURL string) (callbackResponse *jdapi.CallbackResponse) { + obj, callbackResponse := a.GetOrderDeliveryCallbackMsg(values, msgURL) + if callbackResponse == nil { + callbackResponse = jd.OnWaybillMsg(obj) + } + return callbackResponse + }) c.Data["json"] = c.transferResponse("PushDeliveryStatus", callbackResponse) c.ServeJSON() } else { @@ -109,10 +120,13 @@ func (c *DjswController) Token() { func (c *DjswController) StockIsHave() { // globals.SugarLogger.Info(string(c.Ctx.Input.RequestBody)) if c.Ctx.Input.Method() == http.MethodPost { - _, callbackResponse := api.JdAPI.GetStoreStockCallbackMsg(getUsefulRequest(c.Ctx)) - if callbackResponse == nil { - // globals.SugarLogger.Debugf("StockIsHave, obj:%s", utils.Format4Output(obj, false)) - } + callbackResponse := c.handleMsg(true, func(a *jdapi.API, values url.Values, msgURL string) (callbackResponse *jdapi.CallbackResponse) { + _, callbackResponse = a.GetStoreStockCallbackMsg(values, msgURL) + if callbackResponse == nil { + // globals.SugarLogger.Debugf("StockIsHave, obj:%s", utils.Format4Output(obj, false)) + } + return callbackResponse + }) c.Data["json"] = c.transferResponse("StockIsHave", callbackResponse) c.ServeJSON() } else { @@ -122,10 +136,13 @@ func (c *DjswController) StockIsHave() { func (c *DjswController) SinglePromoteCreate() { if c.Ctx.Input.Method() == http.MethodPost { - obj, callbackResponse := api.JdAPI.GetOrderCallbackMsg(getUsefulRequest(c.Ctx)) - if callbackResponse == nil { - callbackResponse = jd.OnActMsg(obj) - } + callbackResponse := c.handleMsg(false, func(a *jdapi.API, values url.Values, msgURL string) (callbackResponse *jdapi.CallbackResponse) { + obj, callbackResponse := a.GetOrderCallbackMsg(values, msgURL) + if callbackResponse == nil { + callbackResponse = jd.OnActMsg(obj) + } + return callbackResponse + }) c.Data["json"] = c.transferResponse("SinglePromoteCreate", callbackResponse) c.ServeJSON() } else { @@ -135,10 +152,13 @@ func (c *DjswController) SinglePromoteCreate() { func (c *DjswController) StoreCrud() { if c.Ctx.Input.Method() == http.MethodPost { - obj, callbackResponse := api.JdAPI.GetOrderCallbackMsg(getUsefulRequest(c.Ctx)) - if callbackResponse == nil { - callbackResponse = jd.OnStoreMsg(obj) - } + callbackResponse := c.handleMsg(false, func(a *jdapi.API, values url.Values, msgURL string) (callbackResponse *jdapi.CallbackResponse) { + obj, callbackResponse := a.GetOrderCallbackMsg(values, msgURL) + if callbackResponse == nil { + callbackResponse = jd.OnStoreMsg(obj) + } + return callbackResponse + }) c.Data["json"] = c.transferResponse("StoreCrud", callbackResponse) c.ServeJSON() } else { diff --git a/globals/api/apimanager/apimanager.go b/globals/api/apimanager/apimanager.go index 6e62c34b6..88d2c7ca6 100644 --- a/globals/api/apimanager/apimanager.go +++ b/globals/api/apimanager/apimanager.go @@ -38,6 +38,18 @@ func (a *APIManager) GetAPI(vendorID int, appOrgCode string) (pfAPI interface{}) return pfAPI } +func (a *APIManager) GetAPIList(vendorID int) (pfAPIList []interface{}) { + switch vendorID { + case model.VendorIDJD: + pfAPIList = []interface{}{api.JdAPI} + case model.VendorIDMTWM: + pfAPIList = []interface{}{api.MtwmAPI} + case model.VendorIDEBAI: + pfAPIList = []interface{}{api.EbaiAPI} + } + return pfAPIList +} + func (a *APIManager) GetAppOrgCodeList(vendorID int) (appOrgCodeList []string) { switch vendorID { case model.VendorIDJD: