justcommunication-ru / tinkoff-acquiring-api-client
Tinkoff Acquiring API PHP Client
Requires
- ext-json: *
- guzzlehttp/guzzle: ^6.2 || ^7.0
- psr/log: *
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-10-09 15:48:58 UTC
README
PHP Клиент для интернет-эквайринга от Tinkoff
Установка
composer require justcommunication-ru/tinkoff-acquiring-api-client
Использование
use JustCommunication\TinkoffAcquiringAPIClient\TinkoffAcquiringAPIClient; $client = new TinkoffAcquiringAPIClient('<terminal-key>', '<secret>');
<terminal-key>
— Идентификатор терминала. Выдается продавцу банком при заведении терминала
<secret>
— ключ для подписи запросов
Далее вызываются доступные методы:
Init – создание платежа
GetState – текущий статус платежа
Confirm – подтверждение платежа
Cancel – отмена платежа
Методы
Init
Метод создает платеж: продавец получает ссылку на платежную форму и должен перенаправить по ней покупателя
use JustCommunication\TinkoffAcquiringAPIClient\API\InitRequest; use JustCommunication\TinkoffAcquiringAPIClient\Exception\TinkoffAPIException; // Запрос на создание платежа на 100 рублей и внутренним номером `order-1234` $initRequest = new InitRequest(10000, 'order-1234'); // необязательные параметры $initRequest ->setLanguage($initRequest::LANGUAGE_EN) ->setIP('192.168.1.1') ->setDescription('Описание транзакции') ->setRecurrent('2') ->setCustomerKey('3') ->setNotificationURL('https://domain.tld/_api/notifications/124') ->setSuccessURL('https://domain.tld/_api/success/124') ->setFailURL('https://domain.tld/_api/fail/124') ->setPayType($request::PAY_TYPE_ONE_STAGE) ->setData([ 'Foo' => 'bar' ]) ; $initRequest->addData('Bar', 'baz'); try { $response = $client->sendInitRequest($initRequest); //$response->getPaymentId() // идентификатор платежа header('Location: ' . $response->getPaymentURL()); // перенаправляем пользователя на страницу оплаты exit; } catch (TinkoffAPIException $e) { // обработка ошибки }
GetState
Метод возвращает текущий статус платежа.
use JustCommunication\TinkoffAcquiringAPIClient\API\GetStateRequest; use JustCommunication\TinkoffAcquiringAPIClient\Exception\TinkoffAPIException; use JustCommunication\TinkoffAcquiringAPIClient\Model\Payment; $payment_id = '1234'; //Идентификатор платежа в системе банка $request = new GetStateRequest($payment_id); try { $response = $client->sendGetStateRequest($request); switch ($response->getStatus()) { case Payment::STATUS_CONFIRMED: break; case Payment::STATUS_CANCELED: // платеж был отменен break; } } catch (TinkoffAPIException $e) { // обработка ошибки }
Confirm
Метод подтверждает платеж и списывает ранее заблокированные средства.
use JustCommunication\TinkoffAcquiringAPIClient\API\ConfirmRequest; use JustCommunication\TinkoffAcquiringAPIClient\Exception\TinkoffAPIException; $payment_id = '1234'; //Идентификатор платежа в системе банка $request = new ConfirmRequest($payment_id); try { $response = $client->sendConfirmRequest($request); } catch (TinkoffAPIException $e) { // обработка ошибки }
Cancel
Метод отменяет платеж.
use JustCommunication\TinkoffAcquiringAPIClient\API\CancelRequest; use JustCommunication\TinkoffAcquiringAPIClient\Exception\TinkoffAPIException; $payment_id = '1234'; //Идентификатор платежа в системе банка $request = new CancelRequest($payment_id); try { $response = $client->sendCancelRequest($request); } catch (TinkoffAPIException $e) { // обработка ошибки }
Настройка HTTP клиента
Способ №1: передача массива параметров
use JustCommunication\TinkoffAcquiringAPIClient\TinkoffAcquiringAPIClient; $client = new TinkoffAcquiringAPIClient('token', 'secret', [ 'proxy' => 'tcp://localhost:8125', 'timeout' => 6, 'connect_timeout' => 4 ]);
Список доступных параметров: https://docs.guzzlephp.org/en/stable/request-options.html
Способ №2: передача своего \GuzzleHttp\Client
Настройте своего http клиента:
// Http клиент с логгированием всех запросов $stack = HandlerStack::create(); $stack->push(Middleware::log($logger, new MessageFormatter(MessageFormatter::DEBUG))); $httpClient = new \GuzzleHttp\Client([ 'handler' => $stack, 'timeout' => 6 ]);
и передайте его аргументом конструктора:
use JustCommunication\TinkoffAcquiringAPIClient\TinkoffAcquiringAPIClient; $client = new TinkoffAcquiringAPIClient('token', 'secret', $httpClient);
либо сеттером:
use JustCommunication\TinkoffAcquiringAPIClient\TinkoffAcquiringAPIClient; $client = new TinkoffAcquiringAPIClient('token', 'secret'); $client->setHttpClient($httpClient);
Логирование
В $client
можно передать свой Psr\Logger
.
$client->setLogger($someLogger);
По-умолчанию логирование отключено
Тесты
Запустить тесты можно командой:
vendor/bin/phpunit