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

Для продажи цифровых товаров за крипту нужны три вещи: точка, где клиент оформляет заказ (сайт, Telegram-бот или просто ссылка на счёт), криптопроцессинг, который выставляет счёт и подтверждает оплату, и автовыдача, которая отправляет ключ, файл или доступ сразу после подтверждения. Цену указывайте в долларах, клиент платит в USDT или другой монете, а товар выдаётся только по проверенному вебхуку.
Цифровые товары и криптовалюта хорошо сочетаются. Доставка мгновенная и в любую страну, у покупателя часто уже есть USDT, а чарджбэка через месяц после активации ключа не будет. Сложность не в том, чтобы принять деньги, а в том, чтобы надёжно выдать товар и правильно обработать тех, кто заплатил меньше, позже или не в той сети.
Ниже — схема для ключей, файлов, курсов, игровых ценностей и других цифровых товаров.
Продажа цифровых товаров за крипту: что продают и что проверить
Чаще всего за криптовалюту продают:
лицензии и ключи активации программ
файлы: шаблоны, пресеты, электронные книги, музыку, шрифты
онлайн-курсы, закрытые клубы и инфопродукты
игровую валюту, предметы и пополнения
подарочные карты и ваучеры
кредиты API и тарифы SaaS (о продлениях — ниже)
Перед запуском проверьте две вещи. Во-первых, право продавать товар: перепродажа ключей и аккаунтов часто нарушает правила правообладателя. Во-вторых, налоги в своей стране и в странах покупателей: цифровые услуги во многих странах облагаются НДС по месту покупателя, независимо от способа оплаты. Это общая информация, а не налоговая консультация.
Шаг 1. Где клиент оформляет заказ
| Канал | Кому подходит | Как устроена оплата |
|---|---|---|
| Сайт на CMS (WooCommerce и другие) | Каталог с множеством товаров | Модуль добавляет криптовалюту как способ оплаты |
| Свой сайт или приложение | Своя логика оформления и выдачи | Бэкенд создаёт счета через API |
| Telegram-бот | Аудитория живёт в Telegram | Бот создаёт счёт и присылает ссылку на оплату |
| Ссылка на счёт | Несколько товаров, продажи в личке и соцсетях | Вы создаёте счёт и отправляете ссылку |
Магазин-бот в Telegram — популярный формат для цифровых товаров; как подключить к нему оплату, рассказано в статье как принимать оплату криптой в Telegram-боте. Если у вас WooCommerce, быстрее всего поставить модуль, см. криптоплатежи в WooCommerce. Для своего сайта общая схема описана в инструкции по приёму USDT на сайте.
Шаг 2. Цена в долларах и выбор монет
Указывайте цену в долларах, а не в монете. Курс за $19 стоит $19 в любой день, а монету и сеть клиент выбирает на странице оплаты.
Для цифровых товаров стоит начать с такого набора:
USDT в TRC20, BEP20, TON и Solana: стабильная цена и дешёвые сети для небольших чеков
USDC для тех, кто его предпочитает
BTC и LTC для держателей этих монет
ETH в сетях Base или Arbitrum, где комиссии ниже, чем в основной сети Ethereum
На маленьких чеках дешёвая сеть важна. Если средний заказ $5–15, комиссия сети и биржи в дорогой сети может съесть заметную часть цены. Поддерживаемые монеты и сети перечислены на странице приёма USDT.
Шаг 3. Автовыдача по проверенному вебхуку
Это главное в продаже цифровых товаров: клиент оплатил — и через минуту у него товар, без вашего участия.
Как это работает
Клиент нажимает «Купить». Бэкенд создаёт заказ со статусом
pendingи счёт в процессинге, передавая номер заказа.Клиент платит на странице оплаты: QR-код, сумма, таймер.
После нужного числа подтверждений сети процессинг присылает вебхук
invoice.paidсо статусомPAIDилиOVERPAIDвdata.status.Сервер проверяет подпись, находит заказ, отмечает его оплаченным и выдаёт товар: резервирует ключ, генерирует ссылку на скачивание или открывает доступ к курсу.
Клиента перенаправляет на страницу успеха, где он видит товар и узнаёт, что копия ушла на почту.
Создание счёта
В Zypher счёт создаётся запросом POST /api/v1/invoice. Запрос подписывается: X-API-Sign — это HMAC-SHA256 в hex от точного JSON-тела на вашем API-секрете. На Node.js:
import crypto from "node:crypto";
const body = JSON.stringify({
fiatAmount: "19.00",
fiatCurrency: "USD",
orderId: "order-10452",
});
const sign = crypto
.createHmac("sha256", process.env.ZYPHER_API_SECRET)
.update(body)
.digest("hex");
const res = await fetch("https://zypher.exchange/api/v1/invoice", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": process.env.ZYPHER_API_KEY,
"X-API-Sign": sign,
},
body, // ровно та строка, которую подписали
});
const invoice = await res.json();
// сохраните ID счёта рядом с заказом и отправьте клиента на страницу оплатыОтправляйте ровно ту строку, которую подписали. Если подписать одну строку, а библиотека пересериализует объект по-своему, подпись не сойдётся. Формат ответа и все поля — в документации API.
Проверка вебхука
В вебхуке есть заголовок X-Webhook-Signature — HMAC-SHA256 в hex от сырого тела запроса на вашем API-секрете. Проверяйте подпись по сырым байтам до разбора JSON:
app.post("/webhooks/zypher", express.raw({ type: "application/json" }), async (req, res) => {
const expected = crypto
.createHmac("sha256", process.env.ZYPHER_API_SECRET)
.update(req.body)
.digest("hex");
const got = req.get("X-Webhook-Signature") || "";
if (got.length !== expected.length ||
!crypto.timingSafeEqual(Buffer.from(got), Buffer.from(expected))) {
return res.status(401).end();
}
const { event, data } = JSON.parse(req.body);
if (event === "invoice.paid" && ["PAID", "OVERPAID"].includes(data.status)) {
await deliverOnce(data); // идемпотентно: повторный вызов ничего не выдаёт
}
res.status(200).end();
});Идемпотентность
Если ваш сервер не ответил, вебхук отправляется повторно, до пяти попыток, поэтому один и тот же счёт может прийти дважды. Функция выдачи должна:
искать заказ по ID счёта внутри транзакции БД
выходить, если заказ уже выдан
в той же транзакции резервировать ключ (помечать его проданным этому заказу)
отправлять письмо уже после коммита
Заодно это защищает склад ключей: два параллельных вебхука не выдадут два ключа на один заказ.
Как выдавать разные товары
Ключи активации
Храните пул ключей по каждому товару со статусами available, reserved, sold. При оплате резервируйте ключ, показывайте его на странице успеха и дублируйте на почту. Настройте уведомление, когда ключей остаётся мало, чтобы не продать то, чего нет. Если пул пуст в момент оплаты, ставьте заказ в статус «оплачен, ожидает ключ» и честно пишите клиенту срок.
Файлы
Не отправляйте постоянную публичную ссылку. Генерируйте подписанную ссылку с ограниченным сроком (например, 24–72 часа) и числом скачиваний, а в личном кабинете дайте возможность получить новую.
Курсы и закрытые клубы
Открывайте доступ к аккаунту, а не отправляйте файл. Если аккаунта нет, создайте его по email из заказа и пришлите ссылку для входа.
Игровая валюта и пополнения
Спрашивайте игровой ID до оплаты и проверяйте его: пополнение не тому игроку отменить сложно. Покажите ID ещё раз на странице подтверждения.
Ситуации, которые стоят денег
Недоплата
Если клиент платит с биржи, комиссия за вывод часто вычитается из суммы. В Zypher оплата от 98% суммы считается полной. Ниже — статус UNDERPAID: клиент может доплатить остаток на тот же адрес, частичные платежи суммируются. Товар при UNDERPAID не выдавайте, но сообщите клиенту, сколько не хватает.
Оплата после истечения счёта
Счёт в монете живёт 30 минут. Счёт в долларах даёт 60 минут на выбор монеты и ещё 30 минут на оплату. Платёж, пришедший в течение 30 минут после истечения, всё ещё может быть сопоставлен со счётом. Если позже — разбирайтесь вручную: найдите транзакцию, сверьте сумму и выдайте товар или верните деньги.
Переплата
Всё, что выше 102%, помечается как OVERPAID. Вебхук всё равно приходит — товар выдавайте. А для лишней суммы заведите правило: крупную переплату возвращать, мелкую зачислять на баланс в магазине.
Не та сеть или не та монета
Такие платежи до счёта не доходят. Поддержка должна знать, что можно вернуть, а что нет, — это зависит от конкретных сетей.
Возвраты
Чарджбэков в крипте нет, но возвраты всё равно понадобятся: нерабочий ключ, двойная покупка, жест доброй воли. Напишите правила возврата для цифровых товаров и покажите их при оформлении заказа. Дальше:
Попросите у клиента письменно адрес и сеть для возврата.
Возвращайте в той же монете или в USDT по сумме в долларах — укажите это в правилах.
Отправьте возврат обычным выводом с баланса, он оплачивает комиссию сети.
Заблокируйте выданный ключ или доступ.
Комиссии и маржа
У цифровых товаров часто маленький чек, поэтому комиссия процессинга заметна. В Zypher это 1% за оплаченный счёт на тарифе Start и 0,75% при обороте от $10k за 30 дней, дальше ниже; платы за подключение и абонентки нет. Другие сервисы берут примерно от 0,4% до 3% — подробности в сравнении комиссий криптоэквайринга.
Чек-лист перед запуском
Цены в долларах, включены монеты и дешёвые сети
Счёт создаётся на сервере с номером заказа
Подпись вебхука проверяется по сырому телу
Выдача только при PAID или OVERPAID, не по редиректу
Выдача идемпотентна, резерв ключа — в транзакции
Уведомление о заканчивающихся ключах
Ссылки на файлы с ограниченным сроком
Правила возврата видны при оформлении
Проведена одна реальная покупка на небольшую сумму
Обзор этой схемы есть на странице криптоплатежи для цифровых товаров. Магазин открывается примерно за минуту и без документов: зарегистрироваться.
Частые вопросы
- Можно ли продавать цифровые товары за крипту без сайта?
Да. Можно создавать счёт на каждый заказ и отправлять ссылку на оплату в мессенджере, по почте или в соцсетях. Если аудитория в Telegram, удобен бот. Для автовыдачи всё равно нужен небольшой бэкенд, который принимает вебхук об оплате.
- Как автоматически выдавать ключи после оплаты криптовалютой?
Храните ключи в базе данных и резервируйте ключ, когда приходит подписанный вебхук
invoice.paidсо статусом PAID или OVERPAID. Показывайте ключ на странице успеха и отправляйте на почту. Обработчик должен быть идемпотентным, чтобы повторный вебхук не выдал второй ключ.- Что делать, если покупатель недоплатил?
В Zypher платёж от 98% суммы считается полной оплатой. Если меньше, счёт помечается как недоплаченный, и покупатель может доплатить остаток на тот же адрес. Выдавайте товар только после того, как счёт оплачен.
- Может ли покупатель оспорить оплату криптой через банк?
Нет, подтверждённый платёж в криптовалюте банк покупателя отменить не может. Правила возврата на случай нерабочего ключа или ошибки всё равно нужны. Возврат отправляется обычным выводом.
- Какую криптовалюту принимать за цифровые товары?
USDT — хороший вариант по умолчанию благодаря стабильной цене. Подключите его в дешёвых сетях — TRC20, BEP20, TON или Solana, особенно если чеки небольшие. BTC, LTC и USDC добавьте для тех, кто их предпочитает.
- Нужно ли платить налоги с продаж за криптовалюту?
Как правило, действуют те же правила, что и для любых продаж, а цифровые услуги часто облагаются НДС по месту покупателя. Правила в разных странах разные. Уточните у местного бухгалтера.