From ebf78902a722dab540c2ff609a592283f5dedf9b Mon Sep 17 00:00:00 2001 From: eatMoreApple <15055461510@163.com> Date: Sun, 25 Apr 2021 18:25:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8F=AF=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E5=90=8D=E7=89=87=E6=B6=88=E6=81=AF=E8=8E=B7=E5=8F=96=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E5=8F=B7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bot_test.go | 4 ++++ message.go | 42 ++++++++++++++++++++++++++++++++++-------- parser.go | 7 +++++++ 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/bot_test.go b/bot_test.go index 4c59871..22ed249 100644 --- a/bot_test.go +++ b/bot_test.go @@ -39,6 +39,10 @@ func TestMessage(t *testing.T) { if msg.IsMedia() { fmt.Println(msg.Content) } + if msg.IsCard() { + c, _ := msg.Card() + fmt.Println(c.Alias) + } } if err := bot.Login(); err != nil { t.Error(err) diff --git a/message.go b/message.go index 8f84749..ad1caeb 100644 --- a/message.go +++ b/message.go @@ -2,6 +2,7 @@ package openwechat import ( "context" + "encoding/xml" "errors" "net/http" "os" @@ -213,6 +214,17 @@ func (m *Message) GetFile() (*http.Response, error) { return nil, errors.New("unsupported type") } +// 获取card类型 +func (m *Message) Card() (*Card, error) { + if !m.IsCard() { + return nil, errors.New("card message required") + } + var card Card + content := XmlFormString(m.Content) + err := xml.Unmarshal([]byte(content), &card) + return &card, err +} + // 往消息上下文中设置值 // goroutine safe func (m *Message) Set(key string, value interface{}) { @@ -315,12 +327,26 @@ type RecommendInfo struct { VerifyFlag int } -type Article struct { -} - -func xmlFormString(text string) string { - lt := strings.ReplaceAll(text, "<", "<") - gt := strings.ReplaceAll(lt, ">", ">") - br := strings.ReplaceAll(gt, "
", "\n") - return strings.ReplaceAll(br, "&amp;", "&") +// 名片消息内容 +type Card struct { + XMLName xml.Name `xml:"msg"` + BigHeadImgUrl string `xml:"bigheadimgurl,attr"` + SmallHeadImgUrl string `xml:"smallheadimgurl,attr"` + UserName string `xml:"username,attr"` + NickName string `xml:"nickname,attr"` + ShortPy string `xml:"shortpy,attr"` + Alias string `xml:"alias,attr"` // Note: 这个是名片用户的微信号 + ImageStatus int `xml:"imagestatus,attr"` + Scene int `xml:"scene,attr"` + Province string `xml:"province,attr"` + City string `xml:"city,attr"` + Sign string `xml:"sign,attr"` + Sex int `xml:"sex,attr"` + Certflag int `xml:"certflag,attr"` + Certinfo string `xml:"certinfo,attr"` + BrandIconUrl string `xml:"brandIconUrl,attr"` + BrandHomeUr string `xml:"brandHomeUr,attr"` + BrandSubscriptConfigUrl string `xml:"brandSubscriptConfigUrl,attr"` + BrandFlags string `xml:"brandFlags,attr"` + RegionCode string `xml:"regionCode,attr"` } diff --git a/parser.go b/parser.go index 9fb10bb..39f91f5 100644 --- a/parser.go +++ b/parser.go @@ -37,3 +37,10 @@ func getWebWxDataTicket(cookies []*http.Cookie) string { } return "" } + +func XmlFormString(text string) string { + lt := strings.ReplaceAll(text, "<", "<") + gt := strings.ReplaceAll(lt, ">", ">") + br := strings.ReplaceAll(gt, "
", "\n") + return strings.ReplaceAll(br, "&amp;", "&") +}