qeios-lab/orcid-php

ORCID 网络服务库

v0.3.1 2018-10-22 19:14 UTC

This package is auto-updated.

Last update: 2024-09-08 01:50:23 UTC


README

ORCID 的 PHP 库

Build Status Coverage Status StyleCI

此库的目的是为了支持 ORCID OAuth2 认证流程。它也支持基本的个人资料访问,但仍在开发中。根据开发者的需求或其他感兴趣方的请求/贡献,将添加更多功能。

使用方法

OAuth2

3 方 OAuth 授权

要完成 3 方 OAuth 流程,您必须首先将用户重定向到 ORCID 授权页面。

// Set up the config for the ORCID API instance
$oauth = new Oauth;
$oauth->setClientId($clientId)
      ->setScope('/authenticate')
      ->setState($state)
      ->showLogin()
      ->setRedirectUri($redirectUri);

// Create and follow the authorization URL
header("Location: " . $oauth->getAuthorizationUrl());

ORCID 文档中描述的大部分选项(有关自定义用户授权体验的选项,请参阅 http://members.orcid.org/api/customize-oauth-login-screen)都封装在 OAuth 类中。

一旦用户授权您的应用程序,他们将被重定向回您的重定向 URI。从那里,您可以交换授权代码以获取访问令牌。

if (!isset($_GET['code']))
{
	// User didn't authorize our app
	throw new Exception('Authorization failed');
}

$oauth = new Oauth;
$oauth->setClientId($clientId)
      ->setClientSecret($clientSecret)
      ->setRedirectUri($redirectUri);

// Authenticate the user
$oauth->authenticate($_GET['code']);

// Check for successful authentication
if ($oauth->isAuthenticated())
{
	$orcid = new Profile($oauth);

	// Get ORCID iD
	$id = $orcid->id();
}

此示例使用 ORCID 公共 API。还有一个成员 API,但 OAuth 流程本质上相同。

客户端凭证授权

待实现...

个人资料

如上示例所述,一旦通过 OAuth 成功认证,您可以对其他公共/成员 API 进行后续请求。例如

$orcid = new Profile($oauth);

// Get ORCID profile details
$id    = $orcid->id();
$email = $orcid->email();
$name  = $orcid->fullName();

当前个人资料类仅支持有限数量的辅助方法来直接访问个人资料数据中的元素。根据需要,这将进一步扩展。可以通过调用 raw() 方法获取个人资料输出的原始 JSON 数据。

请注意,某些字段(如电子邮件)如果用户没有提供该字段,可能会返回 null。

环境和 API 类型

ORCID 支持两个通用的 API 端点。第一个是他们的公共 API,第二个是为注册的 ORCID 成员(在此场景中,成员资格并不意味着您有一个 ORCID 账户)。默认情况下使用公共 API,并且目前支持库提供的所有功能。但是,您可以通过调用

$oauth = new Oauth;
$oauth->useMembersApi();

如果您明确想使用公共 API,可以通过调用

$oauth = new Oauth;
$oauth->usePublicApi();

ORCID 还支持一个用于测试的沙盒环境。要使用此环境,而不是默认的生产环境,您可以调用以下命令

$oauth = new Oauth;
$oauth->useSandboxEnvironment();

此函数的对应函数,尽管不是必需的,是

$oauth = new Oauth;
$oauth->useProductionEnvironment();