/tinkoff-auth

Авторизация через Тинькофф API

Primary LanguagePHP

Bitrix

Название папки модуля: tinkoffid

Redirect URI в заявке: https://ваш_домен/bitrix/services/main/ajax.php?action=tinkoffid.authflow.sign

Настройка плагина

Вся настройка плагина производится во вкладке "Настройки" в пункте "Модули"

Вывод кнопки

Для вывода кнопки, необходимо в нужном месте подключить компонент

<?php $APPLICATION->IncludeComponent("tinkoff:id.button","",);?>

WordPress

Redirect URI в заявке: https://ваш_домен/wp-json/tinkoff_auth/v1/callback

Настройка плагина

Вся настройка плагина производится во вкладке "Настройки" в пункте "Тинькофф"

Вывод кнопки

Для вывода кнопки, можно использовать шорткод [tinkoff-button], либо настроить вывод в стандартные места темы через настройки

Standalone

Предварительная настройка

Для начала работы с Tinkoff API необходимо заполнить заявку на подключение на этой странице. После рассмотрения заявки сотрудниками банка будут высланы client_id и client_secret на электронную почту, которая была указана в партнерской анкете.

Одним из пунктов партнерской анкеты является указание параметра redirect_uri. Необходимо создать эндпоинт, доступный по redirect_uri, который заканчивает процесс авторизации путем обмена кода на Access и Refresh токены. В качестве примера, эндпоинт-ссылкой будет https://myintegration.ru/auth/complete, где https://myintegration.ru - страница продукта.

use TinkoffAuth\Config\Auth;

use \TinkoffAuth\Config\State;
use \TinkoffAuth\Services\State\Providers\Session;
use \TinkoffAuth\Services\State\Providers\Cookies;


require_once __DIR__.'/../vendor/autoload.php';

// Настройка данных для авторизации 
$authConfig = Auth::getInstance();
$authConfig->push(Auth::CLIENT_ID, 'client_id');
$authConfig->push(Auth::CLIENT_SECRET, 'client_secret');
$authConfig->push(Auth::REDIRECT_URI, 'https://myintegration.ru/auth/complete')

// Настройка места хранения стейта
$stateConfig = State::getInstance();
$stateConfig->push(State::PROVIDER, Session::class)
$stateConfig->push(State::PROVIDER, Cookies::class)

Получение ссылки для авторизации

Для получения ссылки на авторизацию, необходимо указать redirect_uri в методе getAuthURL($redirect_uri = null, $scope_parameters = []). При необходимости, можно указать массив scope_parameters. Подробнее можно почитать тут

use TinkoffAuth\Facades\Tinkoff;

$tinkoff = new Tinkoff();

$linkWithoutScope = $tinkoff->getAuthURL('https://myintegration.ru/auth/complete');

$linkWithScope = $tinkoff->getAuthURL('https://myintegration.ru/auth/complete', [
    "inn" => "9999980892", 
    "kpp" => "999991001" 
]);

Отображение кнопки

Чтобы отобразить кнопку, можно вызвать класс AuthButton указав в нем ссылку на страницу авторизации

//  Опционально можно указать размер кнопки
$buttonSize = \TinkoffAuth\View\AuthButton\AuthButton::BUTTON_SIZE_SMALL;
$buttonSize = \TinkoffAuth\View\AuthButton\AuthButton::BUTTON_SIZE_DEFAULT;
$buttonSize = \TinkoffAuth\View\AuthButton\AuthButton::BUTTON_SIZE_LARGE;

$button = new \TinkoffAuth\View\AuthButton\AuthButton($link, $buttonSize);
echo $button;

Обработка данных после авторизации

Упрощенный режим

Для авторизации необходимо вызвать функцию auth() фасада TinkoffAuth\Facades\Tinkoff::class. В ответ придет класс FunctionMediator, который содержит статус авторизации и данные об обшибке, либо данные о пользователе

use \TinkoffAuth\Facades\Tinkoff;
use \TinkoffAuth\Config\Api;

$tinkoff = new Tinkoff();

$mediator = $tinkoff->auth();
if (!$mediator->getStatus()) {
    $errorMessage = $mediator->getMessage();
    // Обработать ошибку
}

// Массив всех данных с ключами из \TinkoffAuth\Config\Api
$credentials = $mediator->getPayload();
// Основные данные пользователя
$userinfo = $credentials[Api::SCOPES_USERINFO]

// Обработать данные пользователя

Расширенный режим

На указанный redirect_uri придет запрос вида. Чтобы его обработать, можно воспользоваться методами ниже

https://myintegration.ru/auth/complete?state=ABCxyz&code=c.1aGiAXX3Ni&session_state=hXXXXXXY3kgs3nx0H3RTj3JzCSrdaqaDhU6lS8XXXXX.i4kl6dsEB1SQogzq0Nj0
use \TinkoffAuth\Config\State;
use \TinkoffAuth\Services\State\Providers\Session;
use \TinkoffAuth\Services\State\Providers\Cookies;

use \TinkoffAuth\Config\Api as ApiConfig;

// Создаем объект для работы с API
$api = new Api();
// Указываем необходимость проверки State
$validateState = true;

// Данные, пришедшие на текущий URL + проверка State
$authParams = $api->getAuthParams($validateState);

// Получение Access Token по возможности + проверка State
$accessToken = $api->getAccessToken($validateState);

// Сохранение Access Token
$authConfig->push(Auth::ACCESS_TOKEN, $accessToken);

// Проверка Scopes 
if (!$api->validateScopes($accessToken)) {
    // Если доступов недостаточно
}

// Можно получить краткую информацию о пользователе
$userinfoShort = $api->userinfo($accessToken);
if (count($userinfoShort) === 0) {
    // Если основных пользовательских данных не найдено
}

// Либо полную, исходя из доступынх scopes
$userinfo = $api->userinfoFull($accessToken);
if (count($userinfo[ApiConfig::SCOPES_USERINFO]) === 0) {
    // Если основных пользовательских данных не найдено
}

// Обработать пользовательские данные