200,'uuid'=>xxx]);失败时返回 false */ public static function send($topic, $message){ return self::sendByProvider(null, $topic, $message); } /** * 按指定服务商发送消息 * @param string|null $provider 服务商名称(aodianyun/aliyun),null 则用配置默认值 * @param string $topic 群组ID * @param string $message 消息体 * @param int $msgType 消息类型(阿里云 MsgType,默认 10001 文本) * @param string $senderId 发送者ID(阿里云必填,奥点云忽略) * @param string $senderMeta 发送者扩展信息 * @param string $msgTid 消息唯一标识 * @return array 兼容历史返回结构:成功返回 ['Flag'=>200, 'uuid'=>xxx, 'msg_tid'=>xxx],失败返回 ['Flag'=>0, 'FlagString'=>error] */ public static function sendByProvider($provider, $topic, $message, $msgType = 10001, $senderId = '', $senderMeta = '', $msgTid = ''){ try { $result = Manager::provider($provider)->send($topic, $message, $msgType, $senderId, $senderMeta, $msgTid); } catch (\Exception $e) { return ['Flag' => 0, 'FlagString' => $e->getMessage()]; } return self::resultToSendArray($result); } /** * 撤回/删除消息(兼容历史接口) * @param string $topic 群组ID * @param string $uuid 消息唯一标识(奥点云 uuid / 阿里云 MsgTid) * @return array|false */ public static function del($topic, $uuid){ return self::delByProvider(null, $topic, $uuid); } /** * 按指定服务商撤回/删除消息 * @param string|null $provider * @param string $topic * @param string $uuid * @return array */ public static function delByProvider($provider, $topic, $uuid){ try { $result = Manager::provider($provider)->del($topic, $uuid); } catch (\Exception $e) { return ['Flag' => 0, 'FlagString' => $e->getMessage()]; } return self::resultToDelArray($result); } /** * 获取分组中的在线用户(兼容历史接口) * @param string $topic * @param int $skip * @param int $num * @return array|false 失败返回 false,成功返回 ['total'=>int, 'list'=>array] */ public static function getOnlineUser($topic, $skip=0, $num=0){ return self::getOnlineUserByProvider(null, $topic, $skip, $num); } /** * 按指定服务商获取在线用户 * @param string|null $provider * @param string $topic * @param int $skip * @param int $num * @return array|false */ public static function getOnlineUserByProvider($provider, $topic, $skip=0, $num=0){ try { $result = Manager::provider($provider)->getOnlineUser($topic, $num, $skip); } catch (\Exception $e) { return false; } if (!$result->isSuccess()) { return false; } $data = $result->data; if (!is_array($data)) { return false; } return [ 'total' => isset($data['total']) ? (int)$data['total'] : 0, 'list' => isset($data['list']) ? $data['list'] : [], ]; } /** * 将服务商 Result 转换为历史 send 接口返回结构 * 兼容奥点云 Dms::sendMsg 的 ['Flag'=>200,'uuid'=>xxx] 格式 * @param ProviderResult $result * @return array */ protected static function resultToSendArray(ProviderResult $result){ if ($result->isSuccess()) { $data = $result->data; $uuid = is_array($data) && isset($data['uuid']) ? $data['uuid'] : ''; $msgTid = is_array($data) && isset($data['msg_tid']) ? $data['msg_tid'] : $uuid; return [ 'Flag' => 200, 'FlagString' => '', 'uuid' => $uuid, 'msg_tid' => $msgTid, ]; } return [ 'Flag' => 0, 'FlagString' => $result->error ? $result->error : '发送失败', ]; } /** * 将服务商 Result 转换为历史 del 接口返回结构 * @param ProviderResult $result * @return array */ protected static function resultToDelArray(ProviderResult $result){ if ($result->isSuccess()) { return [ 'Flag' => 200, 'FlagString' => '', ]; } return [ 'Flag' => 0, 'FlagString' => $result->error ? $result->error : '删除失败', ]; } }