支持 用户单聊,群聊。
# 安装扩展包
npm install
配置相关参数
// 配置mongodb 数据库连接参数 configs/connection.js
module.exports = {
// mongodb://username:password@host:port/database?options...
url: 'mongodb://127.0.0.1:27017/chat'
}
// 配置redis 连接参数 configs/redis.js
module.exports = {
url: '',
host: '127.0.0.1',
port: 6379,
path: '',
password: '',
db: 0,
prefix: 'chat_'
}
// 配置阿里云文件上传参数 configs/filesystem.js
module.exports = {
oss: {
region: '',
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,部署在服务端使用RAM子账号或STS,部署在客户端使用STS。
accessKeyId: '',
accessKeySecret: '',
bucket: ''
}
}
运行程序
npm start
创建应用 获取appId 和 appSecret
/app/create
POST
参数 必选 类型 说明 appName ture string 应用名称 description ture string 应用描述
{
"status": 1,
"message": "创建成功",
"data": {
"appName": "appName",
"appSecret": "appSecret",
"appId": "appId"
}
}
返回字段 字段类型 说明 appName string 应用名称 appSecret string 应用appSecret appId string 应用appId
根据userId 获取用户的 token
/user/getToken
POST
请参考通用 API 接口签名规则
参数 必选 类型 说明 app_id ture string 应用ID time_stamp ture string 时间戳 nonce_str ture string 随机数 sign ture string 签名 userId ture string userId name ture string 用户昵称 avatarUri ture string 用户头像
{
"status": 1,
"message": "获取成功",
"data": {
"token": "NWJiYzgxYzU0MTgwNDkyNGViMmU2ZDU3MTU0MDM2OTgyMTc0ODM="
}
}
返回字段 字段类型 说明 token string 用户token
根据userId 获取用户的历史会话列表
/user/sessions
GET
请参考通用 API 接口签名规则
参数 必选 类型 说明 app_id ture string 应用ID time_stamp ture string 时间戳 nonce_str ture string 随机数 sign ture string 签名 userId ture string userId
{
"status": 1,
"message": "获取成功",
"data": [
{
"sid": "5bc053d1d7745643263a22fa",
"conversationType": 1,
"targetId": "2",
"unread": 0,
"title": "小李",
"avatar": "https://han960619.github.io/Vue-chat/static/images/%E5%B0%8F%E5%A7%A8%E5%A6%88.jpg",
"lastMsg": {
"content": "搜索",
"messageType": 1,
"date": "18/11/05"
}
},
{
"sid": "5bd2bc6acca08418a83792f3",
"conversationType": 2,
"targetId": "1",
"unread": 0,
"title": "测试群",
"avatar": "https://avatars1.githubusercontent.com/u/15651299?s=64&v=4",
"lastMsg": {
"content": "请求",
"messageType": 1,
"date": "18/11/05"
}
}
]
}
返回字段 字段类型 说明 sid string 会话ID conversationType number 会话类型,参考会话类型说明 targetId string 发送对象ID unread number 消息未读数 title string 会话标题 avatar string 会话头像 lastMsg.content string 最后一条消息内容 lastMsg.messageType number 最后一条消息类型,参考消息类型说明 lastMsg.date string 最后一条消息发送时间
创建聊天群组
/group/create
POST
请参考通用 API 接口签名规则
参数 必选 类型 说明 app_id ture string 应用ID time_stamp ture string 时间戳 nonce_str ture string 随机数 sign ture string 签名 groupId ture string 群组ID userIds ture array 用户IDS name ture string 群组名称 avatarUri false string 群组头像
{
"status": 1,
"message": "创建成功"
}
返回字段 字段类型 说明
用户加入群组
/group/join
POST
请参考通用 API 接口签名规则
参数 必选 类型 说明 app_id ture string 应用ID time_stamp ture string 时间戳 nonce_str ture string 随机数 sign ture string 签名 groupId ture string 群组ID userIds ture array 用户IDS
{
"status": 1,
"message": "加入成功"
}
返回字段 字段类型 说明
移除群组用户
/group/remove
POST
请参考通用 API 接口签名规则
参数 必选 类型 说明 app_id ture string 应用ID time_stamp ture string 时间戳 nonce_str ture string 随机数 sign ture string 签名 groupId ture string 群组ID userIds ture array 用户IDS
{
"status": 1,
"message": "移除成功"
}
返回字段 字段类型 说明
发送单聊消息
/private/send/message
POST
请参考通用 API 接口签名规则
参数 必选 类型 说明 app_id ture string 应用ID time_stamp ture string 时间戳 nonce_str ture string 随机数 sign ture string 签名 senderUserId ture string 发送用户ID targetId ture string 接受用户ID content ture object 消息体,不同类型的消息参数不一样 messageType ture number 消息类型 参考消息类型说明
{
"status": 1,
"message": "发送成功",
"data": {
"msgId": "5be3df8958a3a67c1aeafe2e",
"content": {
"content": "沙发斯蒂芬斯蒂芬"
},
"conversationType": 1,
"senderUserId": "2",
"targetId": "1",
"messageType": 1,
"date": "15:02",
"sendSession": {
"sid": "5bc053d1d7745643263a22fa",
"title": "小明",
"avatar": "https://avatars3.githubusercontent.com/u/12846955?s=40&v=4"
},
"sendUser": {
"name": "小李",
"avatarUri": "https://han960619.github.io/Vue-chat/static/images/%E5%B0%8F%E5%A7%A8%E5%A6%88.jpg"
}
}
}
返回字段 字段类型 说明 msgId string 消息ID,数据库唯一索引 content.content string 消息内容 conversationType string 会话类型 参考会话类型说明 senderUserId string 发送用户ID targetId string 接收用户ID messageType string 消息类型 参考消息类型说明 date string 发送时间 sendSession.sid string 发送方会话ID sendSession.title string 发送方会话标题 sendSession.avatar string 发送方会话头像 sendUser.name string 发送用户名称 sendUser.avatarUri string 发送用户头像
发送单聊消息
/group/send/message
POST
请参考通用 API 接口签名规则
参数 必选 类型 说明 app_id ture string 应用ID time_stamp ture string 时间戳 nonce_str ture string 随机数 sign ture string 签名 senderUserId ture string 发送用户ID targetId ture string 接收群组ID content ture object 消息体,不同类型的消息参数不一样 messageType ture number 消息类型 参考消息类型说明
{
"status": 1,
"message": "发送成功",
"data": {
"msgId": "5be3df8958a3a67c1aeafe2e",
"content": {
"content": "沙发斯蒂芬斯蒂芬"
},
"conversationType": 2,
"senderUserId": "2",
"targetId": "1",
"messageType": 1,
"date": "15:02",
"sendSession": {
"sid": "5bc053d1d7745643263a22fa",
"title": "小明",
"avatar": "https://avatars3.githubusercontent.com/u/12846955?s=40&v=4"
},
"sendUser": {
"name": "小李",
"avatarUri": "https://han960619.github.io/Vue-chat/static/images/%E5%B0%8F%E5%A7%A8%E5%A6%88.jpg"
}
}
}
返回字段 字段类型 说明 msgId string 消息ID,数据库唯一索引 content.content string 消息内容 conversationType int 会话类型 参考会话类型说明 senderUserId string 发送用户ID targetId string 接收群组ID messageType int 消息类型 参考消息类型说明 date string 发送时间 sendSession.sid string 发送方会话ID sendSession.title string 发送方会话标题 sendSession.avatar string 发送方会话头像 sendUser.name string 发送用户名称 sendUser.avatarUri string 发送用户头像
获取会话内的历史消息
/session/messages
GET
请参考通用 API 接口签名规则
参数 必选 类型 说明 app_id ture string 应用ID time_stamp ture string 时间戳 nonce_str ture string 随机数 sign ture string 签名 userId ture string 用户ID targetId ture string 接受用户ID conversationType ture int 会话类型 参考会话类型说明 limit false int 接口返回数据条数 lastmsgId false string 消息ID 分页查询时获取小于它的消息
{
"status": 1,
"message": "获取成功",
"data": [
{
"msgId": "5bf3a987abebf055ff62a5d6",
"content": {
"content": "哈哈哈哈"
},
"conversationType": 1,
"senderUserId": "1",
"targetId": "2",
"messageType": 1,
"date": "14:28",
"sendUser": {
"name": "小王",
"avatarUri": "https://avatars0.githubusercontent.com/u/1073262?s=88&v=4"
}
}
]
}
返回字段 字段类型 说明 msgId string 消息ID,数据库唯一索引 content.content string 消息内容 conversationType int 会话类型 参考会话类型说明 senderUserId string 发送用户ID targetId string 接收方ID messageType int 消息类型 参考消息类型说明 date string 发送时间 sendUser.name string 发送用户昵称 sendUser.avatarUri string 发送用户头像
图片语音等文件上传接口
/file/upload
POST
- query
{
"token": "用户Token",
"appId": "应用AppId"
}
- form-data
{
"up_file": "File文件"
}
{
"status": 1,
"message": "获取成功",
"data": [
{
"msgId": "5bf3a987abebf055ff62a5d6",
"content": {
"content": "哈哈哈哈"
},
"conversationType": 1,
"senderUserId": "1",
"targetId": "2",
"messageType": 1,
"date": "14:28",
"sendUser": {
"name": "小王",
"avatarUri": "https://avatars0.githubusercontent.com/u/1073262?s=88&v=4"
}
}
]
}
返回字段 字段类型 说明 msgId string 消息ID,数据库唯一索引 content.content string 消息内容 conversationType int 会话类型 参考会话类型说明 senderUserId string 发送用户ID targetId string 接收方ID messageType int 消息类型 参考消息类型说明 date string 发送时间 sendUser.name string 发送用户昵称 sendUser.avatarUri string 发送用户头像
获取会话列表
'session-list'
无
[
{
"sid": "5bc053d1d7745643263a22fa",
"conversationType": 1,
"targetId": "2",
"unread": 0,
"title": "小李",
"avatar": "https://han960619.github.io/Vue-chat/static/images/%E5%B0%8F%E5%A7%A8%E5%A6%88.jpg",
"lastMsg": {
"content": "搜索",
"messageType": 1,
"date": "18/11/05"
}
},
{
"sid": "5bd2bc6acca08418a83792f3",
"conversationType": 2,
"targetId": "1",
"unread": 0,
"title": "测试群",
"avatar": "https://avatars1.githubusercontent.com/u/15651299?s=64&v=4",
"lastMsg": {
"content": "请求",
"messageType": 1,
"date": "18/11/05"
}
}
]
返回字段 字段类型 说明 sid string 会话ID conversationType number 会话类型,参考会话类型说明 targetId string 发送对象ID unread number 消息未读数 title string 会话标题 avatar string 会话头像 lastMsg.content string 最后一条消息内容 lastMsg.messageType number 最后一条消息类型,参考消息类型说明 lastMsg.date string 最后一条消息发送时间
获取会话内的消息记录
'session-message-list'
{
"sid": "会话ID",
"limit": "接口返回数据条数",
"lastmsgId": "消息ID 分页查询时获取小于它的消息 为空时从最新的获取"
}
[
{
"msgId": "5bf3a987abebf055ff62a5d6",
"content": {
"content": "哈哈哈哈"
},
"conversationType": 1,
"senderUserId": "1",
"targetId": "2",
"messageType": 1,
"date": "14:28",
"sendUser": {
"name": "小王",
"avatarUri": "https://avatars0.githubusercontent.com/u/1073262?s=88&v=4"
}
}
]
返回字段 字段类型 说明 msgId string 消息ID,数据库唯一索引 content.content string 消息内容 conversationType int 会话类型 参考会话类型说明 senderUserId string 发送用户ID targetId string 接收方ID messageType int 消息类型 参考消息类型说明 date string 发送时间 sendUser.name string 发送用户昵称 sendUser.avatarUri string 发送用户头像
发送单聊消息
'send-private-message'
{
"senderUserId": "发送用户",
"targetId": "接收用户",
"messageType": "消息类型",
"content": "消息内容 object"
}
{
"msgId": "5be3df8958a3a67c1aeafe2e",
"content": {
"content": "沙发斯蒂芬斯蒂芬"
},
"conversationType": 1,
"senderUserId": "2",
"targetId": "1",
"messageType": 1,
"date": "15:02",
"sendSession": {
"sid": "5bc053d1d7745643263a22fa",
"title": "小明",
"avatar": "https://avatars3.githubusercontent.com/u/12846955?s=40&v=4"
},
"sendUser": {
"name": "小李",
"avatarUri": "https://han960619.github.io/Vue-chat/static/images/%E5%B0%8F%E5%A7%A8%E5%A6%88.jpg"
}
}
返回字段 字段类型 说明 msgId string 消息ID,数据库唯一索引 content.content string 消息内容 conversationType string 会话类型 参考会话类型说明 senderUserId string 消息ID,数据库唯一索引 targetId string 消息ID,数据库唯一索引 messageType string 消息ID,数据库唯一索引 date string 消息ID,数据库唯一索引 sendSession.sid string 消息ID,数据库唯一索引 sendSession.title string 消息ID,数据库唯一索引 sendSession.avatar string 消息ID,数据库唯一索引 sendUser.name string 消息ID,数据库唯一索引 sendUser.avatarUri string 消息ID,数据库唯一索引
发送群聊消息
'send-group-message'
{
"senderUserId": "发送用户",
"targetId": "接收群组",
"messageType": "消息类型",
"content": "消息内容 object"
}
{
"msgId": "5be3df8958a3a67c1aeafe2e",
"content": {
"content": "沙发斯蒂芬斯蒂芬"
},
"conversationType": 2,
"senderUserId": "2",
"targetId": "1",
"messageType": 1,
"date": "15:02",
"sendSession": {
"sid": "5bc053d1d7745643263a22fa",
"title": "群组",
"avatar": "https://avatars3.githubusercontent.com/u/12846955?s=40&v=4"
},
"sendUser": {
"name": "小李",
"avatarUri": "https://han960619.github.io/Vue-chat/static/images/%E5%B0%8F%E5%A7%A8%E5%A6%88.jpg"
}
}
返回字段 字段类型 说明 msgId string 消息ID,数据库唯一索引 content.content string 消息内容 conversationType string 会话类型 参考会话类型说明 senderUserId string 消息ID,数据库唯一索引 targetId string 消息ID,数据库唯一索引 messageType string 消息ID,数据库唯一索引 date string 消息ID,数据库唯一索引 sendSession.sid string 消息ID,数据库唯一索引 sendSession.title string 消息ID,数据库唯一索引 sendSession.avatar string 消息ID,数据库唯一索引 sendUser.name string 消息ID,数据库唯一索引 sendUser.avatarUri string 消息ID,数据库唯一索引
标记会话已读消息
'set-session-read'
sid: 会话ID
无
无
用于计算签名的参数在不同接口之间会有差异,但算法过程固定如下4个步骤。
-
1.将<key, value>请求参数对按key进行字典升序排序,得到有序的参数对列表N
-
2.将列表N中的参数对按URL键值对的格式拼接成字符串,得到字符串T(如:key1=value1&key2=value2),URL键值拼接过程value部分需要URL编码,URL编码算法用大写字母,例如%E8,而不是小写%e8
-
3.将应用密钥以app_key为键名,组成URL键值拼接到字符串T末尾,得到字符串S(如:key1=value1&key2=value2&app_key=密钥)
-
4.对字符串S进行MD5运算,将得到的MD5值所有字符转换成大写,得到接口请求签名
- 1.不同接口要求的参数对不一样,计算签名使用的参数对也不一样
- 2.参数名区分大小写,参数值为空不参与签名
- 3.URL键值拼接过程value部分需要URL编码
- 4.签名有效期5分钟,需要请求接口时刻实时计算签名信息
// getReqSign :根据 接口请求参数 和 应用密钥 计算 请求签名
// 参数说明
// - $params:接口请求参数(特别注意:不同的接口,参数对一般不一样,请以具体接口要求为准)
// - $appkey:应用密钥
// 返回数据
// - 签名结果
function getReqSign($params /* 关联数组 */, $appkey /* 字符串*/)
{
// 1. 字典升序排序
ksort($params);
// 2. 拼按URL键值对
$str = '';
foreach ($params as $key => $value)
{
if ($value !== '')
{
$str .= $key . '=' . urlencode($value) . '&';
}
}
// 3. 拼接app_key
$str .= 'app_key=' . $appkey;
// 4. MD5运算,得到请求签名
return md5($str);
}
- PRIVATE: 单聊
- GROUP: 群聊
{
"PRIVATE": 1,
"GROUP": 2
}
- TEXT_MESSAGE:文本消息
- VOICE_MESSAGE 语音消息
- IMAGE_MESSAGE 图片消息
- FILE_MESSAGE 文件消息
- LOCATION_MESSAGE 位置消息
- CUSTOM_MESSAGE 自定义消息
{
"TEXT_MESSAGE": 1,
"VOICE_MESSAGE": 2,
"IMAGE_MESSAGE": 3,
"FILE_MESSAGE": 4,
"LOCATION_MESSAGE": 5,
"CUSTOM_MESSAGE": 6
}