diff --git a/work/externalcontact/callback.go b/work/externalcontact/callback.go new file mode 100644 index 0000000..f570340 --- /dev/null +++ b/work/externalcontact/callback.go @@ -0,0 +1,45 @@ +package externalcontact + +import ( + "encoding/xml" + + "github.com/silenceper/wechat/v2/util" +) + +// 原始回调消息内容 +type callbackOriginMessage struct { + ToUserName string // 企业微信的CorpID,当为第三方套件回调事件时,CorpID的内容为suiteid + AgentID string // 接收的应用id,可在应用的设置页面获取 + Encrypt string // 消息结构体加密后的字符串 +} + +// EventCallbackMessage 微信客户联系回调消息 +// https://developer.work.weixin.qq.com/document/path/92130 +type EventCallbackMessage struct { + ToUserName string `json:"to_user_name"` + FromUserName string `json:"from_user_name"` + CreateTime int64 `json:"create_time"` + MsgType string `json:"msg_type"` + Event string `json:"event"` + ChangeType string `json:"change_type"` + UserID string `json:"user_id"` + ExternalUserID string `json:"external_user_id"` + State string `json:"state"` + WelcomeCode string `json:"welcome_code"` +} + +// GetCallbackMessage 获取联系客户回调事件中的消息内容 +func (r *Client) GetCallbackMessage(encryptedMsg []byte) (msg EventCallbackMessage, err error) { + var origin callbackOriginMessage + if err = xml.Unmarshal(encryptedMsg, &origin); err != nil { + return + } + _, bData, err := util.DecryptMsg(r.CorpID, origin.Encrypt, r.EncodingAESKey) + if err != nil { + return + } + if err = xml.Unmarshal(bData, &msg); err != nil { + return + } + return +}