Skip to content

Commit bd503a0

Browse files
committed
优化消息同步
1 parent fb3b779 commit bd503a0

File tree

3 files changed

+77
-20
lines changed

3 files changed

+77
-20
lines changed

syncmsg.go

Lines changed: 62 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
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 获取消息查询响应内容
2333
type 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
}

syncmsg/callback.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package syncmsg
22

33
type Event struct {
4-
ToUserName string // 微信客服组件ID
5-
CreateTime int // 消息创建时间,unix时间戳
6-
MsgType string // 消息的类型,此时固定为 event
7-
Event string // 事件的类型,此时固定为 kf_msg_or_event
8-
Token string // 调用拉取消息接口时,需要传此token,用于校验请求的合法性
4+
ToUserName string `json:"to_user_name"` // 微信客服组件ID
5+
CreateTime int `json:"create_time"` // 消息创建时间,unix时间戳
6+
MsgType string `json:"msgtype"` // 消息的类型,此时固定为 event
7+
Event string `json:"event"` // 事件的类型,此时固定为 kf_msg_or_event
8+
Token string `json:"token"` // 调用拉取消息接口时,需要传此token,用于校验请求的合法性
99
}

syncmsg/syncmsg.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,58 +11,58 @@ type Message struct {
1111
Origin uint32 `json:"origin"` // 消息来源。3-客户回复的消息 4-系统推送的消 息
1212
MsgType string `json:"msgtype"` // 消息类型
1313
EventType string `json:"event_type"` // 事件类型
14-
originData []byte // 原始数据内容
14+
OriginData []byte `json:"origin_data"` // 原始数据内容
1515
}
1616

1717
// GetOriginMessage 获取原始消息
1818
func (r Message) GetOriginMessage() (info []byte) {
19-
return r.originData
19+
return r.OriginData
2020
}
2121

2222
// GetTextMessage 获取文本消息
2323
func (r Message) GetTextMessage() (info Text, err error) {
24-
err = json.Unmarshal(r.originData, &info)
24+
err = json.Unmarshal(r.OriginData, &info)
2525
return info, err
2626
}
2727

2828
// GetImageMessage 获取图片消息
2929
func (r Message) GetImageMessage() (info Image, err error) {
30-
err = json.Unmarshal(r.originData, &info)
30+
err = json.Unmarshal(r.OriginData, &info)
3131
return info, err
3232
}
3333

3434
// GetVoiceMessage 获取语音消息
3535
func (r Message) GetVoiceMessage() (info Voice, err error) {
36-
err = json.Unmarshal(r.originData, &info)
36+
err = json.Unmarshal(r.OriginData, &info)
3737
return info, err
3838
}
3939

4040
// GetVideoMessage 获取视频消息
4141
func (r Message) GetVideoMessage() (info Video, err error) {
42-
err = json.Unmarshal(r.originData, &info)
42+
err = json.Unmarshal(r.OriginData, &info)
4343
return info, err
4444
}
4545

4646
// GetFileMessage 获取文件消息
4747
func (r Message) GetFileMessage() (info File, err error) {
48-
err = json.Unmarshal(r.originData, &info)
48+
err = json.Unmarshal(r.OriginData, &info)
4949
return info, err
5050
}
5151

5252
// GetLocationMessage 获取文件消息
5353
func (r Message) GetLocationMessage() (info Location, err error) {
54-
err = json.Unmarshal(r.originData, &info)
54+
err = json.Unmarshal(r.OriginData, &info)
5555
return info, err
5656
}
5757

5858
// GetEnterSessionEvent 用户进入会话事件
5959
func (r Message) GetEnterSessionEvent() (info EnterSessionEvent, err error) {
60-
err = json.Unmarshal(r.originData, &info)
60+
err = json.Unmarshal(r.OriginData, &info)
6161
return info, err
6262
}
6363

6464
// GetMsgSendFailEvent 消息发送失败事件
6565
func (r Message) GetMsgSendFailEvent() (info MsgSendFailEvent, err error) {
66-
err = json.Unmarshal(r.originData, &info)
66+
err = json.Unmarshal(r.OriginData, &info)
6767
return info, err
6868
}

0 commit comments

Comments
 (0)