diff --git a/message/customer_message.go b/message/customer_message.go index e697d13..7eaf2f6 100644 --- a/message/customer_message.go +++ b/message/customer_message.go @@ -3,8 +3,8 @@ package message import ( "encoding/json" "fmt" - "github.com/silenceper/wechat/util" "github.com/silenceper/wechat/context" + "github.com/silenceper/wechat/util" ) const ( @@ -139,14 +139,14 @@ type MediaMiniprogrampage struct { } //Send 发送客服消息 -func (manager *Manager) Send(msg *CustomerMessage) error { - accessToken,err:=manager.Context.GetAccessToken() - if err!=nil { +func (manager *Manager) Send(msg *CustomerMessage) error { + accessToken, err := manager.Context.GetAccessToken() + if err != nil { return err } uri := fmt.Sprintf("%s?access_token=%s", customerSendMessage, accessToken) response, err := util.PostJSON(uri, msg) - var result util.CommonError + var result util.CommonError err = json.Unmarshal(response, &result) if err != nil { return err diff --git a/message/message.go b/message/message.go index db2f5ca..471dcd4 100644 --- a/message/message.go +++ b/message/message.go @@ -2,6 +2,7 @@ package message import ( "encoding/xml" + "github.com/silenceper/wechat/device" ) @@ -181,22 +182,32 @@ type ResponseEncryptedXMLMsg struct { 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 消息中通用的结构 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"` } //SetToUserName set ToUserName -func (msg *CommonToken) SetToUserName(toUserName string) { +func (msg *CommonToken) SetToUserName(toUserName CDATA) { msg.ToUserName = toUserName } //SetFromUserName set FromUserName -func (msg *CommonToken) SetFromUserName(fromUserName string) { +func (msg *CommonToken) SetFromUserName(fromUserName CDATA) { msg.FromUserName = fromUserName } diff --git a/message/text.go b/message/text.go index d981d96..88ac19a 100644 --- a/message/text.go +++ b/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 }