| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package bridge
- import (
- "dashoo.cn/opms_libary/plugin/dingtalk/context"
- "dashoo.cn/opms_libary/plugin/dingtalk/crypto"
- "dashoo.cn/opms_libary/plugin/dingtalk/message"
- "fmt"
- "github.com/gogf/gf/encoding/gjson"
- "github.com/gogf/gf/frame/g"
- "github.com/smallnest/rpcx/share"
- )
- //DingTalkHandler struct
- type DingTalkHandler struct {
- *context.Context
- handleMessageFunc func(*message.MixMessage) string
- }
- //NewDingTalkHandler init
- func NewDingTalkHandler(context *context.Context) *DingTalkHandler {
- srv := new(DingTalkHandler)
- fmt.Println("NewMsgHandler:", srv)
- srv.Context = context
- return srv
- }
- //Handle 处理微信的请求消息
- func (h *DingTalkHandler) Handle() (reply message.Reply, err error) {
- ctx := h.SubsMessage.Ctx
- meta := ctx.Value(share.ReqMetaDataKey).(map[string]string)
- encrypt := h.Context.SubsMessage.Encrypt
- var ding = crypto.NewDingTalkCrypto(h.Token, h.AESKey, h.AppKey)
- decMsg, err := ding.GetDecryptMsg(meta["msg_signature"], meta["timestamp"], meta["nonce"], encrypt)
- if err != nil {
- g.Log().Error(err)
- return reply, err
- }
- data := new(message.MixMessage)
- if j, err := gjson.DecodeToJson(decMsg); err != nil {
- g.Log().Error(err)
- return reply, err
- } else {
- if err := j.Scan(data); err != nil {
- g.Log().Error(err)
- return reply, err
- }
- }
- msgData := h.handleMessageFunc(data)
- enMsg, _ := ding.GetEncryptMsg(msgData)
- reply.MsgSignature = enMsg["msg_signature"]
- reply.TimeStamp = enMsg["timeStamp"]
- reply.Nonce = enMsg["nonce"]
- reply.Encrypt = enMsg["encrypt"]
- return reply, nil
- }
- //SetHandleMessageFunc 设置用户自定义的回调方法
- func (h *DingTalkHandler) SetHandleMessageFunc(handler func(*message.MixMessage) string) {
- h.handleMessageFunc = handler
- }
|