justcommunication-ru/tinkoff-acquiring-api-client

Tinkoff Acquiring API PHP 客户端

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

This package is auto-updated.

Last update: 2024-09-09 15:40:01 UTC


README

Latest Stable Version Latest Unstable Version Total Downloads License

来自 Tinkoff 的互联网收单 API 的 PHP 客户端

安装

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://: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