Предварительно, чтобы реализовать оплату заказов на своем сайте через 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);
Пример ответа:
array(
[Success] => true
[ErrorCode] => 0
[TerminalKey] => xxxxxxxxxxxxx
[Status] => NEW
[PaymentId] => 999999999
[OrderId] => 123
[Amount] => 30000
[PaymentURL] => https://securepay.tinkoff.ru/new/xxxxx
)
Далее, нужно сделать перенаправление пользователя на полученную ссылку:
Чтобы получить информацию о платеже, нужно отправить 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);
Пример ответа:
Array(
[Success] => 1
[ErrorCode] => 0
[Message] => OK
[TerminalKey] => xxxxxxxxxxxxx
[Status] => CONFIRMED
[PaymentId] => xxxxxxxxxxxxx
[OrderId] => 123
[Amount] => 30000
)