Интернет-эквайринг Тинькоф Банк
Через Тинькоф Банк вы можете организовать оплату картами на сайте.
Как это выглядит для пользователя
Форма на сайте или просто кнопка, по которой пользователь переходит к оплате
Далее пользователь переходит на сайт 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 (Юкасса) Тинькофф Банк - уведомление в учетную систему по операциям с расчетным счетом Интеграция с Ютуб. Получение роликов канала
- Каталоги
- Навигация
- Документы
- Дополнительные компоненты
- Продвижение, SEO
- Системные моменты
- Системное администрирование
- HOWTO
- Таблицы
- Формы
- Загрузка файлов, картинок
- Работа с SQL
- HOWTO JS
- HOWTO Верстка
- Решение проблем
Falcon Space
Это снижение стоимости владения
за счет меньшего количества людей для поддержки и узкого стека разработки. Про снижение стоимости владения продуктом
Это быстрое внесение изменений
по ходу эксплуатации программы. Как создается функционал на платформе
Это простой удобный интерфейс
адаптация под мобильные устройства. Про юзабилити платформы