Оплата B2B-счетов в стейблкоинах
Как дать бизнес-клиентам оплачивать счета стейблкоинами: выбор сети, один платёж на счёт, кто платит комиссии, недоплаты, сверка и о чём договориться заранее.

Бизнес-клиенты оплачивают счета, а не корзины. Им нужны номер счёта, точная сумма, подтверждение и запись для бухгалтерии. Стейблкоины подходят для этого хорошо: сумма в долларах приходит за минуты, в любой день и без банков-корреспондентов. В материале показано, как принимать стейблкоины по счетам, о чём договориться с клиентом заранее и как сверять результат.
Почему бизнес платит по счетам стейблкоинами
Причины практические, а не идеологические:
- Международные счета без банковских трений. Перевод между странами через банки может идти днями и терять деньги на комиссиях посредников. Перевод стейблкоина приходит за минуты.
- Долларовые суммы остаются долларовыми. USDT и USDC привязаны к доллару США, так что счёт не подвержен колебаниям цены между выставлением и оплатой.
- Работает в выходные. Банковского операционного дня нет.
- Контрагенты, у которых стейблкоины уже есть и которым удобнее платить ими, чем сначала конвертировать.
Ограничение столь же практическое: обе стороны должны быть готовы к крипте, а финансовой службе клиента нужен понятный процесс. Взгляд именно для SaaS в материале криптовыставление счетов для B2B SaaS.
Выберите актив и сеть и напишите это в счёте
У одной и той же монеты сеть входит в платёж. USDT в TRON (TRC20), в Ethereum (ERC20) и в BNB Smart Chain (BEP20) это отдельные рельсы, и средства, отправленные не туда, не приходят туда, куда ждёт отправитель. В B2B это важнее, потому что суммы больше.
- Комиссии различаются. Переводы в TRON обычно дешевле всего для отправителя, в Ethereum дороже всего. Для крупного счёта разница невелика, для небольшого заметна.
- Клиент может быть ограничен одной сетью платформой, которой пользуется его компания.
- Пусть решает страница оплаты. Клиент выбирает там актив и сеть и получает соответствующий адрес и точную сумму. Если хотите направить его, передайте способ оплаты при создании платежа, и страница откроется с ним уже выбранным.
Напишите в счёте, какие активы и сети вы принимаете (см. поддерживаемые монеты) и что платить нужно в той сети, которая выбрана на странице оплаты.
Один платёж на счёт
Самое чистое сопоставление это один платёж Qvard на каждый счёт. С бэкенда отправьте один POST на https://api.qvard.com/api/v1/payment с ключом в заголовке Authorization: Bearer и JSON:
id: номер вашего счёта строкой. Он вернётся в webhook.price: сумма счёта в долларах США.paymentSystemId(необязательно): способ оплаты из вашего проекта.
Ответ 201 с redirectUrl, адресом страницы оплаты. Вставьте эту ссылку в письмо или PDF со счётом рядом с обычными банковскими реквизитами, чтобы клиент мог выбрать способ оплаты. Повторный запрос с тем же id для того же способа оплаты возвращает уже созданный платёж, поэтому повторно отправленный счёт не создаёт второй.
Курс на странице оплаты фиксируется на один час, поэтому сумма, которую видит клиент, не меняется, пока он платит. Если счёт оплачивают через несколько дней, откройте для него новый платёж, а не используйте устаревшую страницу.
Комиссии и недоплаты: договоритесь заранее
Классический B2B-спор о том, кто платит за доставку денег. Решайте его в условиях, а не постфактум.
- Сетевую комиссию перевода платит отправитель. В счёте укажите, что сумма к оплате это сумма, которая должна прийти, а не сумма, которая отправлена.
- Комиссии вывода с биржи. У клиента, платящего с биржи, из отправляемой суммы нередко вычитают комиссию вывода, и платёж приходит неполным. Запишите это и попросите клиента учитывать.
- Статус partial. Если пришло меньше полной суммы, платёж получает статус
partial, а webhook о завершении не отправляется. Оставьте счёт открытым, скажите клиенту, сколько не хватает, и дайте доплатить разницу. - Переплата. Заранее решите, что делать с клиентом, отправившим больше: зачесть в следующий счёт или вернуть.
Не помечайте счёт оплаченным ни по какому статусу, кроме completed.
Сверка и учёт
Финансовой службе понадобится след. Дайте его.
- Webhook отправляется, когда платёж завершён, с номером вашего счёта в
idи статусом. Получив его, помечайте счёт оплаченным. Точка должна отвечать ровно HTTP 200 (иначе повторы: пять попыток примерно за шесть минут) и быть безопасной при двойном запуске. См. как защитить webhook криптоплатежей. - Фиксируйте в долларах. Сумма счёта в долларах, поэтому проводите поступление по этой стоимости и храните
idплатежа рядом со счётом. - Ежедневная проверка. Сравнивайте счета, которые считаете оплаченными, с платежами и балансом в кабинете Qvard.
- Повторная отправка. Если сервер пропустил уведомление, отправьте его по этому платежу ещё раз из кабинета.
Как криптопоступления трактуются для налогов и бухучёта, зависит от вашей страны и страны клиента. Уточните у консультантов до запуска.
Как вывести деньги
Средства со счетов лежат на вашем балансе в Qvard. Вы выводите их на свой криптокошелёк, и вывод стоит только сетевую комиссию. Абонентской платы нет, комиссия индивидуальна для проекта; по странице тарифов она начинается с 1% и может быть снижена до 0,1%.
Вывода на банковский счёт в фиате нет. Если бизнесу нужны фиатные деньги, продумайте выход через биржу или сервис, которому вы уже доверяете, и помните, что этот шаг тоже часть вашей сверки.
Что готово сегодня
Qvard работает через API: вы создаёте платёж на каждый счёт и принимаете webhook. Готового плагина для выставления счетов пока нет, платёжные ссылки и отдельный sandbox в разработке, а клиент возвращается на сайт сам. Если счета у вас формирует собственный биллинг-код, это небольшая доработка. Смотрите документацию для разработчиков и демо-счёт, а для старта именно со стейблкоином материал как принимать USDT TRC20.
FAQ
Какими стейблкоинами и в каких сетях клиент может оплатить счёт?
Qvard поддерживает среди прочих активов USDT и USDC в сетях, включая TRON (TRC20), Ethereum (ERC20) и BNB Smart Chain (BEP20). Клиент выбирает на странице оплаты, либо вы можете заранее выбрать способ оплаты.
Кто платит сетевую комиссию?
Комиссию за перевод платит отправитель. Укажите в счёте, что сумма к оплате это сумма, которая должна прийти, чтобы клиент учёл возможную комиссию вывода с биржи.
Что если клиент заплатил меньше суммы счёта?
Платёж получит статус partial, а webhook о завершении не придёт. Оставьте счёт открытым и попросите доплатить разницу.
Можно ли вывести на банковский счёт?
Нет. Вывод идёт на криптокошелёк и стоит только сетевую комиссию. Вывода на банковский счёт в фиате нет.
