avito / oauth2-avito
Avito OAuth 2.0 客户端提供商,用于 The PHP League OAuth2-Client
dev-master
2023-06-13 06:04 UTC
Requires
- php: >=7.1 || >=8.0
- ext-json: *
- league/oauth2-client: ^2.6
Requires (Dev)
- phpunit/phpunit: ~4.5
- squizlabs/php_codesniffer: ^3.5
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,则将使用之前保存的令牌执行获取账户信息的请求。