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, "&", "&")
+// 名片消息内容
+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, "&", "&")
+}