diff --git a/business/partner/purchase/jd/order.go b/business/partner/purchase/jd/order.go index 0c825d951..5b1557391 100644 --- a/business/partner/purchase/jd/order.go +++ b/business/partner/purchase/jd/order.go @@ -450,6 +450,12 @@ func (c *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bo if !isSelfDelivery && globals.EnableJdStoreWrite { _, err = getAPI(order.VendorOrgCode).OrderJDZBDelivery(order.VendorOrderID, userName) } else { + switch order.DeliveryType { + case model.OrderDeliveryTypeStoreSelf: // 商家配送 + _, err = getAPI(order.VendorOrgCode).OrderJDZBStoreDelivery(order.VendorOrderID, userName) + case model.OrderDeliveryTypeSelfTake: // 用户自提 + _, err = getAPI(order.VendorOrgCode).OrderJDZBSelfDelivery(order.VendorOrderID, userName) + } c.postFakeMsg(order.VendorOrgCode, order.VendorOrderID, jdapi.OrderStatusFinishedPickup) } if err == nil { diff --git a/controllers/enterprise_callback.go b/controllers/enterprise_callback.go index 369f7e28c..83c763b55 100644 --- a/controllers/enterprise_callback.go +++ b/controllers/enterprise_callback.go @@ -8,6 +8,8 @@ import ( call "git.rosy.net.cn/baseapi/utils/weworkapi_golang-master" "git.rosy.net.cn/jx-callback/globals" "github.com/astaxie/beego/server/web" + "io/ioutil" + "strings" ) type EnterpriseController struct { @@ -18,20 +20,58 @@ type EnterpriseController struct { // 消息结构体将使用创建应用时的EncodingAESKey进行加密(特别注意, 在第三方回调事件中使用加解密算法,receiveid的内容为suiteid) // ,请参考接收消息解析数据包。 func (e *EnterpriseController) EnterpriseCallback() { + r := e.Ctx.Request switch e.Ctx.Request.Method { case http.MethodPost: - globals.SugarLogger.Debug("=====") - suite, err := api.EnterpriseChatHeadApi.GetEnterpriseMsg(e.Ctx.Request) - if err != nil { - globals.SugarLogger.Debug("EnterpriseCallback=======1", err) + httpstr := r.URL.RawQuery + start := strings.Index(httpstr, "msg_signature=") + start += len("msg_signature=") + var msg_signature string + next := call.GetString(httpstr, "×tamp=", start, &msg_signature) + var timestamp string + next = call.GetString(httpstr, "&nonce=", next, ×tamp) + nonce := httpstr[next:len(httpstr)] + body, _ := ioutil.ReadAll(r.Body) + + wxcpt := call.NewWXBizMsgCrypt(call.Token, call.EncodingAeskey, call.ReceiverId, call.JsonType) + msg, err_ := wxcpt.DecryptMsg(msg_signature, timestamp, nonce, body) + if err_.ErrCode != 0 { e.Abort("404") - } else { - if err := enterprise.UpdateEnterpriseSuite(suite); err != nil { - globals.SugarLogger.Debug("EnterpriseCallback=======2", err) + return + } + + //var msgContent call.MsgContent + //err := json.Unmarshal(msg, &msgContent) + //if nil != err { + // globals.SugarLogger.Debug("Unmarshal fail", err) + //} else { + // globals.SugarLogger.Debug("struct=======", msgContent) + //} + // + //globals.SugarLogger.Debug(msgContent, err) + //ToUsername := msgContent.ToUsername + //msgContent.ToUsername = msgContent.FromUsername + //msgContent.FromUsername = ToUsername + //globals.SugarLogger.Debug("replaymsg=====", msgContent) + //replayJson, err := json.Marshal(&msgContent) + // + //encryptMsg, cryptErr := wxcpt.EncryptMsg(string(replayJson), timestamp, nonce) + //if nil != cryptErr { + // globals.SugarLogger.Debug("DecryptMsg fail", cryptErr) + //} + // + if strings.Contains(string(msg), "SuiteTicket") { + data, err := api.EnterpriseChatHeadApi.GetEnterpriseMsg(msg) + if err != nil { + globals.SugarLogger.Debug("Unmarshal SuiteTicket err : ", err) + } else { + if err := enterprise.UpdateEnterpriseSuite(data); err != nil { + globals.SugarLogger.Debug("UpdateEnterpriseSuite err :", err) + } } } - e.Data["xml"] = "success" - e.ServeXML() + + e.Ctx.ResponseWriter.Write([]byte("success")) case http.MethodGet: call.VerifyURL(e.Ctx.ResponseWriter, e.Ctx.Request) default: