Прийом криптовалюти в точці продажу
Прийом криптовалюти в точці продажу означає, що клієнт біля вашої каси платить цифровим активом — стейблкоїном на кшталт USDC або монетою на кшталт BTC, — а ви, мерчант, отримуєте кошти в євро. Актив, який надсилає клієнт, і гроші, які отримуєте ви, — це дві різні речі, пов'язані котируванням, зафіксованим у момент тапу. Ні ваша каса, ні ваш облік, ні ваш банківський рахунок не дізнаються, що була задіяна крипта. Термінал показує ціну в євро, клієнт сканує код, і за кілька секунд продаж закривається в євро — тим самим рядком, яким був би картковий платіж. Крипта в точці продажу — це спосіб оплати, а не зміна в обліку, і втримати її в цій ролі — і є вся інженерна задача.
З цього варто почати, адже більшість плутанини навколо крипто-платежів виникає через змішування двох питань, які мають лишатися окремо: як платить клієнт і в якій валюті лишаються кошти мерчанта. Розділіть їх — і все інше випливає саме.
Яку проблему насправді треба вирішити
Мерчанту потрібен продаж, а не волатильність. Він не хоче закінчувати день із мішком активів невизначеної вартості і не хоче, щоб його бухгалтер раптом заговорив двома валютами. Йому потрібна ціна, зафіксована між тапом і чеком, гроші в євро та звірка, схожа на будь-який інший день з картками. Магазин, який приймає крипту наївно, не отримує нічого з цього: він бере актив, ціна якого змінюється, поки клієнт ще вирішує, складає його у гаманець і отримує в обліку другу валюту, яку тепер хтось має вручну оцінювати й конвертувати. Тому мета дизайну вузька й сувора — зробити крипту видимою лише в одному місці, у момент оплати, і невидимою скрізь більше.
Один тап: QR, зафіксований курс, рядок у євро
Пройдімо касовий сценарій. Касир пробиває кошик на €24.00. Термінал показує підсумок у євро й відображає QR-код із запитом — сума, адреса призначення чи інвойс і ідентифікатор короткочасного котирування. Клієнт сканує його власним гаманцем, бачить, що саме збирається надіслати, і підтверджує. Термінал стежить у мережі за цим переказом і після підтвердження друкує чек у євро. З боку касира ритм ідентичний картковому: підсумок, прикласти, схвалити, чек. Ніхто за касою не вводить адресу і не бачить баланс у чомусь іншому, крім євро.
Саме те, що запит зашито в QR, робить безпечним передавати його на телефон незнайомця. Сума й призначення подорожують у коді з контрольною сумою, тож клієнт не може заплатити не на ту адресу чи не ту суму через помилку введення — той самий підхід, що й identity-by-construction на боці інкасації, застосований до каси. Код, який зчитується, — це код, який правильний; немає поля вільного тексту, де можна помилитися.
Розрахунок у євро: облік ніколи не дізнається про крипту
Між активом, який надсилає клієнт, і євро, які лишаються в мерчанта, стоїть конвертація, і її розташування — це весь фокус. Клієнт надсилає USDC або BTC; платформа конвертує та зараховує кошти на рахунок мерчанта в EUR. Книга мерчанта бачить лише зарахування в євро та рядок комісії в євро — тієї самої форми, що й card settlement, — бо актив конвертується на платформі, а не лишається у гаманці, яким мерчанту довелося б керувати. До кінця дня облік — у євро від початку до кінця. Немає кошика монет, який треба оцінювати, немає другої валюти в рахунках, і нічого не треба виводити в готівку в понеділок уранці.
Завдання клієнта — платити тим, що в нього є. Завдання мерчанта — вести облік в одній валюті. Точка продажу, що розраховується за крипту в євро, — це просто машина, яка не дає цим двом фактам зустрітися.
Курс зафіксований, а не наздоганяється
Волатильність — це страх, а зафіксований курс із зворотним відліком — відповідь. Коли термінал показує ціну в євро, він водночас фіксує котирування, чинне протягом заявленого вікна — кількох секунд. Клієнт платить у межах цього вікна за цим котируванням, і євро, що зараховуються мерчанту, — це євро з екрана, а не те, що зробив ринок, поки завантажувався гаманець. Якщо вікно минає до підтвердження клієнта, термінал перекотирує: новий код, новий відлік, явна нова ціна — ніколи не тихий дрейф. Мерчант ніколи не наражається на рух між тапом і підтвердженням; цей ризик лежить на тому, хто зафіксував котирування, а не на крамареві, який просто хотів продати каву.
Коли клієнт повільний або термінал офлайн
Мережі зависають, а в магазинів зникає зв'язок, тож офлайн-поведінка має бути навмисно нудною. Два випадки. Коли клієнт повільний, котирування просто спливає й оновлюється: платіж або підтверджується в межах вікна, або не відбувається, і немає напівзавершеного продажу, який треба скасовувати. Коли офлайн виходить сам термінал, він і далі може показати запит на відому суму, але не може зафіксувати нове котирування чи підтвердити розрахунок, тому тримає продаж у стані очікування й звіряється після відновлення зв'язку, а не вдає успіх. Головне правило: чек друкується після підтвердження, а не з надії; чек у євро означає, що євро враховано, а продаж, який термінал не зміг підтвердити, лишається відкритим і видимим у консолі оператора, а не тихо зникає.
Де термінал зустрічає gateway
Каса — це офлайн-обличчя того самого стеку приймання платежів, що працює онлайн. Крипто-тап у фізичній точці й checkout за посиланням — це одна подія всередині: запит, платіж, розрахунок у євро, чек — просто подані на різних поверхнях. Тому мерчант звіряє крипту в магазині й онлайн-замовлення в одному місці, в євро, з тими самими рядками комісій і тими самими експортами, замість двох книг, які наприкінці місяця доводиться зшивати. Термінал — за адресою /products/pos; онлайн-частина тих самих рейок — /products/gateway; а словник термінів — котирування, розрахунок, еквайєр, звірка — визначено в /glossary.
Чесна межа
Якщо ніхто на вашій касі не хоче платити кригтою, крипто-термінал розв'язує проблему, якої у вас немає, — приймайте картки й рухайтеся далі. Він виправдовує себе там, де помітна частка ваших клієнтів уже тримає цифрові активи і радше витратила б їх, ніж спершу виводила в готівку: певні туристичні коридори, певні онлайн-орієнтовані аудиторії, певні регіони, де стейблкоїни — просто спосіб тримати гроші, якими можна платити. У таких місцях відмовитися від тапу означає відмовитися від продажу. Механіка вище — QR, зафіксований курс, розрахунок у євро, правило «спершу підтвердження, потім чек» — дозволяє зробити цей продаж без волатильності, другої валюти чи бухгалтерського проєкту. Крипта лишається турботою клієнта; євро лишаються вашими.
Маєте систему для розробки?
Розкажіть, яку проблему треба розв’язати. Ми повернемося з архітектурою та планом.