|
@@ -2,6 +2,7 @@ package message
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
"encoding/xml"
|
|
"encoding/xml"
|
|
|
|
|
+
|
|
|
"github.com/silenceper/wechat/device"
|
|
"github.com/silenceper/wechat/device"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
@@ -181,22 +182,32 @@ type ResponseEncryptedXMLMsg struct {
|
|
|
Nonce string `xml:"Nonce" json:"Nonce"`
|
|
Nonce string `xml:"Nonce" json:"Nonce"`
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// CDATA 使用该类型,在序列化为 xml 文本时文本会被解析器忽略
|
|
|
|
|
+type CDATA string
|
|
|
|
|
+
|
|
|
|
|
+// MarshalXML 实现自己的序列化方法
|
|
|
|
|
+func (c CDATA) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
|
|
|
|
|
+ return e.EncodeElement(struct {
|
|
|
|
|
+ string `xml:",cdata"`
|
|
|
|
|
+ }{string(c)}, start)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// CommonToken 消息中通用的结构
|
|
// CommonToken 消息中通用的结构
|
|
|
type CommonToken struct {
|
|
type CommonToken struct {
|
|
|
XMLName xml.Name `xml:"xml"`
|
|
XMLName xml.Name `xml:"xml"`
|
|
|
- ToUserName string `xml:"ToUserName"`
|
|
|
|
|
- FromUserName string `xml:"FromUserName"`
|
|
|
|
|
|
|
+ ToUserName CDATA `xml:"ToUserName"`
|
|
|
|
|
+ FromUserName CDATA `xml:"FromUserName"`
|
|
|
CreateTime int64 `xml:"CreateTime"`
|
|
CreateTime int64 `xml:"CreateTime"`
|
|
|
MsgType MsgType `xml:"MsgType"`
|
|
MsgType MsgType `xml:"MsgType"`
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//SetToUserName set ToUserName
|
|
//SetToUserName set ToUserName
|
|
|
-func (msg *CommonToken) SetToUserName(toUserName string) {
|
|
|
|
|
|
|
+func (msg *CommonToken) SetToUserName(toUserName CDATA) {
|
|
|
msg.ToUserName = toUserName
|
|
msg.ToUserName = toUserName
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//SetFromUserName set FromUserName
|
|
//SetFromUserName set FromUserName
|
|
|
-func (msg *CommonToken) SetFromUserName(fromUserName string) {
|
|
|
|
|
|
|
+func (msg *CommonToken) SetFromUserName(fromUserName CDATA) {
|
|
|
msg.FromUserName = fromUserName
|
|
msg.FromUserName = fromUserName
|
|
|
}
|
|
}
|
|
|
|
|
|