post($uri, $options)->getBody()->getContents(); } /** * 发送API请求 * @param string $path API路径 * @param array $data 请求数据 * @return array 响应数据 */ public static function send(string $path, array $data): array|bool { if($path != Url::$getAdminToken){ $token = Utils::getAdminToken(); } $url = Url::buildUrl($path); $res = self::request($url, $data, $token); $res = json_decode($res, true); if($res['errCode'] !==0 ){ cp('=============================调试信息====================================='); cp($url); cp(json_encode($data)); cp($res); cp('=============================end====================================='); throw new \Exception($res['errMsg'],$res['errCode']); //throw new \Exception($res['errDlt'],$res['errCode']); } if(isset($res['data'])){ return $res['data']; } return true; try { $url = Url::buildUrl($path); //cp($url); return json_decode(self::request($url, $data, $token), true); } catch (GuzzleException $e) { return ['errCode' => $e->getCode(), 'errMsg' => $errMsg, 'errDlt' => $e->getMessage()]; } catch (ValidatorException $e) { return ['errCode' => 400, 'errMsg' => $errMsg, 'errDlt' => $e->getMessage()]; } } /** * 获取管理员Token * 如果缓存中没有,则自动获取并缓存 * @param string $userID 管理员ID * @return string|null */ public static function getAdminToken(string $userID = 'imAdmin'): ?string { $tokenManager = self::getTokenManager(); $token = $tokenManager->getAdminToken($userID); if (!$token) { // 从服务器获取新的Token $result = self::send(Url::$getAdminToken, [ 'userID' => $userID, 'secret' => Config::getSecret() ]); $token = $result['token']; // 使用API返回的过期时间 $expireTimeSeconds = $result['expireTimeSeconds'] ?? null; // 保存token,使用API返回的过期时间 $tokenManager->saveAdminToken($userID, $token, $expireTimeSeconds); } return $token; } /** * 获取用户Token * 如果缓存中没有,则自动获取并缓存 * @param string $userID 用户ID * @param string $platformID 平台ID * @return string|null */ public static function getUserToken(string $userID, string $platformID = 'android'): ?string { $tokenManager = self::getTokenManager(); $token = $tokenManager->getUserToken($userID); if (!$token) { // 从服务器获取新的Token $adminToken = self::getAdminToken(); if (!$adminToken) { return null; } $result = self::send(Url::$getUserToken, [ 'userID' => $userID, 'platformID' => self::getPlatformId($platformID) ]); $token = $result['token']; // 使用API返回的过期时间 $expireTimeSeconds = $result['expireTimeSeconds'] ?? null; // 保存token,使用API返回的过期时间 $tokenManager->saveUserToken($userID, $token, $expireTimeSeconds); } return $token; } /** * 清除Token缓存 * @param string $userID 用户ID * @param bool $isAdmin 是否为管理员Token * @return bool */ public static function clearToken(string $userID, bool $isAdmin = false): bool { return self::getTokenManager()->clearToken($userID, $isAdmin); } public static function getPlatformId($name=''): int{ if(ctype_digit($name)){ return (int)$name; } $arr = [ 'ios' => 1, 'android' => 2, 'windows' => 3, 'macos' => 4, 'web' => 5, 'mp-weixin' => 6, 'linux' => 7, 'androidpad' => 8, 'ipad' => 9, 'admin' => 10, ]; $name = strtolower($name); if(isset($arr[$name])){ return $arr[$name]; } return 2; } }