PHP code example of webmasterolegan / tbank-payments
1. Go to this page and download the library: Download webmasterolegan/tbank-payments library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
webmasterolegan / tbank-payments example snippets
use TBank\Payments\Enum\EnvironmentEnum;
use TBank\Payments\TBankClient;
use TBank\Payments\DTO\Request\InitPaymentRequestDto;
use TBank\Payments\DTO\Shared\{ReceiptDto, ReceiptItemDto};
use TBank\Payments\Enum\Fiscal\{TaxationEnum, VatEnum};
$client = new TBankClient(
terminalKey: 'YOUR_TERMINAL_KEY',
password : 'YOUR_PASSWORD',
environment: EnvironmentEnum::Production,
);
use TBank\Payments\DTO\Shared\ShopDto;
$request = new InitPaymentRequestDto(
amount : 150000,
orderId: 'order-2024-001',
shops : [
new ShopDto(
shopCode: '10001',
amount : 100000,
name : 'Футболка синяя',
fee : 2500,
),
new ShopDto(
shopCode: '10002',
amount : 50000,
name : 'Доставка',
),
],
);
use TBank\Payments\DTO\Request\ConfirmRequestDto;
$confirm = $client->payment()->confirm(
new ConfirmRequestDto(paymentId: '123456789')
);
use TBank\Payments\DTO\Request\CancelRequestDto;
$cancel = $client->refund()->cancel(
new CancelRequestDto(paymentId: '123456789')
);
$cancel = $client->refund()->cancel(
new CancelRequestDto(paymentId: '123456789', amount: 50000)
);
use TBank\Payments\Enum\PaymentStatusEnum;
$state = $client->status()->getState('123456789');
if ($state->status === PaymentStatusEnum::Confirmed) {
// Платёж подтверждён
}
if ($state->status->isSuccessful()) {
// то же через метод enum
}
use TBank\Payments\DTO\Request\AddCardRequestDto;
use TBank\Payments\Enum\CardCheckTypeEnum;
$result = $client->card()->addCard(
new AddCardRequestDto(
customerKey: 'user-42',
checkType : CardCheckTypeEnum::Hold,
)
);
header('Location: ' . $result->paymentUrl);
use TBank\Payments\DTO\Request\ChargeRequestDto;
$response = $client->payment()->charge(
new ChargeRequestDto(
paymentId: $init->paymentId,
rebillId : $rebillIdFromWebhook,
),
);
use TBank\Payments\DTO\Request\GetQrRequestDto;
use TBank\Payments\Enum\QrDataTypeEnum;
$qr = $client->sbp()->getQr(
new GetQrRequestDto(
paymentId: $init->paymentId,
dataType : QrDataTypeEnum::Payload,
),
);
echo $qr->data; // payload или SVG при QrDataTypeEnum::Image
use TBank\Payments\DTO\Request\AddCustomerRequestDto;
$client->customer()->add(
new AddCustomerRequestDto(
customerKey: 'user-42',
email : '[email protected]',
phone : '+79001234567',
),
);
$customer = $client->customer()->get('user-42');
$client->customer()->remove('user-42');
use TBank\Payments\DTO\Request\AddAccountQrRequestDto;
use TBank\Payments\Enum\{AccountQrStatusEnum, NotificationTypeEnum, QrDataTypeEnum};
$binding = $client->sbp()->addAccountQr(
new AddAccountQrRequestDto(
description: 'Привязка счёта для автоплатежей',
dataType : QrDataTypeEnum::Payload,
),
);
// Показать QR: $binding->data
// Сохранить $binding->requestKey для проверки статуса
$state = $client->sbp()->getAddAccountQrState($binding->requestKey);
if ($state->status === AccountQrStatusEnum::Active) {
// Счёт привязан; AccountToken придёт в webhook (NotificationType=QR)
}
if ($notification->notificationType === NotificationTypeEnum::Qr) {
saveAccountToken($notification->accountToken);
}
use TBank\Payments\DTO\Request\GetQrBankListRequestDto;
use TBank\Payments\DTO\Shared\DeviceDto;
use TBank\Payments\Enum\DeviceTypeEnum;
$banks = $client->sbp()->getQrBankList(
new GetQrBankListRequestDto(
device: new DeviceDto(DeviceTypeEnum::Mobile, 'Android'),
),
);
foreach ($banks->bankList as $bank) {
echo "{$bank->bankName}: {$bank->nspkBankId}\n";
}
use TBank\Payments\DTO\Request\ChargeQrRequestDto;
$response = $client->sbp()->chargeQr(
new ChargeQrRequestDto(
paymentId : $init->paymentId,
accountToken: $accountTokenFromWebhook,
),
);
use TBank\Payments\DTO\Request\ResendRequestDto;
use TBank\Payments\Enum\NotificationTypeEnum;
$result = $client->notifications()->resend(
new ResendRequestDto(
paymentId : '123456789',
notificationType: NotificationTypeEnum::Payment,
),
);
echo $result->count; // сколько уведомлений отправлено повторно
$client = new TBankClient(
terminalKey : 'YOUR_TERMINAL_KEY',
password : 'YOUR_PASSWORD',
retryAttempts : 3, // до 3 попыток при NetworkException
retryDelayMs : 200, // экспоненциальная задержка: 200, 400, 800… мс
connectTimeout : 10, // таймаут установки соединения (сек)
reuseConnection : true, // persistent cURL share (FrankenPHP, RoadRunner)
);
use TBank\Payments\Http\{Psr18HttpClient, RetryingHttpClient};
use TBank\Payments\Enum\EnvironmentEnum;
$psr17 = new \Nyholm\Psr7\Factory\Psr17Factory();
$baseUrl = EnvironmentEnum::Production->baseUrl();
$client = new TBankClient(
terminalKey: 'YOUR_TERMINAL_KEY',
password : 'YOUR_PASSWORD',
environment: EnvironmentEnum::Production,
httpClient : new RetryingHttpClient(
inner : new Psr18HttpClient(
client : $psr18Client,
requestFactory: $psr17,
streamFactory : $psr17,
baseUrl : $baseUrl,
),
maxAttempts : 3,
delayMs : 200,
),
);