79 lines
2.5 KiB
Go
79 lines
2.5 KiB
Go
package controllers
|
||
|
||
import (
|
||
"git.rosy.net.cn/jx-callback/business/enterprise"
|
||
"git.rosy.net.cn/jx-callback/globals/api"
|
||
"net/http"
|
||
|
||
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 {
|
||
web.Controller
|
||
}
|
||
|
||
// EnterpriseCallback 在发生授权、通讯录变更、ticket变化等事件时,企业微信服务器会向应用的“指令回调URL”推送相应的事件消息。
|
||
// 消息结构体将使用创建应用时的EncodingAESKey进行加密(特别注意, 在第三方回调事件中使用加解密算法,receiveid的内容为suiteid)
|
||
// ,请参考接收消息解析数据包。
|
||
func (e *EnterpriseController) EnterpriseCallback() {
|
||
r := e.Ctx.Request
|
||
switch e.Ctx.Request.Method {
|
||
case http.MethodPost:
|
||
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_ != nil {
|
||
e.Abort("404")
|
||
return
|
||
}
|
||
|
||
//var msgContent call.MsgContent
|
||
//err := json.Unmarshal(msg, &msgContent)
|
||
//if nil != err {
|
||
// globals.SugarLogger.Debug("Unmarshal fail", err)
|
||
//} else {
|
||
//}
|
||
//
|
||
//globals.SugarLogger.Debug(msgContent, err)
|
||
//ToUsername := msgContent.ToUsername
|
||
//msgContent.ToUsername = msgContent.FromUsername
|
||
//msgContent.FromUsername = ToUsername
|
||
//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.Ctx.ResponseWriter.Write([]byte("success"))
|
||
case http.MethodGet:
|
||
call.VerifyURL(e.Ctx.ResponseWriter, e.Ctx.Request)
|
||
default:
|
||
e.Abort("404")
|
||
}
|
||
}
|