123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- package controllers
- import (
- "encoding/xml"
- "fmt"
- "hongze/hongze_open_api/services"
- "hongze/hongze_open_api/services/wework"
- "hongze/hongze_open_api/services/wework/wxbizmsgcrypt"
- "hongze/hongze_open_api/utils"
- "strings"
- )
- type WeworkController struct {
- BaseCommon
- }
- func (this *WeworkController) Notify() {
- method := this.Ctx.Input.Method()
- token := wework.NotifyToken
- receiverId := wework.WeWorkCorpID
- encodingAeskey := wework.NotifyEncodingAESKey
- wxcpt := wxbizmsgcrypt.NewWXBizMsgCrypt(token, encodingAeskey, receiverId, wxbizmsgcrypt.XmlType)
- if method == "GET" {
-
- verifyMsgSign := this.GetString("msg_signature")
-
- verifyTimestamp := this.GetString("timestamp")
-
- verifyNonce := this.GetString("nonce")
-
- verifyEchoStr := this.GetString("echostr")
- verifyEchoStr = strings.Replace(verifyEchoStr, " ", "+", -1)
-
- echoStr, cryptErr := wxcpt.VerifyURL(verifyMsgSign, verifyTimestamp, verifyNonce, verifyEchoStr)
- if nil != cryptErr {
- utils.ApiLog.Println("verifyUrl fail", cryptErr)
- this.Ctx.WriteString(fmt.Sprintf("verifyUrl fail %s", cryptErr))
- return
- }
- utils.ApiLog.Println("verifyUrl success echoStr", string(echoStr))
-
- this.Ctx.WriteString(string(echoStr))
- return
- }else {
- reqData := this.Ctx.Input.RequestBody
- utils.ApiLog.Println("wework notify postBody:" + string(reqData))
-
- reqMsgSign := this.GetString("msg_signature")
-
- reqTimestamp := this.GetString("timestamp")
-
- reqNonce := this.GetString("nonce")
-
-
-
-
- msg, cryptErr := wxcpt.DecryptMsg(reqMsgSign, reqTimestamp, reqNonce, reqData)
- if nil != cryptErr {
- utils.ApiLog.Println("DecryptMsg fail", cryptErr)
- this.Ctx.WriteString(fmt.Sprintf("DecryptMsg fail %s", cryptErr))
- return
- }
- fmt.Println("after decrypt msg: ", string(msg))
-
- var msgContent wxbizmsgcrypt.MsgContent
- err := xml.Unmarshal(msg, &msgContent)
- if err != nil {
- utils.ApiLog.Println("Unmarshal fail")
- return
- } else {
- utils.ApiLog.Println("struct", msgContent)
- if msgContent.MsgType == "event" {
- switch msgContent.Event {
- case "msgaudit_notify": _ = services.DayNewWeworkMsgRefresh()
- }
- }
- }
-
- this.Ctx.WriteString(string(msg))
- return
- }
-
-
- }
|