Очень часто есть необходимость подключить эквайринг Тинькофф к маленькому лендингу. Проблема в том, что по каким-то причинам в Тинькофф решили не разрабатывать собственный SDK для эквайринга. И каждый раз это вставляет палки в колёса. В статье привожу простой и понятный пример, который работает всегда.
Особенно сложно получается с генерацией токена/подписи запроса, так как в документации есть два способа генерации. Более того, в примере кода на PHP допущена ошибка. Что в сумме каждый раз создаёт мне головную боль. Публикую самую простую реализацию этой функции.
function createSignature($args) //$args - массив параметров запроса (функция автоматических из отфильтрует)
{
$token = '';
$args['Password'] = 'ЗДЕСЬ ВАШ ПАРОЛЬ ТЕРМИНАЛА';
ksort($args);
foreach ($args as $key => $arg) {
if (!is_array($arg) && $key != 'Token') {
if (is_bool($arg)) $token .= $arg ? 'true' : 'false';
else $token .= $arg;
}
}
return hash('sha256', $token);
}
Для любознательных код с комментариями.
$token = ''; // Создаём пустую строку для дальнейшей конкатенации в неё
$args['Password'] = 'ЗДЕСЬ ВАШ ПАРОЛЬ ТЕРМИНАЛА'; //Добавляем в параметры
ksort($args); //Сортируем массив по ключам
foreach ($args as $key => $arg) { //Перебираем значения массива
if (!is_array($arg) && $key != 'Token') { //Исключаем все объекты и поле Token, оно тоже не нужно, хотя в документации об это не написано
if (is_bool($arg)) $token .= $arg ? 'true' : 'false'; //Этого момента нет нигде. Если значение булевое - то и представлять его нужно как true или false
else $token .= $arg; //Все остальные параметры - строки или числа просто конкатенируем
}
}
Надеюсь, когда-нибудь всё же соберусь с мыслями и напишу SDK для их API. Хотя бы на PHP.