2025-11-22 15:31:01 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace support\OpenImSdk\Api;
|
|
|
|
|
|
|
|
|
|
use support\OpenImSdk\Core\Url;
|
|
|
|
|
use support\OpenImSdk\Core\Utils;
|
|
|
|
|
|
|
|
|
|
class Message
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* 发送消息
|
|
|
|
|
* @param string $sendID 发送者ID
|
|
|
|
|
* @param string $recvID 接收者ID,单聊时必填
|
|
|
|
|
* @param string $groupID 群组ID,群聊时必填
|
|
|
|
|
* @param string $senderNickname 发送者昵称
|
|
|
|
|
* @param string $senderFaceURL 发送者头像
|
|
|
|
|
* @param int $senderPlatformID 发送者平台ID
|
|
|
|
|
* @param array $content 消息内容
|
|
|
|
|
* @param int $contentType 消息类型
|
|
|
|
|
* @param int $sessionType 会话类型,1单聊,2群聊
|
|
|
|
|
* @param bool $isOnlineOnly 是否仅在线用户接收
|
|
|
|
|
* @param bool $notOfflinePush 是否不离线推送
|
|
|
|
|
* @param int $sendTime 发送时间,毫秒
|
|
|
|
|
* @param array $offlinePushInfo 离线推送信息
|
|
|
|
|
* @param string $ex 扩展字段
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function sendMsg(string $sendID, string $recvID = '', string $groupID = '', string $senderNickname = '', string $senderFaceURL = '', int $senderPlatformID = 1, array $content = [], int $contentType = 101, int $sessionType = 1, bool $isOnlineOnly = false, bool $notOfflinePush = false, int $sendTime = 0, array $offlinePushInfo = [], string $ex = ''): array
|
|
|
|
|
{
|
|
|
|
|
// 获取管理员token
|
|
|
|
|
$adminToken = Utils::getAdminToken();
|
|
|
|
|
$data = [
|
|
|
|
|
'sendID' => $sendID,
|
|
|
|
|
'senderNickname' => $senderNickname,
|
|
|
|
|
'senderFaceURL' => $senderFaceURL,
|
|
|
|
|
'senderPlatformID' => $senderPlatformID,
|
|
|
|
|
'contentType' => $contentType,
|
|
|
|
|
'sessionType' => $sessionType,
|
|
|
|
|
'isOnlineOnly' => $isOnlineOnly,
|
|
|
|
|
'notOfflinePush' => $notOfflinePush,
|
|
|
|
|
'ex' => $ex
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
// 根据会话类型设置recvID或groupID
|
|
|
|
|
if ($sessionType == 1 && !empty($recvID)) {
|
|
|
|
|
$data['recvID'] = $recvID;
|
|
|
|
|
} elseif ($sessionType == 2 && !empty($groupID)) {
|
|
|
|
|
$data['groupID'] = $groupID;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 设置消息内容
|
|
|
|
|
if (empty($content)) {
|
|
|
|
|
$data['content'] = ['text' => ''];
|
|
|
|
|
} else {
|
|
|
|
|
$data['content'] = $content;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 设置发送时间,如果有的话
|
|
|
|
|
if ($sendTime > 0) {
|
|
|
|
|
$data['sendTime'] = $sendTime;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 设置离线推送信息,如果有的话
|
|
|
|
|
if (!empty($offlinePushInfo)) {
|
|
|
|
|
$data['offlinePushInfo'] = $offlinePushInfo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Utils::send(Url::$sendMsg, $data, '发送消息失败', $adminToken);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 批量发送消息
|
|
|
|
|
* @param string $sendID 发送者ID
|
|
|
|
|
* @param string $senderNickname 发送者昵称
|
|
|
|
|
* @param string $senderFaceURL 发送者头像
|
|
|
|
|
* @param int $sessionType 会话类型
|
|
|
|
|
* @param int $contentType 消息类型
|
|
|
|
|
* @param string $content 消息内容
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function batchSendMsg(string $sendID, string $senderNickname, string $senderFaceURL, int $sessionType, int $contentType, string $content): array
|
|
|
|
|
{
|
|
|
|
|
// 获取管理员token
|
|
|
|
|
$adminToken = Utils::getAdminToken();
|
|
|
|
|
$data = [
|
|
|
|
|
'senderPlatformID' => 0,
|
|
|
|
|
'sendID' => $sendID,
|
|
|
|
|
'senderNickname' => $senderNickname,
|
|
|
|
|
'senderFaceURL' => $senderFaceURL,
|
|
|
|
|
'sessionType' => $sessionType,
|
|
|
|
|
'contentType' => $contentType,
|
|
|
|
|
'content' => ['text' => $content]
|
|
|
|
|
];
|
|
|
|
|
return Utils::send(Url::$batchSendMsg, $data, '批量发送消息失败', $adminToken);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 清空用户消息
|
|
|
|
|
* @param string $userID 用户ID
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function clearMsg(string $userID): array
|
|
|
|
|
{
|
|
|
|
|
// 获取管理员token
|
|
|
|
|
$adminToken = Utils::getAdminToken();
|
|
|
|
|
return Utils::send(Url::$clearMsg, ['userID' => $userID], '清空用户消息失败', $adminToken);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据seq列表删除消息
|
|
|
|
|
* @param string $userID 用户ID
|
|
|
|
|
* @param string $conversationID 会话ID
|
|
|
|
|
* @param array $seqs seq列表
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function delMsg(string $userID, string $conversationID, array $seqs): array
|
|
|
|
|
{
|
|
|
|
|
// 获取管理员token
|
|
|
|
|
$adminToken = Utils::getAdminToken();
|
|
|
|
|
$data = [
|
|
|
|
|
'userID' => $userID,
|
|
|
|
|
'conversationID' => $conversationID,
|
|
|
|
|
'seqs' => $seqs
|
|
|
|
|
];
|
|
|
|
|
return Utils::send(Url::$delMsg, $data, '删除消息失败', $adminToken);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 撤回消息
|
|
|
|
|
* @param string $conversationID 会话ID
|
|
|
|
|
* @param string $seq 消息seq
|
|
|
|
|
* @param string $userID 用户ID
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function revokeMessage(string $conversationID, string $seq, string $userID): array
|
|
|
|
|
{
|
|
|
|
|
// 获取管理员token
|
|
|
|
|
$adminToken = Utils::getAdminToken();
|
|
|
|
|
$data = [
|
|
|
|
|
'conversationID' => $conversationID,
|
|
|
|
|
'seq' => intval($seq),
|
|
|
|
|
'userID' => $userID
|
|
|
|
|
];
|
|
|
|
|
return Utils::send(Url::$revokeMessage, $data, '撤回消息失败', $adminToken);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 发送业务通知
|
|
|
|
|
* @param string $sendID 发送者ID
|
|
|
|
|
* @param string $recvID 接收者ID
|
|
|
|
|
* @param string $title 通知标题
|
|
|
|
|
* @param string $content 通知内容
|
|
|
|
|
* @param string $notificationUrl 通知点击跳转链接
|
|
|
|
|
* @param string $ex 扩展字段
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
2026-01-12 12:42:08 +08:00
|
|
|
public function sendBusinessNotification(string $sendID, string $recvID, array $data,string $type='user'): array
|
2025-11-22 15:31:01 +08:00
|
|
|
{
|
|
|
|
|
// 获取管理员token
|
|
|
|
|
$data = [
|
2026-01-08 05:42:44 +08:00
|
|
|
'sendUserID' => $sendID,
|
2026-01-12 12:42:08 +08:00
|
|
|
'recvUserID' => $type=='user' ? $recvID : '',
|
|
|
|
|
'recvGroupID' => $type=='user' ? '': $recvID,
|
2026-01-08 05:42:44 +08:00
|
|
|
'key' => md5(time()),
|
2026-01-12 12:42:08 +08:00
|
|
|
'data' => json_encode($data),
|
2026-01-08 05:42:44 +08:00
|
|
|
'sendMsg' => true,
|
|
|
|
|
'reliabilityLevel' => 1,
|
2025-11-22 15:31:01 +08:00
|
|
|
];
|
2026-01-08 05:42:44 +08:00
|
|
|
return Utils::send(Url::$sendBusinessNotification, $data, '发送业务通知失败');
|
2025-11-22 15:31:01 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取用户所有会话
|
|
|
|
|
* @param string $userID 用户ID
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function getAllConversations(string $userID): array
|
|
|
|
|
{
|
|
|
|
|
// 获取管理员token
|
|
|
|
|
$adminToken = Utils::getAdminToken();
|
|
|
|
|
return Utils::send(Url::$getAllConversations, ['userID' => $userID], '获取用户所有会话失败', $adminToken);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据会话ID获取会话
|
|
|
|
|
* @param string $userID 用户ID
|
|
|
|
|
* @param string $conversationID 会话ID
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function getConversation(string $userID, string $conversationID): array
|
|
|
|
|
{
|
|
|
|
|
// 获取管理员token
|
|
|
|
|
$adminToken = Utils::getAdminToken();
|
|
|
|
|
$data = [
|
|
|
|
|
'userID' => $userID,
|
|
|
|
|
'conversationID' => $conversationID
|
|
|
|
|
];
|
|
|
|
|
return Utils::send(Url::$getConversation, $data, '获取会话失败', $adminToken);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据会话ID列表获取会话
|
|
|
|
|
* @param string $userID 用户ID
|
|
|
|
|
* @param array $conversationIDs 会话ID列表
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function getConversations(string $userID, array $conversationIDs): array
|
|
|
|
|
{
|
|
|
|
|
// 获取管理员token
|
|
|
|
|
$adminToken = Utils::getAdminToken();
|
|
|
|
|
$data = [
|
|
|
|
|
'userID' => $userID,
|
|
|
|
|
'conversationIDs' => $conversationIDs
|
|
|
|
|
];
|
|
|
|
|
return Utils::send(Url::$getConversations, $data, '获取会话列表失败', $adminToken);
|
|
|
|
|
}
|
|
|
|
|
}
|