Очень часто есть необходимость подключить эквайринг Тинькофф к маленькому лендингу. Проблема в том, что по каким-то причинам в Тинькофф решили не разрабатывать собственный 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.