callback.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package externalcontact
  2. import (
  3. "encoding/xml"
  4. "github.com/silenceper/wechat/v2/util"
  5. )
  6. // 原始回调消息内容
  7. type callbackOriginMessage struct {
  8. ToUserName string // 企业微信的CorpID,当为第三方套件回调事件时,CorpID的内容为suiteid
  9. AgentID string // 接收的应用id,可在应用的设置页面获取
  10. Encrypt string // 消息结构体加密后的字符串
  11. }
  12. // EventCallbackMessage 微信客户联系回调消息
  13. // https://developer.work.weixin.qq.com/document/path/92130
  14. type EventCallbackMessage struct {
  15. ToUserName string `json:"to_user_name"`
  16. FromUserName string `json:"from_user_name"`
  17. CreateTime int64 `json:"create_time"`
  18. MsgType string `json:"msg_type"`
  19. Event string `json:"event"`
  20. ChangeType string `json:"change_type"`
  21. UserID string `json:"user_id"`
  22. ExternalUserID string `json:"external_user_id"`
  23. State string `json:"state"`
  24. WelcomeCode string `json:"welcome_code"`
  25. }
  26. // GetCallbackMessage 获取联系客户回调事件中的消息内容
  27. func (r *Client) GetCallbackMessage(encryptedMsg []byte) (msg EventCallbackMessage, err error) {
  28. var origin callbackOriginMessage
  29. if err = xml.Unmarshal(encryptedMsg, &origin); err != nil {
  30. return
  31. }
  32. _, bData, err := util.DecryptMsg(r.CorpID, origin.Encrypt, r.EncodingAESKey)
  33. if err != nil {
  34. return
  35. }
  36. if err = xml.Unmarshal(bData, &msg); err != nil {
  37. return
  38. }
  39. return
  40. }