Преглед на файлове

Merge pull request #184 from chencanxin/master

fix: 序列化 xml 时添加 cdata 标签
silenceper преди 6 години
родител
ревизия
76c1832798
променени са 2 файла, в които са добавени 20 реда и са изтрити 10 реда
  1. 18 8
      message/message.go
  2. 2 2
      message/text.go

+ 18 - 8
message/message.go

@@ -148,10 +148,10 @@ type MixMessage struct {
 	UnionID             string `xml:"UnionId"`
 
 	// 内容审核相关
-	IsRisky 		    bool `xml:"isrisky"`
-	ExtraInfoJSON 		string `xml:"extra_info_json"`
-	TraceID 			string `xml:"trace_id"`
-	StatusCode          int `xml:"status_code"`
+	IsRisky       bool   `xml:"isrisky"`
+	ExtraInfoJSON string `xml:"extra_info_json"`
+	TraceID       string `xml:"trace_id"`
+	StatusCode    int    `xml:"status_code"`
 }
 
 //EventPic 发图事件推送
@@ -178,20 +178,30 @@ type ResponseEncryptedXMLMsg struct {
 // CommonToken 消息中通用的结构
 type CommonToken struct {
 	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"`
 	MsgType      MsgType  `xml:"MsgType"`
 }
 
+// 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)
+}
+
 //SetToUserName set ToUserName
 func (msg *CommonToken) SetToUserName(toUserName string) {
-	msg.ToUserName = toUserName
+	msg.ToUserName = CDATA(toUserName)
 }
 
 //SetFromUserName set FromUserName
 func (msg *CommonToken) SetFromUserName(fromUserName string) {
-	msg.FromUserName = fromUserName
+	msg.FromUserName = CDATA(fromUserName)
 }
 
 //SetCreateTime set createTime

+ 2 - 2
message/text.go

@@ -3,12 +3,12 @@ package message
 //Text 文本消息
 type Text struct {
 	CommonToken
-	Content string `xml:"Content"`
+	Content CDATA `xml:"Content"`
 }
 
 //NewText 初始化文本消息
 func NewText(content string) *Text {
 	text := new(Text)
-	text.Content = content
+	text.Content = CDATA(content)
 	return text
 }