msg_handler.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package bridge
  2. import (
  3. "dashoo.cn/opms_libary/plugin/dingtalk/context"
  4. "dashoo.cn/opms_libary/plugin/dingtalk/crypto"
  5. "dashoo.cn/opms_libary/plugin/dingtalk/message"
  6. "fmt"
  7. "github.com/gogf/gf/encoding/gjson"
  8. "github.com/gogf/gf/frame/g"
  9. "github.com/smallnest/rpcx/share"
  10. )
  11. //DingTalkHandler struct
  12. type DingTalkHandler struct {
  13. *context.Context
  14. handleMessageFunc func(*message.MixMessage) string
  15. }
  16. //NewDingTalkHandler init
  17. func NewDingTalkHandler(context *context.Context) *DingTalkHandler {
  18. srv := new(DingTalkHandler)
  19. fmt.Println("NewMsgHandler:", srv)
  20. srv.Context = context
  21. return srv
  22. }
  23. //Handle 处理微信的请求消息
  24. func (h *DingTalkHandler) Handle() (reply message.Reply, err error) {
  25. ctx := h.SubsMessage.Ctx
  26. meta := ctx.Value(share.ReqMetaDataKey).(map[string]string)
  27. encrypt := h.Context.SubsMessage.Encrypt
  28. var ding = crypto.NewDingTalkCrypto(h.Token, h.AESKey, h.AppKey)
  29. decMsg, err := ding.GetDecryptMsg(meta["msg_signature"], meta["timestamp"], meta["nonce"], encrypt)
  30. if err != nil {
  31. g.Log().Error(err)
  32. return reply, err
  33. }
  34. data := new(message.MixMessage)
  35. if j, err := gjson.DecodeToJson(decMsg); err != nil {
  36. g.Log().Error(err)
  37. return reply, err
  38. } else {
  39. if err := j.Scan(data); err != nil {
  40. g.Log().Error(err)
  41. return reply, err
  42. }
  43. }
  44. msgData := h.handleMessageFunc(data)
  45. enMsg, _ := ding.GetEncryptMsg(msgData)
  46. reply.MsgSignature = enMsg["msg_signature"]
  47. reply.TimeStamp = enMsg["timeStamp"]
  48. reply.Nonce = enMsg["nonce"]
  49. reply.Encrypt = enMsg["encrypt"]
  50. return reply, nil
  51. }
  52. //SetHandleMessageFunc 设置用户自定义的回调方法
  53. func (h *DingTalkHandler) SetHandleMessageFunc(handler func(*message.MixMessage) string) {
  54. h.handleMessageFunc = handler
  55. }