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 }