Интернет-эквайринг Тинькоф Банк
Через Тинькоф Банк вы можете организовать оплату картами на сайте.
Как это выглядит для пользователя
Форма на сайте или просто кнопка, по которой пользователь переходит к оплате
Далее пользователь переходит на сайт tinkoff или открывается модальное фрейм-окно, где и происходит оплата:
Как реализовать прием оплаты на своем сайте через Тинькоф Банк
1. Подаем заявку на Тинькоф и заводим магазин в кабинете Тинькоф. Инструкция по порядку подключения
2. В настройках тестового терминала в кабинете тинькофф прописываем путь к API уведомления (галочка
Инструкция по настройке терминала - https://www.tinkoff.ru/business/help/business-payments/internet-acquiring/how-use/terminal/
https://falconspace.ru/api/action/tinkoffnotify - пример метода API
3. Копируем виджет на страницу. Код можно взять здесь https://www.tinkoff.ru/kassa/develop/widget/install/
По ссылке можно посмотреть значение параметров. Ключевые:
- frame = true - делает отображение окна оплаты в модальном окне во фрейме
- terminalKey - определяет к какому терминалу относится форма.
- amount - сумма к оплате
- order - номер заказа в нашей системе, по которому мы потом в API методе можем понять, за что именно прошла оплата.
Пример кода:
<style>.payform-tinkoff-row{display:block;margin:1%;width:160px;}</style>
<script src="https://securepay.tinkoff.ru/html/payForm/js/tinkoff_v2.js"></script>
<form name="payform-tinkoff" onsubmit="pay(this); return false;">
<input class="payform-tinkoff-row" type="hidden" name="terminalkey" value="1694009981995DEMO">
<input class="payform-tinkoff-row" type="hidden" name="frame" value="false">
<input class="payform-tinkoff-row" type="hidden" name="language" value="ru">
<input class="payform-tinkoff-row" type="text" placeholder="Сумма заказа" name="amount" value="100" required="">
<input class="payform-tinkoff-row" type="text" placeholder="Номер заказа" name="order" value="126">
<input class="payform-tinkoff-row" type="text" placeholder="Описание заказа" name="description" value="desc3">
<input class="payform-tinkoff-row" type="text" placeholder="ФИО плательщика" name="name" value="fio3">
<input class="payform-tinkoff-row" type="text" placeholder="E-mail" name="email" value="hecrus@mail.ru">
<input class="payform-tinkoff-row" type="text" placeholder="Контактный телефон" name="phone" value="">
<input class="payform-tinkoff-row" type="submit" value="Оплатить">
</form>
В terminalKey указаваем название тестового терминала магазина (можно это оформить через /settings, чтобы потом не нужно было менять в странице).
4. В /settings указываем настройку пароля от терминала tinkoffTerminalPassword (пароль указан на вкладке Терминалы в ЛК Тинькоф).
5. Создаем API метод для приема уведомлений от тинькоф, что платеж прошел (настройки Без токен = ДА, тип вывода = Text).
CREATE PROCEDURE [dbo].[api_tinkoff_notify]
@parameters ExtendedDictionaryParameter READONLY,
@username nvarchar(256)
as
begin
declare @terminalPassword varchar(128) = dbo.as_setting('tinkoffTerminalPassword', '')
/*
InputStream={"TerminalKey":"XXXXXXXX","OrderId":"125","Success":true,"Status":"CONFIRMED",
"PaymentId":3212171195,"ErrorCode":"0","Amount":30000,"CardId":345001666,"Pan":"430000******0777",
"ExpDate":"1122","Token":"8b0e583f997dc9b083bfff2719244566b4ecfa2eb518a1dfc0d622f2ed66c9bf"}
*/
declare @resp varchar(max) = (select top 1 value2 from @parameters where lower([key])= 'inputstream')
declare @t table (TerminalKey varchar(max),
OrderId int,
Success bit,
Status varchar(max),
PaymentId varchar(max),
ErrorCode int,
Amount int,
CardId int,
Pan varchar(max),
ExpDate varchar(max),
Token varchar(max))
insert into @t
SELECT top 1 *
FROM OPENJSON(@resp) WITH (
TerminalKey varchar(max),
OrderId int,
Success bit,
Status varchar(max),
PaymentId varchar(max),
ErrorCode int,
Amount int,
CardId int,
Pan varchar(max),
ExpDate varchar(max),
Token varchar(max)
)
declare @val varchar(max) = '', @token varchar(max) = '', @genToken varchar(max) = '', @status varchar(max), @success bit
--пример: [["Amount": "9855"],["CardId": "322264"],["ErrorCode": "0"],["ExpDate": "1122"],["OrderId": "201709"],["Pan": "430000******0777"],["Password": "xxxxxxxxx"],["PaymentId": "8742591"],["RebillId": "101709"],["Status": "AUTHORIZED"],["Success": "true"],["TerminalKey": "xxxxxxxx"]]
select @val = -- в порядке сортировки Key
cast(Amount as varchar) +
cast(CardId as varchar) +
cast(ErrorCode as varchar) +
ExpDate +
cast(OrderId as varchar) +
Pan +
@terminalPassword +
PaymentId+
Status +
iif(Success=1, 'true', 'false') +
cast(TerminalKey as varchar),
@token = Token,
@status = Status,
@success = Success
from @t
SELECT @genToken = CONVERT(VARCHAR(100),HASHBYTES('SHA2_256',@val),2); -- SHA-256
declare @temp varchar(max) = 'Real token: '+ @token + ', gen token: '+ @genToken + ', val: ' + @val
execute as_print @temp
if(lower(@token) <> lower(@genToken))begin
select 'Wrong token' Msg, 0 Result, 0 errorCode
execute as_print 'TINKOFF INVALID TOKEN'
return
end
if(@success=1 and lower(@status) = 'confirmed')begin
-- выполняем фиксацию факта Платеж подтвержен (пополнение баланса, смена статуса фин операции и т.д.) ....
execute as_print 'TINKOFF Payments is confirmed'
end
/*
вывести в trace начальный полный JSON
declare @s nvarchar(max) = ''
select @s = @s + ',' + isnull([key], 'nokey') + '='+ isnull(value2, '--') from @parameters
execute as_print @s
*/
-- SELECT 1 - вывод метаданных о результате операции метода API
select '' Msg, 1 Result, 0 errorCode
-- SELECT 2 - вывод самих данных в API (в случае проблем проверьте что этот запрос приходит непустой)
--select 1 x1
end
Нюансы:
1. Входной JSON идет в теле запроса (в поле InputStream). Далее мы его разбираем на элемент и помещаем в таблицу @t
2. Чтобы убедиться, что это запрос идет от Тинькоф мы проверяем поле token - на основе пароля и комбинации входящих параметров.
Проверка токена описана здесь - https://www.tinkoff.ru/kassa/dev/payments/#tag/Notifikacii-Merchanta-ob-operaciyah/Notifikacii-po-HTTP(s)/Proverka-tokenov
Если кратко, то формирование токена выглядит так: добавить в параметры Password и исключить Token, взять параметры в алфавитном порядке, сделать конкатенацию в строку значений параметров и извлечь SHA-256 хеш от полученной строки. ВАЖНО! Строки должны быть в varchar(max), а не nvarchar(max) - иначе хеш будет другой!
3. Если параметры success=1 и status=confirmed (и при этом верный токен) - то мы выполняем бизнес операции по фиксации факта прихода на счет.
4. Поле Amount приходит в виде int в копейках (т.е. вместо 800 руб приходи 80000).
Тестирование платежей
На странице Терминала в ЛК Тинькоф можно сделать тестовые оплаты.
Вводим данные теста в свою форму, получаем ожидаемый результат.
После выполнения теста нажимаем Проверить. Если все ок, то будет стоять бедж Пройден у теста.
Полезные ссылки:
- Подробности про Тинькоф Бизнес (открытие счета в Тинькоф)
- Общая информация про интернет-эквайринг Тинькоф
- Общая документация API платежей Тинькоф
Google поиск по нашей документации
- Руководства
- Основа Falcon Space
- Основные компоненты
- Возможности
- Коммуникация с пользователем
- Дизайн, стилизация, юзабилити
- Лендинги
- Универсальный API
- Примеры интеграций Прием платежей через Яндекс.Кассу Онлайн-платежи. Интеграция с Робокассой (платежный шлюз) Zapier интеграция на платформе Falcon Space Интеграция коллтрекинга МАНГО ОФИС (режим Площадка) Интеграция API DaData.ru подсказки по адресам Интеграция API Курсы валют Центрального Банка РФ в веб-платформе Falcon Space Интеграция API Почта РФ Интеграция API Служба доставки СДЭК (CDEK) Интеграция API Служба доставки Деловые линии Интеграция импорт и парсинг файла CSV Интеграция API IpGeoBase Город по IP-адресу Интеграция API DaData.ru Город по IP-адресу Как вычислить расстояние между 2 точками с координатами через Google Maps Сканирование штрихкодов и QR кодов через камеру и с картинок Получение данных контрагента по ИНН Прием платежей на сайте через CloudPayments Как сделать интеграцию с Мой Склад Внедрение подсказок dadata на сайт Вывод точек на карте Яндекс. Интеграция с Яндекс Карты Интеграция с телефонией Zadarma.com Получение данных о контрагенте - интеграция с сервисом ЗаЧестныйБизнес Интеграция с AMO CRM Как импортировать данные в базу CRM из Google Контакты Вход/регистрация через ВКонтакте(vk.com) Интеграция CRM с онлайн чатом на сайте (Replain) Как связать yandex metrika clientID с пользователем на сайте и посмотреть полный путь его по сайту? Телеграм. Работа с файлами Как сделать обработку входящей почты (создание клиента в CRM из Email) Интеграция сайта с ChatGPT (openAI) Интеграция с Яндекс Метрика Интернет-эквайринг Тинькоф Банк Интеграция с платежным шлюзом LifePay Как сделать вебхук для передачи данных с Тильды на Falcon Space Пополнение средств через Yookassa (Юкасса) Тинькофф Банк - уведомление в учетную систему по операциям с расчетным счетом Интеграция с Ютуб. Получение роликов канала Интеграция с Ozon, Wildberries - извлечение статистики Вывод данных из различных удаленных SQL Server через технологию Linked Server
- Каталоги
- Навигация
- Документы
- Дополнительные компоненты
- Продвижение, SEO
- Системные моменты
- Системное администрирование
- HOWTO
- Таблицы
- Формы
- Загрузка файлов, картинок
- Работа с SQL
- HOWTO JS
- HOWTO Верстка
- Решение проблем
Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта