E-commerce

Криптоплатежи для интернет-магазина

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

Для интернет-магазина крипта это дополнительный способ оплаты рядом с картами, а не замена им. Она открывает магазин покупателям, у которых карты для него не работают, убирает карточные чарджбэки и позволяет получать долларовые стейблкоины. В материале разберём, где ей место на чекауте, как сопоставить статусы платежа и заказа, как обработать неудобные случаи и что в Qvard готово, а что нет.

Что крипта даёт магазину, а чего не даёт

Чётко определите ожидания: крипта не рычаг роста.

  • Покупатели, которых не берут карточные рельсы. Те, чьи банковские карты отклоняют для зарубежных магазинов, или кто живёт в стране, где ваш процессор не работает, всё равно могут заплатить долларовым стейблкоином.
  • Нет карточных чарджбэков. Отправитель не может отменить криптоперевод, поэтому оспоренные карточные платежи для таких заказов не риск. Возврат становится переводом, который вы решаете отправить.
  • Международные продажи без карточных трений. Одна и та же страница оплаты работает для клиента в любой стране.
  • Скромная доля заказов. Считайте это дополнительной опцией на странице оплаты. В большинстве магазинов она не заменит карты, и не стоит давать ей усложнять карточный путь.

Если вы продаёте цифровые товары, прочитайте криптоплатежи для магазинов цифровых товаров: правила выдачи оттуда подходят любому мгновенному товару.

Где ей место на чекауте

Добавьте «Оплатить криптой» ещё одним способом оплаты рядом с имеющимися, а не как отдельный магазин. Аккуратный вариант:

  1. Покупатель собирает корзину, вводит адрес как обычно и выбирает «Оплатить криптой».
  2. Ваш сервер создаёт заказ в состоянии ожидания и платёж под него.
  3. Вы перенаправляете покупателя на страницу оплаты, где он выбирает актив и сеть и платит из своего кошелька.
  4. Когда платёж завершён, сервер получает webhook и двигает заказ дальше.

Показывайте цену в валюте магазина, а списывайте в долларах США: платёж создаётся в долларах, покупатель платит эквивалент в выбранном активе по курсу, зафиксированному на один час. Если магазин работает не в долларах, переведите сумму заказа до создания платежа.

Создайте платёж и используйте номер заказа

Создавайте платёж с бэкенда одним POST на https://api.qvard.com/api/v1/payment. В запросе ваш ключ в заголовке Authorization: Bearer и JSON с номером заказа в id, суммой в price в долларах США и, при желании, paymentSystemId, чтобы страница открылась с выбранным активом и сетью. Ответ 201 с redirectUrl.

Берите свой номер заказа как id: он вернётся в webhook, то есть это ключ, связывающий платёж с заказом. Если запрос повторить с тем же id для того же способа оплаты, вернётся уже созданный платёж, поэтому двойной клик или повторный запрос не создадут два. Полный разбор с кодом в материале как принимать криптоплатежи на сайте.

Сопоставьте статусы платежа и заказа

У платежа четыре статуса, и для каждого у заказа должно быть чёткое правило:

  • wait: платёж создан, покупатель не заплатил. Заказ ждёт оплаты.
  • partial: пришло меньше полной суммы. Придержите заказ, скажите, сколько не хватает, и дайте доплатить либо отмените и верните деньги.
  • completed: пришла вся сумма. Именно этот статус запускает webhook и только он должен отпускать товар.
  • rejected: платёж отклонён. Предложите другой способ оплаты.

В примере сопоставление показано небольшой таблицей. Два правила делают его безопасным: никогда не возвращайте оплаченный заказ в более раннее состояние и не выполняйте заказ ни по чему, кроме completed. Обработчик webhook к тому же должен быть идемпотентным и отвечать ровно HTTP 200; см. как защитить webhook криптоплатежей.

Node.jsorder-status.js
// Qvard payment status -> your order state. Only "completed" releases goods.
const ORDER_STATE = {
  wait:      'pending_payment',   // created, the customer has not paid yet
  partial:   'on_hold',           // less than required arrived: ask for the rest or refund
  completed: 'paid',              // full amount arrived: start fulfilment
  rejected:  'payment_failed'     // rejected: offer another way to pay
};

function nextState(current, qvardStatus) {
  const target = ORDER_STATE[qvardStatus];
  if (!target) return current;                    // unknown status: change nothing
  if (current === 'paid') return current;         // never move a paid order backwards
  return target;
}

Частичные оплаты, просроченные заказы и возвраты

Именно эти случаи отнимают у магазинов время:

  • Покупатели, платящие меньше. Комиссию вывода с биржи часто вычитают из суммы, и платёж приходит неполным. Решите, просите ли вы разницу или возвращаете деньги, и покажите это на странице заказа.
  • Покупатели, платящие поздно. Курс фиксируется на час. Платёж, пришедший спустя долгое время после того, как заказ бросили, разбирайте как обращение в поддержку, а не автоматизируйте.
  • Остатки. Если вы резервируете товар под неоплаченные заказы, снимайте резерв по истечении заказа.
  • Возвраты. Криптоплатёж нельзя вернуть и вам; возврат это перевод на кошелёк покупателя. Запишите правило в условиях и запрашивайте адрес для возврата у покупателя, а не берите его из платежа.
  • Возврат на сайт. Возврата по ссылке после оплаты пока нет, поэтому покупатель возвращается сам. Дайте ему страницу заказа с реальным статусом, а не страницу «спасибо», которая считает оплату успешной.

Цены, комиссии и учёт

Держите денежную часть простой.

  • Цена в долларах, списание в долларах. Фиксируйте стоимость заказа в долларах на момент заказа и храните рядом id платежа для сверки.
  • Сколько это стоит. Абонентской платы нет. Комиссия индивидуальна для вашего проекта и по странице тарифов начинается с 1%, а может быть снижена до 0,1%.
  • Как вывести деньги. Средства лежат на вашем балансе в Qvard, и вы выводите их на свой кошелёк; вывод стоит только сетевую комиссию. Вывода на банковский счёт в фиате нет, так что, если нужны наличные, продумайте выход через сервис, которым вы уже пользуетесь.
  • Налоги и бухгалтерия. Режим криптопоступлений зависит от страны; уточните его у бухгалтера до запуска.

Что готово сегодня

Qvard работает через API: магазин создаёт платёж и принимает webhook. Готового плагина для платформ магазинов пока нет, платёжные ссылки и отдельный sandbox в разработке, а покупатель возвращается на сайт сам. Если у вас WordPress, рабочий код есть в материале криптоплатежи на WordPress. Принимаемые активы и сети смотрите в поддерживаемых монетах, форматы запросов в документации для разработчиков, а что увидит ваш клиент, покажет демо-счёт.

FAQ

Заменит ли крипта карты в моём магазине?

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

Когда помечать заказ оплаченным?

Только когда Qvard отправил webhook со статусом completed. Возвращение покупателя на сайт не доказательство оплаты, а статус partial значит, что пришло меньше нужного.

Как работают возвраты при крипто-оплате?

Отправитель не может отменить криптоплатёж, поэтому возврат это перевод, который вы отправляете на кошелёк покупателя. Определите правило в условиях и запросите адрес для возврата у покупателя.

Есть ли плагин для моей платформы магазина?

Пока нет. Сейчас интеграция идёт через API: один запрос создаёт платёж, один webhook принимает результат.

Похожие статьи

Похожие статьи