Bitcoin Forum
November 09, 2024, 05:56:47 AM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Рабочий пример приема BTC на сайте с исходным  (Read 10506 times)
Lexiko (OP)
Sr. Member
****
Offline Offline

Activity: 503
Merit: 283


View Profile
January 18, 2012, 07:46:10 PM
Last edit: January 20, 2012, 01:56:52 AM by Lexiko
 #1

Решил написать свой собственно пример организации пополнения баланса используя BitCoin.
Скрипт написан на php с использованием немного доработанной обертки для bitcoind api bitcoin-php (https://github.com/mikegogulski/bitcoin-php) , код скрипта-примера размещен тут https://github.com/Lexiks/Bitpay.
Bitcoind демон размещен на бесплатном аккаунте, любезно предоставляемым для тестовых целей облачным хостингом Amazon AWS (http://aws.amazon.com/free/).
Пример работы скрипта находится тут: http://bitpay.tk/

Целью всей этой затеи является создание простого и понятного примера демонстрации возможностей Bitcoin по организации приема платежей.
Следующим шагом будет написание подробной и понятной инструкции , поясняющей код и объясняющей основные принципы работы механизмов биллинга на основе Bitcoin.

Описание работы демки:
Переходим по ссылке http://bitpay.tk/ , вводим любое имя , жмем кнопку вход.
Далее попадаем в админку. В случае, если такое имя уже есть (т.е. пользователь ранее заходил под ним), выводится адрес для оплаты, если же это первый вход, создается аккаунт и выводится номер кошелька.
Номер кошелька навсегда закрепляется за конкретным аккаунтом и не меняется. Т.е. все биткоины, которые будут поступать на этот Btc адрес, не зависимо от плательщика и суммы, будут зачисляться на на баланс для этого аккаунта.

Кнопка "Обновить BTC баланс" проверяет не поступили ли btc на адрес пользователя, если поступили, выводит суммой.
"Обновить USD баланс" выводит значение долларового баланса пользователя (хранится в mysql базе и изменяется после вывода баланса).

"Перевести BTC в USD" проверяет, есть ли на на счету клиента BTC, если есть, перемножает данную сумму на курс (задается в настройках) и добавляет к USD балансу, обнуляя при этом остаток на BTC аккаунте пользователя.
BTC же со счета пользователя переводятся на консолидированный адрес сервиса (который находится в этом же кошельке, поэтому этот перевод является внутренним и не требует подтверждения сетью).

"Зачислить немного тестовых монет" - перебрасывает 1/5 из остатка на общем аккаунте сервиса, на аккаунт клиента, для того, чтобы можно было попробовать как работает пополнение USD баланса , без пополнения адреса.

Также можете закинуть BTC непосредственно со своего кошелька на кошелек аккаунта (все собранные средства пойдут в фонд голодающих на пиво Smiley) .

По ссылке "Просмотреть остатки по всем аккаунтам на кошельке" можно посмотреть остатки по всем аккаунтам кошелька.
WalletBank - основной аккаунт (произвольно выбранный), на который переводятся BTC, когда списываются с аккаунта пользователя (с него же и выдаются тестовые монеты).
Если извне ни кто ничего не зачислит, число монет в обороте в сумме по всем аккаунтам меняться не будет.

Список транзакций показывает все движения по аккаунту.

Примечания:
Все транзакции , перемещения и остатки в BTC хранятся/обрабатываются непосредственно в BTC базе (которая располазается ан Amazon и с которой связывемся о протоколу RPC).
Mysql база в данном случае используется только для хранения USD баланса.
Аккаунты можете создавать новые , просто перейдя по ссылке [Изменить имя] , и введя любое другое имя. Если ввденного не будет в базе, оно будет создано автоматом и для него сгенерирован соответсвующий адрес.
Авторизации понятно тут никакой нету, сделано для демонстрации, если будете использовать на рабочем проекте, разумеется , прикрутите нормальную идентификацию.

По поводу создания собственного сервера в амазоновском облаке, читаем тут http://habrahabr.ru/blogs/hosting/135713/ , а тут тема на данном форуме по этому поводу https://bitcointalk.org/index.php?topic=58729.0 , если что спрашивайте.

Исходники распространяются под лицензией "берите кто хотите и делайте с ними все что хотите" Smiley .
Любые пожелания, указания на ошибки и неточности принимаются с большой благодарностью.
Также буду очень признателен, если кто проведет аудит кода и укажет на слабые места и неточности, которые могут привести на практике к проблемам. До тестов на реальном проекте пока недошел.

Скриншоты:



Lexiko (OP)
Sr. Member
****
Offline Offline

Activity: 503
Merit: 283


View Profile
January 18, 2012, 08:08:09 PM
 #2

Кто подскажет, как узнать сколько подтверждений у последней поступившей на аккаунт суммы. Хочется сделать чтобы не просто выводило баланс в BTC , а например, при 0 блоков, выводило баланс серым цветом , а в скобочках кол-во подтверждений 0. После появления 1-ого подтверждения , должно подсвечиваться нормальным цветом и разблокироваться кнопка "Вывод баланса".
N.Z.
Sr. Member
****
Offline Offline

Activity: 427
Merit: 250



View Profile
January 18, 2012, 09:25:08 PM
 #3

А какой сакральный смысл в кнопке "Перевести BTC в USD"? Вывести вроде нельзя, обратно тоже не переведешь. Просто чтоб было, для демонстрации?
Lexiko (OP)
Sr. Member
****
Offline Offline

Activity: 503
Merit: 283


View Profile
January 18, 2012, 09:57:17 PM
 #4

А какой сакральный смысл в кнопке "Перевести BTC в USD"? Вывести вроде нельзя, обратно тоже не переведешь. Просто чтоб было, для демонстрации?
Да, для демонстрации.

Вообще задумывал сделать возможность вернуть btc на тот адрес, с которого они поступили, но в данном больше сделано для наглядности примера.

В рабочем варианте можно сделать автоматическую проверку и после появления btc на аккаунте, автоматически их обменивать на основную валюту сервиса.

Опционально можно сделать привязку к текущему курсу BTC ,А также автоматическое выставление ордера на продажу поступивших BTC через MTgox. Раз в час например всю сумму скидывать на кошелек привязанный к бирже и выставлять ордера на продажу по текущей цене. Могу реализовать, это не сложно, хотя в данном случае цель немного иная.
promankirov
Full Member
***
Offline Offline

Activity: 181
Merit: 101


View Profile
January 19, 2012, 04:20:19 AM
 #5

Спасибо за пример! Отправил на пиво  (зачислилось мгновенно) Roll Eyes

Quote
Хочется сделать чтобы не просто выводило баланс в BTC , а например, при 0 блоков, выводило баланс серым цветом , а в скобочках кол-во подтверждений 0. После появления 1-ого подтверждения , должно подсвечиваться нормальным цветом
Это нужная вещь. Может быть только нормальным цветом то что уже имеет подтверждения, а рядом "+0.хх BTC(0)" то что еще не подтверждено.

P.S. Нашел небольшую опечатку - "зачислятся на на баланс"
Lexiko (OP)
Sr. Member
****
Offline Offline

Activity: 503
Merit: 283


View Profile
January 19, 2012, 07:20:04 PM
Last edit: January 20, 2012, 01:54:43 AM by Lexiko
 #6

Спасибо за пример! Отправил на пиво  (зачислилось мгновенно) Roll Eyes
Спасибо за пиво. Smiley

Quote from: promankirov link=topic=60144.msg701221#msg701221
Quote
Хочется сделать чтобы не просто выводило баланс в BTC , а например, при 0 блоков, выводило баланс серым цветом , а в скобочках кол-во подтверждений 0. После появления 1-ого подтверждения , должно подсвечиваться нормальным цветом
Это нужная вещь. Может быть только нормальным цветом то что уже имеет подтверждения, а рядом "+0.хх BTC(0)" то что еще не подтверждено.
Сделал. Теперь в списке транзакций выводится количество подтверждений (в случае , если их 0, тогда строка подсвечивается серым).
Также баланс теперь показывает сумму подтвержденных и неподтвержденных транзакций отдельно. теперь пользователь может видеть, что его сумма засветилась, но ожидает подтверждения. Вывести неподтвержденные btc нельзя. Это успакаивает.
Количество подтверждений, необходимых для того, чтобы транзакция засчиталась
задается константой MIN_CONFIRMATIONS_COUNT. В примере достаточно хотя бы 1 подтверждения, чтобы стала доступной опция вывода баланса.
Для параноиков можно увеличить это значение до 6. Если же поставить 0, тогда возможность перевода баланса будет доступна практически моментально. Хотя это немного опасно.

Quote from: promankirov link=topic=60144.msg701221#msg701221
P.S. Нашел небольшую опечатку
Спс, поправил.
Lexiko (OP)
Sr. Member
****
Offline Offline

Activity: 503
Merit: 283


View Profile
January 20, 2012, 01:54:02 AM
 #7

Сверстал дизайн. Вот теперь не стыдно и людям показать. Smiley
Теперь это все выглядит вот так:





Напомню, вживую поиграться можно тут  тут а совершенно свободно скачать исходники тут

Уже практически 99% работы все сделал, можно брать и пользоваться. Максимум пару часов на догонку и можно принимать BTC на своем сайте.
promankirov
Full Member
***
Offline Offline

Activity: 181
Merit: 101


View Profile
January 20, 2012, 03:50:17 AM
 #8

Quote
Сверстал дизайн.
Отлично! Ждем статью на Хабре!

Подправь текст на сайте
* Данный сайт bitpay.tk не является рабочим сервисом! Он создан для демонстрации организации приема платежей используя Bitcoin . Все исходники можно скачать тут и совршенно свободно использовать их на своем сайте.
Однако весь функционал является полностью рабочим и вы можете тут испытать работоспособность сериптов (создавать новые аккаунты или входить в имеющиеся, зачислять на них BTC виртуальным тестовым или реальным переводом, производить зачисление BTC->USD. Приятного тестирования!
Lexiko (OP)
Sr. Member
****
Offline Offline

Activity: 503
Merit: 283


View Profile
January 20, 2012, 05:54:20 AM
 #9

Quote from: promankirov link=topic=60144.msg703193#msg703193
Подправь текст на сайте
Вроде подправил. Smiley

Сделал английскую локализацию и возможность копировать кошелек в буффер обмена одним кликом.
N.Z.
Sr. Member
****
Offline Offline

Activity: 427
Merit: 250



View Profile
January 20, 2012, 12:04:12 PM
 #10

Немного оффтоп, хоть вроде и приятный Smiley
Lexiko (OP)
Sr. Member
****
Offline Offline

Activity: 503
Merit: 283


View Profile
January 20, 2012, 10:55:34 PM
 #11

Немного оффтоп, хоть вроде и приятный Smiley
Спасибо!

Сделал небольшое описание http://bitpay.tk/index.php?action=about
и вот такую графическую схемку работы скрипта


Курс теперь берется автоматически из тикера MtGox, кэшируется раз в минуту и обновляется вместе с балансами.
Обмен BTC в USD баланс происходит автоматически по этому курсу.
Если курс запросить не удалось, или он почему-то выше установленного в настройках потолка, курс берется из настроек.

Незнаю , насколько такая схема безопасна. Но в любом случае, наверное, лучше статического курса.
suppp
Sr. Member
****
Offline Offline

Activity: 288
Merit: 251



View Profile
January 26, 2012, 10:49:00 AM
 #12

симпатичный пример, спасибо
twitter bootstrap везде Smiley
Lexiko (OP)
Sr. Member
****
Offline Offline

Activity: 503
Merit: 283


View Profile
January 27, 2012, 02:06:27 AM
Last edit: January 27, 2012, 11:28:09 AM by Lexiko
 #13

симпатичный пример, спасибо
twitter bootstrap везде Smiley
Всегда пожалуйста.

Немного обновил скрипт и демку, добавил довольно интересную штуку. Теперь баланс и транзакции обновляются моментально, после того, как блок был найден.

В исходниках теперь пример серверной и клиентской части , реализованной на socket.io (подобную схему используется bitcoinmonitor) .

Способ может не самый идеологически верный - зато универсальный!
На сервере под nodejs работает серверная часть , которая периодически просматривает debug.log в папке с базой bitcoind демона. Как только в логе появляется запись о новом блоке, тут же эмитится событие через socket.io и все подключенные клиенты в тот же момент получают уведомление. А клиентский скрипт получив данное сообщение сразу обновляет баланс и список транзакций.

Можно было конечно перекомпилировать bitcoind , чтобы он куда-то стучал при появлении нового блока или повесить демона под той же nodejs . Но все это дополнительные сложности в которых нет смысла имхо. Даже если учесть что тут что-то не сработает когда-то , поллинг все равно обновит данные, так что совершенно не критичная секция.

Чуть позже сделаю и курс через сокеты.

P.S. что самое интересное, демка работает даже на обычной читалке Kindle 4  Cheesy С вэбсокетами и всеми ajax скриптами.
evorios
Newbie
*
Offline Offline

Activity: 30
Merit: 0


View Profile
February 01, 2012, 01:06:23 PM
 #14

Изменились квоты в лучшую сторону, как теперь обстоит дело?
Lexiko (OP)
Sr. Member
****
Offline Offline

Activity: 503
Merit: 283


View Profile
February 01, 2012, 01:56:19 PM
 #15

Изменились квоты в лучшую сторону, как теперь обстоит дело?
Вы про амазон ? В лимиты почти укладываюсь, плачу только за 300 тыс операций ввода/вывода по 3 цента ежесуточно, с учетом бесплатных месячных 2 млн, будет 60-80 центов в мес обслуживание этого дела - шара!

Есть еще вариант сервак держать под nodejs на соответствующем хостинге, но реально думаю дешевле 3-4 баксов в мес не будет, так что на Амазоне пока самый выгодный вариант размещения. После окончания бесплатного периода можно или на другую кредитку перерегать или платить около 3-4$ в мес, что тоже в общем вполне себе доступно.
hazarun
Legendary
*
Offline Offline

Activity: 2128
Merit: 1019


View Profile
July 23, 2013, 10:12:38 PM
 #16

Чуть позже сделаю и курс через сокеты.
P.S. что самое интересное, демка работает даже на обычной читалке Kindle 4  Cheesy С вэбсокетами и всеми ajax скриптами.

Так понимаю, развития проект больше не получил. Кто нибудь пользуется  подобным ?
anonymous_acc
Sr. Member
****
Offline Offline

Activity: 322
Merit: 250



View Profile
September 25, 2013, 03:12:14 PM
 #17

Заделайте в joomla такую http://developer.joomla.org/ ? Что бы плугином была в дефолтной сборке?

BTC: 1HRcwjxG2H5vSnNo5ZbGqMxRPFWJk6dwW9
mironau
Newbie
*
Offline Offline

Activity: 18
Merit: 0


View Profile
January 18, 2018, 07:28:34 PM
 #18

Тема ещё актуальна?
Gagarin-btc
Newbie
*
Offline Offline

Activity: 29
Merit: 0


View Profile
March 05, 2018, 12:38:22 PM
 #19

Тема ещё актуальна?
Поддерживаю вопрос.
Есть ли вообще современные похожие примеры с приемом и отправкой биткоина и эфира в свободном доступе типа топикастера
Andriy Volosh
Newbie
*
Offline Offline

Activity: 77
Merit: 0


View Profile
March 06, 2018, 07:02:59 PM
 #20

https://www.google.com.ua/search?q=прием+BTC+на+сайте
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!