Здравствуйте, дорогие хабрачитатели!
Появилась недавно задача подключить к одному интернет-магазину оплату криптовалютой. Причем не только популярными биткоинами, но и такими валютами, о которых мне раньше и слышать не приходилось. Реализовывать полноценный функционал взаимодействия с каждой криптовалютой отдельно, задача не из простых. Если для того же биткоина есть библиотеки, позволяющие начать работу практически из коробки (но без допиливания и танцев с бубном, как показывает практика, не обходится), то, например, для dogecoin нужно писать все с нуля. Так как данный вид оплаты для сайта не предполагался как основной, а скорее как фишка для рекламы и раскрутки, то и бюджет не предполагал крупной разработки. Было принято решение посмотреть в сторону агрегаторов. Остановились на сервисе Cryptonator. Ни в коем случае не рекламирую данный сервис, но по соотношению качества и простоты API к сумме комиссий за обработку платежей, он показался наиболее подходящим. К тому же вывод средств магазином предполагался в рублях, а не в валюте, которой оплатили заказ. Выбор остановили на 7 валютах из предлагаемых 15-ти.
Итак, что мы имели на старте разработки. Интернет-магазин на Drupal 7 Commerce (не спрашивайте, откуда такое чудо, так исторически сложилось) и REST-сервис криптонатора. Вот их нам и нужно было подружить. Механизм взаимодействия предполагался следующий:
- Покупатель собирает корзину заказа, итоговая сумма формируется в рублях;
- На странице оплаты выбирается «Криптовалюта» и в списке отмечается подходящая валюта;
- Из криптонатора через API запрашивается обменный курс и пользователю выводится сумма заказа в выбранной криптовалюте;
- После подтверждения пользователь перенаправляется на страницу оплаты криптонатора;
- В случае успешной оплаты (проверка через нотификацию и опрос сервиса) переводим заказ в обработку.
Для друпала был написан модуль, желающие могут воспользоваться. Модуль загружен в официальный друпаловский репозиторий.
Кажется, что все просто. Но простота разбилась о нововведения в 54-ФЗ с июля 2017 года. Про это уже много слов было сказано на разных площадках, но если вкратце, для тех, кто пропустил или далек от темы интернет-коммерции: после оплаты в интернет-магазине, покупатель должен получить чек, а данные о покупке автоматом отправляются в налоговую инспекцию. В случае нарушения юридическим лицам грозят серьезные штрафы.
На помощь пришел опыт одного фермерского кооператива для оффлайн продаж. К ребятам даже приходила проверка прокуратуры по вопросу приема оплаты криптовалютой, но нарушений не нашла. У кооператива решение простое: клиент оплачивает заказ криптовалютой, а кассир вносит в кассу наличные. Пробивается чек, который покупатель тут же получает, а данные о покупке отправляются в налоговую через ККТ. Но как применить схему к онлайн платежам и электронным чекам?
Тут начинается второй этап внедрения оплаты криптовалютой. К слову, сам магазин подключен к онлайн-кассе, которая и выполняет необходимые операции: чек и уведомление налоговой о покупке. Установленный модуль оплаты на сайте – от известного банка, где юридическое лицо (владелец магазина) имеет счет. Для интеграции криптовалют в 54-ФЗ, пришлось модернизировать этот самый друпаловский модуль приема платежей. А именно добавить функцию рекуррентных платежей. Как убедить банк подключить данную функцию к личному кабинету юридического лица – тема для отдельной большой истории. В итоге, пройдя все проверки, получилось привязать одну электронную карту для совершения платежей в автоматическом режиме. Схема оплаты криптовалюты пополнилась следующими шагами:
- Как только платеж в криптовалюте подтвержден, то с привязанной карты списывается сумма заказа в рублях.
- Информация о платеже отправляется в онлайн кассу. Вместе с ней передаются данные покупателя, которые он оставил при оформлении заказа;
- Электронный чек формируется кассой по обычной схеме и содержит данные именно покупателя, информация о держателе карты, которой произведена оплата, в нем не фигурирует;
- Корректные данные о покупке улетают в налоговую инспекцию;
- Все довольны: покупатель получил чек, налоговая — отчет.
Исправленный друпаловский модуль для рекуррентных платежей не выкладываю, так как внесли только несколько доработок, а в целом функционал разработан банком-владельцем.
Новый способ оплаты был успешно запущен, полет пока нормальный!
Если кому-то интересны технические подробности по реализации, готов ответить на вопросы.
Автор: тащит всю команду