Прием платежей на сайте через интернет-эквайринг Тинькофф

Предварительно, чтобы реализовать оплату заказов на своем сайте через API Интернет-эквайринга банка Тинькофф потребуется индификатор терминала (TerminalKey) и пароль к нему.

Описание всех методов https://www.tinkoff.ru/kassa/develop/api/payments/

Для создания платежа нужно послать POST-запрос на метод «Init», подробное описание полей на https://www.tinkoff.ru/kassa/develop/api/payments/init-description/.

Пример отправки запроса с помощью CURL, с минимальным набором данных. Он создает платеж, продавец получает ссылку на платежную форму и должен перенаправить по ней покупателя:

// Индификатор терминала.
$TerminalKey = 'xxxxxxxxxxxxx';

// Сумма в рублях.
$sum = 300;

// Номер заказа.
$order_id = 123;

$data = array(
	"TerminalKey" => $TerminalKey,
	"Amount" => $sum * 100,
	"OrderId" => $order_id,
	"SuccessURL" => "https://example.com/success",
	"PayType" => 'O',
);
							
$ch = curl_init('https://securepay.tinkoff.ru/v2/Init');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);

$res = json_decode($res, true);
PHP

Пример ответа:

array(
	[Success] => true 
    [ErrorCode] => 0
    [TerminalKey] => xxxxxxxxxxxxx
    [Status] => NEW
    [PaymentId] => 999999999
    [OrderId] => 123
    [Amount] => 30000
    [PaymentURL] => https://securepay.tinkoff.ru/new/xxxxx
)

Далее, нужно сделать перенаправление пользователя на полученную ссылку:

if (!empty($res['PaymentURL'])) {
	// Редирект в платёжную систему.
	header('Location: ' . $res['PaymentURL'], true, 301);
	exit();							
}
PHP

Чтобы получить информацию о платеже, нужно отправить POST-запрос с идентификатором платежа в системе банка и подписью запроса (токен) на метод «GetState». Подробнее на https://www.tinkoff.ru/kassa/develop/api/payments/getstate-description/, формирование подписи – https://www.tinkoff.ru/kassa/develop/api/request-sign/.

// Индификатор терминала.
$TerminalKey = 'xxxxxxxxxxxxx';

// Пароль.
$Password = 'xxxxxxxxxxxxx';

// Идентификатор платежа в системе банка.
$PaymentId = 'xxxxxxxxxxxxx';

// Формирование подписи:
$hash_data = array(
	'TerminalKey' => $TerminalKey,
	'PaymentId'   => $PaymentId,
	'Password'    => $Password,
);	
	
ksort($hash_data);
$hash = implode('', $hash_data);
$hash = hash('sha256', $hash);

// Формирование запроса:	
$data = array(
	"TerminalKey" => $TerminalKey,
	"PaymentId"   => $PaymentId,
	"Token"       => $hash,
);
	
$ch = curl_init('https://securepay.tinkoff.ru/v2/GetState');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
	
$res = json_decode($res, true);
print_r($res);
PHP

Пример ответа:

Array(
	[Success] => 1
    [ErrorCode] => 0
    [Message] => OK
    [TerminalKey] => xxxxxxxxxxxxx
    [Status] => CONFIRMED
    [PaymentId] => xxxxxxxxxxxxx
    [OrderId] => 123
    [Amount] => 30000
)
10.08.2021, обновлено 12.04.2022
7466

Комментарии

, чтобы добавить комментарий.

Другие публикации

Примеры использования cURL в PHP
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
159007
+19
Платежи на сайте через IntellectMoney PHP
Пример PHP-скриптов для оплаты заказов на сайте через экваринг Intellectmoney.
973
0
Оплата заказов на сайте через Робокассу
В данной статье описан процесс оплаты заказа на сайте с помощью Робокассы. Перед тем, как преступить работе над...
12467
+6
Яндекс.Доставка работа с API в PHP
Примеры работы с API Яндекс.Доставки (для заказа перевозки грузов корпоративным клиентам).
3418
+6
Использование API Яндекс Диска на PHP
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,...
45557
+16
Автоматическое сжатие и оптимизация картинок на сайте
Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет...
20000
+7