zkillboard/eveonlineoauth2

v0.2 2021-10-10 19:42 UTC

This package is auto-updated.

Last update: 2024-08-28 19:04:15 UTC


README

请先阅读

在使用此类之前,您必须在此处将您的应用程序注册到 CCP

https://developers.eveonline.com/applications/

在那里,您可以注册您应用的名称和描述,提供回调 URL,以及您想要请求的范围。完成此操作后,您将获得用于与 Eve Online SSO 一起工作的客户端 ID 和 secretKey。

安装

我建议使用 PHP 的流行包管理器

composer require zkillboard/eveonlineoauth2

依赖关系

EveOnlineSSO 需要安装 curl 扩展。EveOnlineSSO 还将安装以下内容

  • ircmaxell/random-lib - 用于生成加密安全的状态值
  • aura/session - 一款出色的会话管理库。强烈推荐。

实现

此代码创建的目的是使 EveOnlineSSO 的使用非常简单。一旦您获得客户端 ID 和 secretKey,您就可以如此实例化 EveOnlineSSO

$sso = new EveOnlineSSO($clientID, $secretKey, $callbackURL, $scopes, $userAgent);

$clientID, $secretKey, $callbackURL 和 $userAgent 都是以字符串形式。$scopes 参数是数组,默认为空数组。如果未指定 $userAgent,则默认为 $callbackURL。

实例化后,您可以检索用户使用 Eve Online SSO 登录所需的 URL

$loginURL = $sso->getLoginURL($session);

$session 可以是 PHP 的 $_SESSION,或者 Aura\Session\Segment 的实例。可以通过 PR 添加更多会话处理库。

典型的 Web 应用程序将然后将用户重定向到此登录 URL。此示例将使用 PHP 的 header 命令,但我建议使用 Slim 等框架。

header("Location: $loginURL");

在这里,您失去了控制权,因为用户正在与 CCP 验证他们的身份,并选择要将哪个角色传递回您的应用程序。一旦他们完成这些步骤,CCP 认证服务器将用户重定向回您的回调 URL。在这里,您需要进行几个步骤以获取用户信息。

$sso = new EveOnlineSSO($clientID, $secretKey, $callbackURL, $scopes, $userAgent);
$code = filter_input(INPUT_GET, 'code');
$state = filter_input(INPUT_GET, 'state');
$userInfo = $sso->handleCallback($code, $state, $session);

结果 $userInfo 数组将包含以下键及其适当的值

characterID
characterName
scopes
tokenType
refreshToken
accessToken
ownerHash

请注意,访问令牌在创建后的 20 分钟内有效。如果您的 accessToken 已过期,您可以使用 refreshToken 获取新的 accessToken

$sso->getAccessToken($refreshToken);

请注意 目前,上述调用将返回一个字符串。这 很快改变,并返回一个数组。CCP 将在某个时候轮换刷新令牌,上述调用将返回新的刷新令牌。将取决于您的代码来处理新的刷新令牌。

doCall

doCall 方法不一定与 SSO 有关,但提供以便方便地访问认证的 Eve Online。doCall 可以处理 GET、POST、PUT、DELETE 和 OPTIONS。

我们将从一个简单的 GET 请求开始

$result = $sso->doCall($url, $fields, $accessToken);

doCall 有一个第四个字段,默认为 'GET',但可以是 GET、POST、PUT、DELETE 或 OPTIONS

$result = $sso->doCall($url, $fields, $accessToken, 'OPTIONS');
$result = $sso->doCall($url, $fields, $accessToken, 'POST');

为舰队设置 MOTD 和自由移动的示例

$result = $sso->doCall("https://esi.evetech.net/latest/fleets/1043511252862/", ["motd" => "Hi Mom", "isFreeMove" => true], $accessToken, 'PUT');

甚至可以删除一个编队

$result = $sso->doCall("https://esi.evetech.net/latest/fleets/1043511252862/wings/2053611252862/squads/3108711252862/", [], $accessToken, 'DELETE');

每个调用都将结果作为字符串返回,需要由您的应用程序进行 json_decode 以转换为对象

$jsonObject = json_decode($result);

或转换为数组

$jsonArray = json_decode($result, true);

这些调用也可以作为调用 ESI API 的实用程序,适用于 ESI API 调用的范围。这就是为什么 doCall 默认不返回 JSON,留给开发人员以他们喜欢的方式处理返回的数据。

这就是全部!这些简单的调用将使您能够快速开始使用Eve Online的SSO并使用ESI。

错误

如果curl调用因任何原因失败,它将抛出异常。我建议您使用try/catch块正确地围绕代码处理任何异常。Eve Online ESI API可能会因各种原因而关闭或无响应(尤其是在维护期间)。

问题

  • 我试了您的示例,但我得到了一个找不到类的错误

您可以在代码开头放置一个use语句

use zkillboard\eveonlineoauth2\eveonlinesso;

或者在实例化时完全限定类名

$sso = new \zkillboard\eveonlineoauth2\EveOnlineSSO($clientID, $secretKey, $callbackURL, $scopes);
  • $userInfo没有返回refreshToken

如果您不提供任何作用域,或者只请求publicData作用域,那么调用基本上仅用于身份验证,不需要refreshToken,因此认证服务器不会提供refreshToken。