44 "encoding/json"
55 "errors"
66 "fmt"
7+ "github.com/NICEXAI/WeChatCustomerServiceSDK/syncmsg"
78 "github.com/NICEXAI/WeChatCustomerServiceSDK/util"
89)
910
@@ -19,13 +20,22 @@ type SyncMsgOptions struct {
1920 Limit uint `json:"limit"` // 期望请求的数据量,默认值和最大值都为1000, 注意:可能会出现返回条数少于limit的情况,需结合返回的has_more字段判断是否继续请求。
2021}
2122
23+ // SyncMsgSchema 获取消息查询响应内容
24+ type syncMsgSchema struct {
25+ ErrCode int32 `json:"errcode"` // 返回码
26+ ErrMsg string `json:"errmsg"` // 错误码描述
27+ NextCursor string `json:"next_cursor"` // 下次调用带上该值则从该key值往后拉,用于增量拉取
28+ HasMore uint32 `json:"has_more"` // 是否还有更多数据。0-否;1-是。不能通过判断msg_list是否空来停止拉取,可能会出现has_more为1,而msg_list为空的情况
29+ MsgList []map [string ]interface {} `json:"msg_list"` // 消息列表
30+ }
31+
2232// SyncMsgSchema 获取消息查询响应内容
2333type SyncMsgSchema struct {
2434 ErrCode int32 `json:"errcode"` // 返回码
2535 ErrMsg string `json:"errmsg"` // 错误码描述
2636 NextCursor string `json:"next_cursor"` // 下次调用带上该值则从该key值往后拉,用于增量拉取
2737 HasMore uint32 `json:"has_more"` // 是否还有更多数据。0-否;1-是。不能通过判断msg_list是否空来停止拉取,可能会出现has_more为1,而msg_list为空的情况
28- MsgList [][] byte `json:"msg_list"` // 消息列表
38+ MsgList []syncmsg. Message `json:"msg_list"` // 消息列表
2939}
3040
3141// SyncMsg 获取消息
@@ -34,9 +44,56 @@ func (r *Client) SyncMsg(options SyncMsgOptions) (info SyncMsgSchema, err error)
3444 if err != nil {
3545 return info , err
3646 }
37- _ = json .Unmarshal (data , & info )
38- if info .ErrCode != 0 {
39- return info , errors .New (info .ErrMsg )
47+ originInfo := syncMsgSchema {}
48+ if err = json .Unmarshal (data , & originInfo ); err != nil {
49+ return info , err
50+ }
51+ if originInfo .ErrCode != 0 {
52+ return info , errors .New (originInfo .ErrMsg )
53+ }
54+ msgList := make ([]syncmsg.Message , 0 )
55+ if len (originInfo .MsgList ) > 0 {
56+ for _ , msg := range originInfo .MsgList {
57+ newMsg := syncmsg.Message {}
58+ if val , ok := msg ["msgid" ].(string ); ok {
59+ newMsg .MsgID = val
60+ }
61+ if val , ok := msg ["open_kfid" ].(string ); ok {
62+ newMsg .OpenKFID = val
63+ }
64+ if val , ok := msg ["external_userid" ].(string ); ok {
65+ newMsg .ExternalUserID = val
66+ }
67+ if val , ok := msg ["send_time" ].(float64 ); ok {
68+ newMsg .SendTime = uint64 (val )
69+ }
70+ if val , ok := msg ["origin" ].(float64 ); ok {
71+ newMsg .Origin = uint32 (val )
72+ }
73+
74+ if val , ok := msg ["msgtype" ].(string ); ok {
75+ newMsg .MsgType = val
76+ }
77+ if newMsg .MsgType == "event" {
78+ if event , ok := msg ["event" ].(map [string ]interface {}); ok {
79+ if eType , ok := event ["event_type" ].(string ); ok {
80+ newMsg .EventType = eType
81+ }
82+ }
83+ }
84+ originData , err := json .Marshal (msg )
85+ if err != nil {
86+ return info , err
87+ }
88+ newMsg .OriginData = originData
89+ msgList = append (msgList , newMsg )
90+ }
4091 }
41- return info , nil
92+ return SyncMsgSchema {
93+ ErrCode : originInfo .ErrCode ,
94+ ErrMsg : originInfo .ErrMsg ,
95+ NextCursor : originInfo .NextCursor ,
96+ HasMore : originInfo .HasMore ,
97+ MsgList : msgList ,
98+ }, nil
4299}
0 commit comments