技术原理
开通第三方回调服务后,网易云信 IM 服务器会在客户端发送消息时,通过向您的应用服务器发送请求,将消息内容和用户信息发往应用服务器。您的应用服务器判断消息是否可以发送,并返回结果,网易云信 IM 服务器再选择是否投递消息。
第三方回调服务仅针对通过 SDK 发送的消息。通过服务端 API 发送的消息,不会触发第三方回调。
如果已开通第三方回调并配置消息相关回调,用户被拉黑后,给对方发消息,也会先进行第三方回调。
开通和配置第三方回调
使用第三方回调前,您需要在 网易云信控制台 上开通和配置 第三方回调。步骤详情请参考 开通和配置第三方回调。
第三方回调概述
请求相关项 | 说明 |
请求协议 | HTTP/HTTPS,为保证数据安全,建议您使用 HTTPS |
请求方式 | POST,后面接您在 网易云信控制台 配置的第三方回调地址(通常为您的应用服务器地址),示例:POST https://******.com |
消息格式 | application/json; charset=utf-8 |
回调地址 | 对于部分回调类型(如单聊消息和群消息)来说,您可在发送消息时设置环境变量(env),服务器将根据不同的环境回调到不同的回调地址,环境和回调地址的映射关系需要在 网易云信控制台 配置,具体请参考上述步骤 3 |
校验方式 |
网易云信 IM 服务器请求您的应用服务器时,您的应用服务器从请求头 (request header)中获取 CheckSum 进行安全校验CheckSum = sha1(AppSecret + MD5 + CurTime),其中 AppSecret、MD5 和 CurTime 均为 String 类型在验证数据是否在传输过程中被篡改时,需要计算验证 MD5 值是否被修改,以及计算验证 CheckSumAppSecret 值为您的 AppSecret(与 AppKey 对应),MD5 值为根据请求体(request body)计算出来的值 |
请求次数 | 网易云信 IM 服务器只会请求 1 次 |
请求超时时间 | 超时时间为 2 秒如果请求失败或者超时,网易云信 IM 服务器会使用网易云信控制台上配置的默认回调结果继续处理业务逻辑您可前往 产品功能 > IM 即时通讯 > 基础功能 > 第三方回调 > 子功能配置 修改调用失败时的默认策略 |
消息放行结果 | 如果不放行,SDK 返回 403。如果放行,SDK 返回 7101 |
请求格式
请求头说明
Header 参数 | 类型 | 说明 |
AppKey | String | 您的应用的 App Key,具体获取方式请参考 获取 App Key |
CurTime | Long | 当前 UTC 时间戳,从 1970 年 1 月 1 日 0 点 0 分 0 秒开始到现在的毫秒数(Long) |
MD5 | String | 根据请求中的 request body 计算出来的 MD5 值 |
CheckSum | String | 校验值 |
Content-Type | String | 请求消息体类型,一般为:application/json |
MD5 值计算示例:
String requestBody = "{}"; String MD5 = CheckSumBuilder.getMD5(requestBody); //参考 接口概述 -> API checksum 校验 部分
CheckSum 值计算示例:
String AppSecret = "90ud57s6****"; String MD5 = "9894907e4ad9de467809127750******"; String CurTime = "1440570500855"; 当前 UTC 时间戳,从 1970 年 1 月 1 日 0 点 0 分 0 秒开始到现在的毫秒数(String) String CheckSum = CheckSumBuilder.getCheckSum(AppSecret, MD5, CurTime); //参考 接口概述 -> API checksum 校验 部分
请求的 HTTP Body 说明
消息体统一为 JSON 格式,示例:
JSON { "body": "Hello", "eventType": 1, "fromAccount": "000266", "fromClientType": "WEB", "fromDeviceId": "617715aa8579db03f0cf054c199c****", "fromNick": "yj000266", "msgTimestamp": "1541560157286", "msgType": "TEXT", "msgidClient": "", "to": "005877", "fromClientIp":"115.211.**.**", "fromClientPort":"568**" } //Json 中的属性请参考具体的回调类型
响应格式说明
第三方回调响应的 Content-Type Header 需要设置为 application/json; charset=utf-8
响应消息体为 JSON 格式,示例:
JSON { "errCode":0, "responseCode": 20000, "modifyResponse": {}, "callbackExt": "aa" }
【使用必读】服务端集成网易云信IM 即时通讯-回调说明篇(二):https://developer.aliyun.com/article/1566293