Принцип работы с эквайрингом для Tinkoff банк - у себя на сайте вы генерируете запрос с данными отправителя: терминал, пароль, токен и данными по товарам и заказу. Затем массив отправляете по URL, указанному банком, если запрос успешно обработан, то в ответ получаете короткую ссылку для оплаты. При переходе по ссылке, открывается окно для ввода данных по карте. Покупатель вводит данные на стороне банка и отправляет их на проверку, если банк одобрил операцию, то срабатывает переадресация, например на ваш сайт, где можно обработать ответ от банка. В ответе будет передан номер заказа, оправленный в банк в самом начале, по этому номеру можно понять, что оплата прошла и поменять статус заказа на "оплаченный" и предпринять какие-то действия связанные с этим. В случае, если операция не одобрена банком, то можно оставить стандартный ответ банка пользователю и никуда не переадресовывать. Ссылку же на магазин банк покажет автоматически. Переадресация на все случаи настраивается отдельно в личном кабинете банка.
Для начала работы с API нужно у себя объявить константы для класса:
// Tinkoff
define( 'BANK_API_URL', 'https://securepay.tinkoff.ru/v2/'); // URL банка для обмена
define( 'BANK_DOMAIN', 'securepay.tinkoff.ru'); // домен банка
define( 'BANK_TERMINAL_KEY', '111111111111'); // номер терминала из личного кабинета
define( 'BANK_TERMINAL_SECRET', 'top_secret'); // пароль к терминалу
define( 'SHOP_TAXATION', 'usn_income'); // вид налогообложения магазина из списка $taxation
define( 'BANK_TOKEN', 'aBrA.kaDabra.Shvabra'); // токен, сгенерированный в личном кабинете
define( 'TAX_DELIVERY', 'vat20'); // вид НДС доставки, из списка $tinkoffVats
define( 'SHOP_TYPE_TAX', 'none'); // вид НДС магазина, из списка $tinkoffVats
Пример ответа банка успешной оплаты [$_REQUEST]:
Array (
[Success] => true
[ErrorCode] => 0
[Message] => None
[Details] => {
[Amount] => 110055
[MerchantEmail] => contact@ваш-сайт.ru
[MerchantName] => Merchant Bender
[OrderId] => 33 // номер заказа в вашем магазине
[PaymentId] => 11111111// номер платежа Tinkoff
[TranDate] =>
[BackUrl] => https://ваш-сайт.ru
[CompanyName] => ИП Бендер Сгибальщик
[EmailReq] => contact@ваш-сайт.ru
[PhonesReq] => 9998883333
[PHPSESSID] => 5a6e8d53eb6e6f9dcd5e51a4fb5c5365
[hash] => 03e7b3c96221254538a57b609b9393c2
}
)
Если при проведении транзакции произошла ошибка, то банк вернёт ответ с параметром [Success] = false и будет отсутствовать [PaymentId], что является индикатором успешной транзакции и имеет уникальный номер.
Суммы в запросе нужно указывать в копейках.
function __construct(){
...
$this->tinkoff = new tinkoff(BANK_TERMINAL_KEY,BANK_TERMINAL_SECRET,$kernel);
...
}
...
public function getOrderPayURL($id){
return $this->tinkoff->getPaymentUrl($id); // $id - номер заказа в вашем магазине
}
Ссылка генерируется при каждом запросе разная, так что нет смысла её сохранять в базе, если оплата не произошла сразу.
Файлы можно скачать и доработать под свой проект, на особо "популярные" движки плагины можно найти на страницах банка.