Jump to content

[2.1.5 - 2.3.7] Bitcoin платежный модуль


Recommended Posts

Приветствую,

 

Ради интереса решил потратить вечер выходных и зарелизить рабочий модуль оплаты через платежную систему Bitcoin.

 

post-68-0-54970300-1477750374.png

 

Оффтоп:

  1. Первый раз писал такой сложный модуль заточенный для Simpla
  2. Первый раз писал модуль оплаты для Simpla
  3. Код запутанный и сложный, я много работал с криптовалютой и постарался предусмотреть все возможные подводные камни.
  4. И самое главное - код рабочий!
  5. Нужен curl на сервере

Чтобы не держать демон на сервере + всю базу блокчейна (привет всем кто в теме!) мы будем использовать бесплатный API от сервиса Block.io.

 

Регистрируемся там на свой почтовый ящик, внимательно запоминаем и сохраняем все данные.

 

Войдя в кабинет нажимаем на кнопку Show API Keys

post-68-0-37555700-1477750547_thumb.png

И копируем API ключ для Bitcoin.

 

Скачиваем и заливаем файлы на сервер: BTCPay-Simpla.rar

 

Заходим в админ.панель, создаем новый метод оплаты и заходим в его настройки.

 

post-68-0-26651800-1477750818_thumb.png

 

  1. Указываем свой API KEY
  2. Указываем валюту
  3. Корректировка цены - это насколько % мы будем изменять актуальный курс Bitcoin учитывая что он прыгает и изменяется каждую секунду
  4. Сколько времени мы ожидаем оплату - по сути это кеширование курса, соответственно цены товара, кошелька для оплаты и другой информации. Важно: кешируется все в папку /payment/BTCPay/temp - на моем сервере для папки temp необходимо было выставить владельца apache и права 777 для успешной работы
  5. Заполняем почту для уведомлений.

Пример кешированого файла: Имеет завание "номерзаказа.txt", когда человек нажимает на кнопку что произвел оплату он переименовывается для крон файла в "номерзаказа.check"

 

Пример файла "номерзаказа.txt"

post-68-0-26117800-1477751383_thumb.png

 

Файлы которые нужно изменить вручную:

  1. BTCPaycron.php - $work_directory = "payment/BTCPay"; - проверить ли верный путь
  2. payment/BTCPay/security.php - написать свой уникальный произвольный security ключ

После настройки вот как все выглядит:

 

post-68-0-72972800-1477751667_thumb.png

Как видим там есть таймер который мы установили в настройках модуля в админ.панели Simpla.

Я рекомендую устанавливать значение на 1200 (20 минут) - этого как раз достаточно.

 

После нажатия на кнопку "Я оплатил, проверить поступление средств"

post-68-0-49917400-1477751796_thumb.png

Файл "номерзаказа.txt" переименовывается в "номерзаказа.check" и им уже будет заниматься крон файл - BTCPaycron.php

 

Крон файл берет из файла "номерзаказа.check" сумму к оплате и сверяет ее с блокчейном по апи.

Я указал что если сумма оплаты будет >= суммы оплаты - чтобы заказ засчитывался оплаченным.

 

Сделал имеено >= т.к. попросту человек из-за комиссии может отправить сумму больше чем нужно.

 

Сам крон 1 раз в Х минут (смотря как вы установите) будет в течение часа проверять поступление средств и дожидаться 2 подтверждений транзакции. Только тогда будет передан запрос в callback с информацией что заказ оплачен и покупателю также как и вам придет уведомление на почту.

 

У себя я установил крон так: 

*/08 * * * * curl http://site.com/BTCPay_cron.php >/dev/null 2>&1

 

Если в течение часа - подтверждения транзакции не будет - "номерзаказа.check" файл будет удален, а при заходе по ссылке на заказ у пользователя появится вновь форма оплаты с обновленной информацией для оплаты в зависимости от курса. Сам номер кошелька для оплаты будет таким же, изменится только сумма (btc) к оплате исходя из обновленного курса.

 

На заметку: у Blockio можно создавать на бесплатном аккаунте до 100 кошельков. Соответственно нужно будет время от времени удалять не используемые кошельки (старых заказов) и переносить балансы на основной кошелек в той же системе Block.io или на любой из своих кошельков - тут дело за вами.

 

Для новых версий > 2.1.5 - нужно просто сравнить callback.php файл с другой платежной системы и возможно подправить 2-3 строки.

 

UPD: Сравнил с callback.php из новой версии, вроде бы все одинаково, работать будет и на новых версиях

 

С меня все. Вроде бы ничего не забыл :)

Edited by xavior
Link to post
Share on other sites

Обновил платежный модуль: btcpayv2.rar

 

В настройках теперь указывается дополнительно:

  1. Кол-во подтверждений транзакции (ранее было 2) теперь можно указывать в настройках
  2. Время ожидания подтв.транзакции - также указывается в секундах. Для 2 подтв. я рекомендую устанавливать 3600 (1 час)

post-68-0-96217000-1477827957_thumb.png

 

Также были устранены мелкие баги при работе с модулем, доработан платежный интерфейс.

 

post-68-0-28615500-1477827997_thumb.png

 

 

P.S. Систему за 5-20 минут можно элементарно дописать под Dogecoin / Litecoin и любые альтернативные криптовалюты, если вдруг появится в этом необходимость - говорите, не стесняйтесь, сделаю  :)

Edited by xavior
Link to post
Share on other sites

Делаю "как для себя" по этому мигом еще один апдейт:

 

  1. В случае если не возможно получить курс валюты в национальной валюте через bitpay.com - используется 2й API сервис cryptonator.com - на нем курс всегда выше рыночного, сделал ему доп. корректировку.
  2. Добавлена проверка если курс не доступен.
  3. Исправлена проверка если получение номера кошелька не доступно по API.

btcpayv3.rar

 

Link to post
Share on other sites

Благодарю за совет, обдумаю, т.к. код не очень идеальный там внутри :)

 

Мне кажется что мой модуль оплаты бы отлично подошел для людей которые продают цифровые товары (в т.ч. и доработки для Simpla) но скорее всего просто никто не хочет связываться с Bitcoin.

Link to post
Share on other sites

Мне кажется что мой модуль оплаты бы отлично подошел для людей которые продают цифровые товары (в т.ч. и доработки для Simpla) но скорее всего просто никто не хочет связываться с Bitcoin.

Очень хорошая задумка и шаг к развитию криптовалют. Просто они у нас еще не очень развиты, к сожалению...

Link to post
Share on other sites

Очень хорошая задумка и шаг к развитию криптовалют. Просто они у нас еще не очень развиты, к сожалению...

 

Начинают развиваться, просто вы возможно не знаете (имею ввиду скрывают)

 

Пример из Украины:

 

 

Еще один украинский нардеп в своей е-декларации указал биткоины в качестве принадлежащих ему активов. Им оказался председатель Интернет-партии Украины Дмитрий Голубов.

 

Как указано в поданной Голубовым декларации, он владеет 4376 биткоинами (75,969 млн гривен), которые были приобретены 22 ноября 2012 года.

 

или еще один кадр :)

 

 

В электронной декларации народного депутата Алексея Мушака от Блока Петра Порошенко среди прочих сбережений указано 465 биткоинов. По сегодняшнему курсу это около 8 млн гривен.
Link to post
Share on other sites
  • 3 months later...

Спасибо за полезный модуль. После оплаты, когда производишь проверку вылезает - 

 

Warning: rename(payment/BTCPay/temp/62.txt,payment/BTCPay//temp/62.check): No such file or directory in /home/veloxped/public_html/payment/BTCPay/BTCPay.php on line 34

 

Не подскажите, что не так?

Link to post
Share on other sites

И неправильно рассчитывается в биткоинах сумма заказа. Сумма заказа 100 дол, а в Биткоинах получается 1.04 биткоина, а должно быть 0.104.

Link to post
Share on other sites

1. проверьте ли в папке создается файл 62.check, возможно на папке не проставлены права, укажите 777

 

2. Возможно из-за того, что у вас основная валюта USD и производится деление, для теста проверьте ли ошибка возникает если валюта RUB или UAH

Edited by xavior
Link to post
Share on other sites

1. Файл присутствует. Права установлены 777. Меня смущает что в пути до файла два слеша //. Это может быть причиной? Пример:

Warning: rename(payment/BTCPay/temp/68.txt,payment/BTCPay//temp/68.check): No such file or directory in /home/veloxped/public_html/payment/BTCPay/BTCPay.php on line 34

 

2. По второму пункту, изменил на рубли, также отображается неверно. Вместо 0.1 биткоин, выставляется счет на 1 биткоин. 

 

Буду благодарен, если поможете решить эти вопросы.

Link to post
Share on other sites
  • 2 months later...

Здравствуйте, сделал по инструкции.

 

Можете посмотреть еще ли что-то пишется в логах сервера ?

 

+ Проверить ли curl включен

 

Насколько я вижу, в вашем случае не считается сумма к оплате в BTC исходя из того, что не получается "скачать" курс и соответственно произвести расчет

 

То же самое - QR код не верный, не получается достать номер кошелька для оплаты.

 

= Проблема явно в сURL библиотеке если вы все по инструкции сделали

Edited by xavior
Link to post
Share on other sites

Можете посмотреть еще ли что-то пишется в логах сервера ?

 

+ Проверить ли curl включен

 

Насколько я вижу, в вашем случае не считается сумма к оплате в BTC исходя из того, что не получается "скачать" курс и соответственно произвести расчет

 

То же самое - QR код не верный, не получается достать номер кошелька для оплаты.

 

= Проблема явно в сURL библиотеке если вы все по инструкции сделали

Заранее Спасибо!!

И извиняюсь, новичёк в этой сфере. Где должны храниться логи?

cURL Вроде работает, т.к. пробовал его выключить и были совсем другого рода ошибки.

Как вы и сказали, проблема в получении курса валюты.

Edited by GodlikeAnon
Link to post
Share on other sites

Заранее Спасибо!!

И извиняюсь, новичёк в этой сфере. Где должны храниться логи?

cURL Вроде работает, т.к. пробовал его выключить и были совсем другого рода ошибки.

Как вы и сказали, проблема в получении курса валюты.

 

Ошибка на последнем скрине связана исключительно с тем что модуль работает на локальном Вашем пк, на сервере / хостинге ее не должно быть.

 

Насчет cURL - не скажу, так как скорее всего не пользовался Вашим локальным сервером.

 

Попробуйте тестировать непосредственно на хостинге. Там все должно быть норм.

 

У меня сходу все норм было на IspManager хостинге (только опять таки curl включал) и на локальном сервере OpenServer (https://ospanel.io)

Link to post
Share on other sites

Ошибка на последнем скрине связана исключительно с тем что модуль работает на локальном Вашем пк, на сервере / хостинге ее не должно быть.

 

Насчет cURL - не скажу, так как скорее всего не пользовался Вашим локальным сервером.

 

Попробуйте тестировать непосредственно на хостинге. Там все должно быть норм.

 

У меня сходу все норм было на IspManager хостинге (только опять таки curl включал) и на локальном сервере OpenServer (https://ospanel.io)

 

Понял, Спасибо! :)

Link to post
Share on other sites
  • 1 month later...

А с правовой точки зрения, в РФ, можно ли принимать платежи в Биткоинах? Есть ли нюансы какие для работы возможно с бухгалтерской точки зрения ? 

Link to post
Share on other sites
  • 1 month later...

сделал по инструкции, вроде все работает но картинка QR-код чет сильно маленькая получается, а на мобильных устройствах вообще пропадает.



почему так? как победить?

С размером картинки на десктопе проблему решил правкой файла BTCPay/page.php

 

А вот на мобильном картинка QR-кода так и не появилась.

Edited by xikarx
Link to post
Share on other sites
  • 2 years later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...