justcommunication-ru/tinkoff-acquiring-api-client

v1.0.2 2024-04-09 14:41 UTC

This package is auto-updated.

Last update: 2024-10-09 15:48:58 UTC


README

Latest Stable Version Latest Unstable Version Total Downloads License

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