github.com/872409/go-netease-im@v1.0.2-0.20201109080841-fdb3e13691c5/notify.go (about) 1 package netease 2 3 import ( 4 "errors" 5 "fmt" 6 "io/ioutil" 7 "net/http" 8 ) 9 10 const ( 11 // EventTypeConversation 表示CONVERSATION消息,即会话类型的消息(目前包括P2P聊天消息,群组聊天消息,群组操作,好友操作) 12 EventTypeConversation = "1" 13 // EventTypeLogin 表示LOGIN消息,即用户登录事件的消息 14 EventTypeLogin = "2" 15 // EventTypeLogout 表示LOGOUT消息,即用户登出事件的消息 16 EventTypeLogout = "3" 17 // EventTypeChatRoom 表示CHATROOM消息,即聊天室中聊天的消息 18 EventTypeChatRoom = "4" 19 // EventTypeMediaDuration 汇报实时音视频通话时长、白板事件时长的消息 20 EventTypeMediaDuration = "5" 21 // EventTypeMediaInfo 汇报音视频/白板文件的大小、下载地址等消息 22 EventTypeMediaInfo = "6" 23 // EventTypeP2PMessageRecall 单聊消息撤回抄送 24 EventTypeP2PMessageRecall = "7" 25 // EventTypeGroupMessageRecall 群聊消息撤回抄送 26 EventTypeGroupMessageRecall = "8" 27 // EventTypeChatRoomInOut 汇报主播或管理员进出聊天室事件消息 28 EventTypeChatRoomInOut = "9" 29 // EventTypeECPCallback 汇报专线电话通话结束回调抄送的消息 30 EventTypeECPCallback = "10" 31 // EventTypeSMSCallback 汇报短信回执抄送的消息 32 EventTypeSMSCallback = "11" 33 // EventTypeSMSReply 汇报短信上行消息 34 EventTypeSMSReply = "12" 35 // EventTypeAvRoomInOut 汇报用户进出音视频/白板房间的消息 36 EventTypeAvRoomInOut = "13" 37 // EventTypeChatRoomQueueOperate 汇报聊天室队列操作的事件消息 38 EventTypeChatRoomQueueOperate = "14" 39 ) 40 41 // GetEventNotification . 42 func (c *ImClient) GetEventNotification(req *http.Request) ([]byte, error) { 43 if req == nil { 44 return nil, errors.New("request 参数不能为空") 45 } 46 47 checkSum := req.Header.Get("CheckSum") 48 md5 := req.Header.Get("MD5") 49 curTime := req.Header.Get("CurTime") 50 bd, err := ioutil.ReadAll(req.Body) 51 if err != nil { 52 return nil, err 53 } 54 defer req.Body.Close() 55 56 if Md5HashToHexString(bd) != md5 { 57 return bd, fmt.Errorf("消息抄送内容被劫持,[md5]:%s,[body]:%s,[encodedBody]:%s", md5, string(bd), ShaHashToHexString(bd)) 58 } 59 60 if checkSum != ShaHashToHexStringFromString(c.AppSecret+md5+curTime) { 61 return bd, fmt.Errorf("CheckSum校验失败,[request-header-checkSum]:%s,[Checksum]:%s,[encodedChecksum]:%s", checkSum, c.AppSecret+md5+curTime, ShaHashToHexStringFromString(c.AppSecret+md5+curTime)) 62 } 63 return bd, nil 64 } 65 66 // GetAudioCopyInfo . 67 func (c *ImClient) GetAudioCopyInfo(req *http.Request) (*AudioCopyInfo, error) { 68 bd, err := c.GetEventNotification(req) 69 if err != nil { 70 return nil, err 71 } 72 73 aci := &AudioCopyInfo{} 74 if err := jsonTool.Unmarshal(bd, aci); err != nil { 75 return nil, err 76 } 77 if aci.EventType != EventTypeMediaDuration { 78 return nil, errors.New("抄送信息的类型不是音视频/白板时长类型") 79 } 80 return aci, err 81 }