From 55c810e9291b1ee09a8df46ebabf9272ed0ea603 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Thu, 23 Jun 2022 10:35:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BC=81=E4=B8=9A=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enterprise_wechat/enterprise_callback.go | 43 +++++++++++-------- platformapi/jdapi/order.go | 28 ++++++++++++ utils/weworkapi_golang-master/httpserver.go | 24 +++++------ .../wxbizjsonmsgcrypt.go | 9 ++-- 4 files changed, 70 insertions(+), 34 deletions(-) diff --git a/platformapi/enterprise_wechat/enterprise_callback.go b/platformapi/enterprise_wechat/enterprise_callback.go index b8d653bb..58c772cd 100644 --- a/platformapi/enterprise_wechat/enterprise_callback.go +++ b/platformapi/enterprise_wechat/enterprise_callback.go @@ -2,12 +2,9 @@ package enterprise_wechat import ( "encoding/xml" - "git.rosy.net.cn/jx-callback/globals" - "io/ioutil" - "net/http" ) -// 回调参数 +// 回调参数(推送SuiteTicket) type SuiteTicketInfo struct { SuiteId string `xml:"SuiteId"` // 第三方应用的SuiteId InfoType string `xml:"InfoType"` // suite_ticket @@ -15,18 +12,28 @@ type SuiteTicketInfo struct { SuiteTicket string `xml:"SuiteTicket"` // Ticket内容,最长为512字节 } -func (a *API) GetEnterpriseMsg(request *http.Request) (*SuiteTicketInfo, error) { - data, err := ioutil.ReadAll(request.Body) - if err != nil { - return nil, err - } - globals.SugarLogger.Debug("data============enterprise", data) - globals.SugarLogger.Debug("data============enterprise", string(data)) - - suite := &SuiteTicketInfo{} - if err := xml.Unmarshal(data, suite); err != nil { - return nil, err - } - - return suite, err +// 回调参数(解密推送消息Encrypt =》 SuiteTicketInfo 转化为上面的推送信息) +type SuiteEncrypt struct { + ToUserName string `xml:"ToUserName"` // 企业微信的CorpID,当为第三方套件回调事件时,CorpID的内容为suiteid + AgentID string `xml:"AgentID"` // 接收的应用id,可在应用的设置页面获取 + Encrypt string `xml:"Encrypt"` // 消息结构体加密后的字符串 +} + +// 解密加密推送信息 +func (a *API) GetEnterpriseSend(request []byte) (*SuiteEncrypt, error) { + encrypt := &SuiteEncrypt{} + if err := xml.Unmarshal(request, encrypt); err != nil { + return nil, err + } + + return encrypt, nil +} + +func (a *API) GetEnterpriseMsg(param []byte) (*SuiteTicketInfo, error) { + suite := &SuiteTicketInfo{} + if err := xml.Unmarshal(param, suite); err != nil { + return nil, err + } + + return suite, nil } diff --git a/platformapi/jdapi/order.go b/platformapi/jdapi/order.go index a1b55a82..c167885a 100644 --- a/platformapi/jdapi/order.go +++ b/platformapi/jdapi/order.go @@ -469,6 +469,34 @@ func (a *API) OrderJDZBDelivery(orderId string, userName string) (detail string, return "", err } +// 订单拣货完成且商家自送 +// https://openapi.jddj.com/djapi/bm/open/api/order/OrderSerllerDelivery +func (a *API) OrderJDZBStoreDelivery(orderId string, userName string) (detail string, err error) { + jdParams := map[string]interface{}{ + "orderId": orderId, + "operator": utils.GetAPIOperator(userName), + } + result, err := a.AccessAPINoPage("bm/open/api/order/OrderSerllerDelivery", jdParams, nil, nil, orderOperationResultParser) + if err == nil { + return utils.Interface2String(result), nil + } + return "", err +} + +// 订单拣货完成且顾客自提 +// https://openapi.jddj.com/djapi/bm/open/api/order/OrderSelfMention +func (a *API) OrderJDZBSelfDelivery(orderId string, userName string) (detail string, err error) { + jdParams := map[string]interface{}{ + "orderId": orderId, + "operator": utils.GetAPIOperator(userName), + } + result, err := a.AccessAPINoPage("bm/open/api/order/OrderSelfMention", jdParams, nil, nil, orderOperationResultParser) + if err == nil { + return utils.Interface2String(result), nil + } + return "", err +} + // 订单达达配送转商家自送接口 // https://opendj.jd.com/staticnew/widgets/resources.html?groupid=169&apiid=e7b4950164754eecac7ea87278c2b071 func (a *API) ModifySellerDelivery(orderId string, userName string) (detail string, err error) { diff --git a/utils/weworkapi_golang-master/httpserver.go b/utils/weworkapi_golang-master/httpserver.go index 75d5efce..41e21d95 100644 --- a/utils/weworkapi_golang-master/httpserver.go +++ b/utils/weworkapi_golang-master/httpserver.go @@ -10,11 +10,11 @@ import ( "strings" ) -const token = "nn3P9sfkGK5UlHgtNoAqB" -const receiverId = "ww9a156bfa070e1857" -const encodingAeskey = "471RkJkfISWJQUC2f8DSdOgXH0reVCxWCpfaTawSIWA" +const Token = "nn3P9sfkGK5UlHgtNoAqB" +const ReceiverId = "ww9a156bfa070e1857" +const EncodingAeskey = "471RkJkfISWJQUC2f8DSdOgXH0reVCxWCpfaTawSIWA" -func getString(str, endstr string, start int, msg *string) int { +func GetString(str, endstr string, start int, msg *string) int { end := strings.Index(str, endstr) *msg = str[start:end] return end + len(endstr) @@ -28,20 +28,20 @@ func VerifyURL(w http.ResponseWriter, r *http.Request) { start += len("msg_signature=") var msg_signature string - next := getString(httpstr, "×tamp=", start, &msg_signature) + next := GetString(httpstr, "×tamp=", start, &msg_signature) var timestamp string - next = getString(httpstr, "&nonce=", next, ×tamp) + next = GetString(httpstr, "&nonce=", next, ×tamp) var nonce string - next = getString(httpstr, "&echostr=", next, &nonce) + next = GetString(httpstr, "&echostr=", next, &nonce) echostr := httpstr[next:len(httpstr)] echostr, _ = url.QueryUnescape(echostr) fmt.Println(msg_signature, timestamp, nonce, echostr, next) - wxcpt := NewWXBizMsgCrypt(token, encodingAeskey, receiverId, JsonType) + wxcpt := NewWXBizMsgCrypt(Token, EncodingAeskey, ReceiverId, JsonType) echoStr, cryptErr := wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr) if nil != cryptErr { fmt.Println("verifyUrl fail", cryptErr) @@ -57,19 +57,19 @@ func MsgHandler(w http.ResponseWriter, r *http.Request) { start += len("msg_signature=") var msg_signature string - next := getString(httpstr, "×tamp=", start, &msg_signature) + next := GetString(httpstr, "×tamp=", start, &msg_signature) var timestamp string - next = getString(httpstr, "&nonce=", next, ×tamp) + next = GetString(httpstr, "&nonce=", next, ×tamp) nonce := httpstr[next:len(httpstr)] fmt.Println(msg_signature, timestamp, nonce) body, err := ioutil.ReadAll(r.Body) fmt.Println(string(body), err) - wxcpt := NewWXBizMsgCrypt(token, encodingAeskey, receiverId, JsonType) - + wxcpt := NewWXBizMsgCrypt(Token, EncodingAeskey, ReceiverId, JsonType) msg, err_ := wxcpt.DecryptMsg(msg_signature, timestamp, nonce, body) + fmt.Println(string(msg), err_) var msgContent MsgContent err = json.Unmarshal(msg, &msgContent) diff --git a/utils/weworkapi_golang-master/wxbizjsonmsgcrypt.go b/utils/weworkapi_golang-master/wxbizjsonmsgcrypt.go index 6e729228..5e931e86 100644 --- a/utils/weworkapi_golang-master/wxbizjsonmsgcrypt.go +++ b/utils/weworkapi_golang-master/wxbizjsonmsgcrypt.go @@ -8,6 +8,7 @@ import ( "encoding/base64" "encoding/binary" "encoding/json" + "encoding/xml" "fmt" "math/rand" "sort" @@ -47,9 +48,9 @@ func NewCryptError(err_code int, err_msg string) *CryptError { } type WXBizJsonMsg4Recv struct { - Tousername string `json:"tousername"` - Encrypt string `json:"encrypt"` - Agentid string `json:"agentid"` + Tousername string `xml:"ToUserName"` + Encrypt string `xml:"Encrypt"` + Agentid string `xml:"AgentID"` } type WXBizJsonMsg4Send struct { @@ -80,7 +81,7 @@ type JsonProcessor struct { func (self *JsonProcessor) parse(src_data []byte) (*WXBizJsonMsg4Recv, *CryptError) { var msg4_recv WXBizJsonMsg4Recv - err := json.Unmarshal(src_data, &msg4_recv) + err := xml.Unmarshal(src_data, &msg4_recv) if nil != err { fmt.Println("Unmarshal fail", err) return nil, NewCryptError(ParseJsonError, "json to msg fail")