July 28, 2021

Приймаємо оплату в bitcoin: Частина перша, теоретична

Приймаємо оплату в bitcoin: Частина перша, теоретична

Інтернет повний статей про те, яке прекрасне майбутнє готує нам blockchain, як це "стильно, модно і інноваційно ". Однак інформації, як практично скористатися всією цією пишністю, вкрай мало. Спробуємо частково заповнити цю прогалину.

Розглянемо основні віхи великого шляху на прикладі інтеграції bitcoin як спосіб прийому платежів.

Припустимо ви - розробник, і ваш просунутий і небідна замовник, начитавшись про те як круто приймати платежі в криптовалюта, прийшов до вас з простенької проханням - "А прикрути-ка нам біткоіни!".

Для початку спробую відбити у вас бажання займатися цим невдячною справою.

Ось неповний список проблем, з якими ви зіткнетеся:

-постійно мінливий курс

-час проходження транзакції по мережі

-повне відсутність контролю над сумою, яку відправляє покупець

-відсутність виразного і прозорого механізму, який дозволить просто організувати відстеження платежу

Але давайте уявимо, чисто теоретично, що замовник готовий миритися з усіма цими та ще десятком інших проблем, і відкрутитися від нього не вийшло.

Тоді для початку розглянемо, як, власне, миприйматимемо платежі. Як завжди, є як мінімум два шляхи. Перший, відносно простий, мало чим відрізняється від інтеграції, наприклад, PayPal або Privat24. Скористатися готовим сервісом, наприклад - bitpay. Сервісів таких чимало, багато з них, крімbitcoin, дозволяють приймати кілька різних криптовалюта. Все прозаїчно і досить просто, документація і приклади є найчастіше на сайті сервісу в достатньому обсязі.

Але ми не шукаємо легких шляхів, так? До того ж суму, виставлену наполегливій замовнику, потрібно відпрацювати (або зробити вигляд, що відпрацювали).

Тому розглянемо другий шлях, повний труднощів, проблем і неочевидних рішень.

Плюс його в тому, що осилив його один раз, ви освоїте не тільки кілька рівнів морських лайок, але і значно глибше зрозумієте, як організовані криптовалюта і що вони дозволяють реалізувати.

У звичайному випадку, при інтеграції сферичного в вакуумі платіжного шлюзу, послідовність дій (з незначними деталями) виглядає приблизно наступним чином.

Користувач вибрав потрібні йому товари,додав їх в корзину і натиснув заповітну кнопку "купити". Заповнив усі необхідні поля, такі як адреса доставки, телефон, адреса електронної пошти, і нарешті добрався до оплати. Тут починається трохи магії.

Програмне забезпечення сайту продавця формуєспеціальну форму, найчастіше іменується SCI (Shopping Cart interface). Після кліка по кнопці "Оплатити" ця форма перенаправить покупця на сайт платіжної системи (наприклад PayPal), із заздалегідь заданими даними про платіж. Очевидно це буде як мінімум - номер замовлення, сума до оплати і, ймовірно, якийсь примітка до платежу, наприклад "Інвойс за тенісні м'ячики №00012".

Користувач входить під своїми обліковими даними іпідтверджує, що він дійсно хоче здійснити оплату. У разі, якщо у нього достатньо коштів, всі дані введені коректно і немає проблем з передачею грошей, відбувається безпосередньо оплата. У разі успішної оплати, платіжний шлюз відправляє повідомлення сервера продавця, яке включає суму, час оплати і номер рахунку, який був оплачений. Додатково можуть бути передані довільні дані, але для нашого прикладу це не настільки важливо. В цей же час сам покупець перенаправляється назад на сайт продавця, де отримує урочисте привітання з успішною оплатою і обіцянку вислати товар ось прямо зараз.

Що нам важливо в цій послідовності?

Три ключові моменти.

Перше - сума оплати задається продавцем.

Друге -платеж відбувається з досить точної ідентифікацією за який саме замовлення.

І третє - повідомлення, яке отримує сервер продавця практично неможливо підробити.

Така система сформувалася не відразу, але в більш-менш схожій формі вона реалізована в більшості платіжних шлюзів і електронних платіжних систем, таких як Skrill або PayPal.

Тепер подивимося, що нас очікує, коли ми збираємося інтегрувати bitcoin як засіб платежу.

По-перше, в bitcoin (і у всіх криптовалюта, побудованих на його основі) немає прямого способу, що дозволяє передати ідентифікатор платежу.

По-друге - ви практично не контролюєте, яку суму відправить користувач (з невеликими застереженнями).

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

Ви отримуєте нову адресу bitcoin і передаєте йогокористувачеві, разом з розрахованою сумою до оплати. Хорошим тоном вважається вказувати на протязі якого часу платіжні реквізити валідність (ми ж пам'ятаємо, курс криптовалюта дуже нестабільний), зазвичай це 15 хвилин. Далі, ви регулярно перевіряєте стан цієї адреси, отримана чи на нього необхідна сума чи ні. У разі, якщо сума надійшла - платіж можна вважати доконаним, і перейти до обробки подальшої замовлення (відправка товару, поповнення мобільного рахунку і так далі)

З огляду на особливості функціонування криптовалюта, потенційно нас очікують деякі підводні камені.

Якщо користувач відправив транзакцію в мережу -це ще не означає що ви її отримали. До моменту першого підтвердження ваш сервер може навіть не дізнатися про те, що така транзакція була. А від моменту оплати до моменту включення транзакції в блок може пройти і кілька годин. Ця ситуація породжує масу неприємних наслідків.

По-перше, якщо курс на момент отриманнятранзакції значно нижче, або, як варіант, - якщо при оплаті вказана занадто низька комісія, ви можете отримати повідомлення про транзакції, але самі кошти можуть зайти через кілька діб. Але ж покупець буде впевнений, що він оплатив замовлення і вимагати його виконання.

В наступних статтях я розповім як реалізувати описане вище на практиці і що для цього знадобиться.