avito/oauth2-avito

Avito OAuth 2.0 客户端提供商,用于 The PHP League OAuth2-Client

dev-master 2023-06-13 06:04 UTC

This package is auto-updated.

Last update: 2024-09-13 08:51:58 UTC


README

本包提供了 Avito 对 PHP League OAuth 2.0 Client 库的 OAuth 2.0 协议支持。

安装

可以使用 composer 进行安装

composer require avito/oauth2-avito

使用

使用方式与 The League 的 OAuth 客户端相同,使用 Avito\OAuth2\Client\Provider\Avito 作为提供者。

处理授权代码 (Authorization Code)

$provider = new Avito([
    'clientId' => 'YOUR_CLIENT_ID',
    'clientSecret' => 'YOUR_CLIENT_SECRET',
    'redirectUri' => 'http://your-redirect-uri',
]);

if (isset($_GET['code']) && $_GET['code']) {
    //Вызов функции setBaseDomain требуется для установки контектс аккаунта.
    if (isset($_GET['referer'])) {
        $provider->setBaseDomain($_GET['referer']);
    }
    
    $token = $provider->getAccessToken('authorization_code', [
        'code' => $_GET['code']
    ]);    
    
    //todo сохраняем access, refresh токены и привязку к аккаунту и возможно пользователю

    /** @var \Avito\OAuth2\Client\Provider\AvitoResourceOwner $ownerDetails */
    $ownerDetails = $provider->getResourceOwner($token);

    printf('Hello, %s!', $ownerDetails->getName());
}

更新访问令牌

$provider = new Avito([
    'clientId' => 'YOUR_CLIENT_ID',
    'clientSecret' => 'YOUR_CLIENT_SECRET',
    'redirectUri' => 'http://your-redirect-uri',
]);

//todo получение токена из хранилища

$provider->setBaseDomain($token['baseDomain']);
/**
 * Проверяем активен ли токен и делаем запрос или обновляем токен
 */
if (time() >= $token['expires']) {
	/**
	 * Получаем токен по рефрешу
	 */
	try {
		$accessToken = $provider->getAccessToken(new League\OAuth2\Client\Grant\RefreshToken(), [
			'refresh_token' => $token['refreshToken'],
		]);

		//todo сохраняем новые access, refresh токены и привязку к аккаунту и возможно пользователю

	} catch (Exception $e) {
		die((string)$e);
	}
}

//todo повторяем исходный запрос

网站按钮

为了方便,可以在网站上放置按钮以简单安装创建的集成。

<div class="button"></div>
<script 
    class="Avito_oauth"
    charset="utf-8"
    data-client-id="xxxxxx-client-id-xxxxxx"
    data-title="Добавить в Avito"
    data-compact="false"
    data-class-name="className"
    data-color="red"
    data-state="random string"
    src="https://www.Avito.ru/auth/button.js"
></script>

示例

在此存储库中有一个名为 example.php 的文件,它实现了简单的授权逻辑、保存令牌以及执行请求。要使用它,需要在文件中创建提供者时指定正确的值,以及集成中的 Redirect URI,该 URI 应指向您的服务器上的此文件调用。接下来,可以通过转到 example.php 页面进行测试,之后将显示一个按钮,用于打开 Avito 应用程序的授权模态窗口。获取权限后,您将在屏幕上看到用户名。如果添加 GET 参数 - request=1,则将使用之前保存的令牌执行获取账户信息的请求。