# Криптоплатежи для подписок и регулярных счетов

> Подписки с оплатой в криптовалюте: инвойс на каждый период с ценой в USD, ссылка на оплату в письме о продлении и подписанный вебхук, который продлевает доступ.

Source: https://cryptolike.net/ru/use-cases/subscriptions
Updated: 2026-09-25

CryptoLike выставляет счёт за подписку в криптовалюте по одному периоду: ваша система создаёт инвойс на каждое продление, клиент оплачивает его по ссылке из письма, а подписанный вебхук сообщает серверу, что доступ пора продлить. Цена остаётся в USD или EUR, а клиент платит эквивалент в Bitcoin, USDT или другом включённом активе по курсу, зафиксированному для инвойса.

## Почему криптовалюту нельзя списывать автоматически каждый месяц?

Криптоплатёж всегда отправляет кошелёк плательщика: забрать деньги у клиента позже, как списывают с привязанной карты, нельзя. Поэтому криптоподписка — это серия инвойсов, а не сохранённый способ оплаты. Клиент подтверждает каждый период; это удобно для годовых тарифов, B2B-договоров и клиентов, которые предпочитают предоплату, а что делать с неоплаченным периодом, решает ваш продукт.

## Как работают регулярные платежи на инвойсах CryptoLike

Расписание ведёт ваша биллинговая система, а платёж каждого периода — CryptoLike. Одно продление — это один вызов API и один вебхук, и тот же код подходит для месячных, квартальных и годовых тарифов.

1. **За несколько дней до продления создайте инвойс.** `POST /v1/invoices` с ценой тарифа в USD, `order_id`, в котором есть подписка и период, и временем на оплату до 30 дней (`ttl_seconds` до 2 592 000).
2. **Отправьте `checkout_url`** в письме о продлении или покажите в личном кабинете клиента. На странице видны сумма, сеть, адрес с QR-кодом и оставшееся время.
3. **Продлите доступ на `invoice.paid`.** Проверьте подпись вебхука, найдите подписку по `order_id` или `metadata` и сдвиньте дату «оплачено до» на один период.
4. **Обработайте другие исходы.** `invoice.underpaid` — попросите доплатить на тот же адрес до срока; `invoice.expired` — включите льготный период или приостановите тариф и предложите новый инвойс.

```json
{
  "amount": "49.00",
  "currency": "USD",
  "order_id": "sub-4821-2026-10",
  "idempotency_by_order_id": true,
  "ttl_seconds": 604800,
  "metadata": { "subscription_id": "4821", "period": "2026-10" },
  "return_url": "https://app.example.com/billing"
}
```

С `idempotency_by_order_id` повторный запуск задачи для того же периода вернёт открытый инвойс, а не выставит счёт дважды. `metadata` приходит в каждом вебхуке `invoice.*` и плательщику не показывается.

## Какая модель продления подходит вашему продукту?

Большинство подписочных сервисов укладываются в три схемы. Они различаются тем, кто начинает платёж и как о нём узнаёт ваша система; статусы и вебхуки во всех трёх одинаковые.

| Модель | Как работает | Кому подходит |
|---|---|---|
| Инвойс на период | Система создаёт инвойс перед каждым продлением и отправляет ссылку письмом | SaaS-тарифы, членство, хостинг |
| Предоплаченный баланс | У клиента свой [статический адрес](https://cryptolike.net/ru/glossary/static-address); каждое пополнение зачисляется, а система списывает цену тарифа с внутреннего баланса | Оплата по использованию, кредиты, частые мелкие списания |
| Ссылка на оплату вручную | Финансовый отдел создаёт ежемесячный счёт в кабинете или Telegram-боте и отправляет ссылку | B2B-договоры, несколько крупных клиентов |

Модель с предоплатой описана в разделе [пополнения на статические адреса](https://cryptolike.net/ru/use-cases/deposits), ручные счета — в разделе [ссылки на оплату](https://cryptolike.net/ru/use-cases/payment-links).

## Цена в фиате и курс

Цена тарифа остаётся в вашей валюте. Когда клиент выбирает монету на странице оплаты, CryptoLike пересчитывает сумму по текущему курсу и фиксирует его до окончания срока инвойса: даже при долгом сроке оплаты сумма в криптовалюте после выбора монеты не меняется. Если сумма должна быть фиксирована в USDT с самого начала, выставляйте инвойс в стейблкоине. Комиссия платформы за подтверждённый платёж — на странице [тарифов](https://cryptolike.net/ru/pricing).

## Как подключить

Для подписок нужен бэкенд, который хранит секретный ключ и принимает вебхуки. Установите SDK — [TypeScript SDK](https://cryptolike.net/ru/integrations/sdk-typescript), [Python SDK](https://cryptolike.net/ru/integrations/sdk-python), [PHP SDK](https://cryptolike.net/ru/integrations/sdk-php) или [Go SDK](https://cryptolike.net/ru/integrations/sdk-go), — создайте ключ с правами `create_invoice` и `read` и проверьте продление целиком в тестовых сетях — с ключом `ck_test_` и тестовым адресом API от поддержки CryptoLike. Полный справочник запросов и вебхуков — в [обзоре API](https://cryptolike.net/ru/docs/api), другие схемы для сервисов — в разделе [криптоплатежи для цифровых товаров и SaaS](https://cryptolike.net/ru/use-cases/digital-goods).

## Вопросы и ответы

### Может ли CryptoLike списывать оплату у клиентов автоматически каждый месяц?

Нет. Криптоперевод всегда отправляет кошелёк самого плательщика, поэтому без подтверждения клиента ничего списать нельзя. Подписки в CryptoLike работают как один инвойс на период: система создаёт его перед продлением, клиент платит по ссылке, а вебхук `invoice.paid` продлевает доступ. Для частых списаний есть альтернатива — предоплаченный баланс на статическом адресе.

### Сколько может быть открыт инвойс на продление?

До 30 дней: `ttl_seconds` принимает от 60 до 2 592 000 секунд, а без него действует время на оплату из настроек аккаунта (30 минут). Для продлений обычно ставят 3–7 дней. Когда клиент выбрал монету, курс фиксируется до окончания срока инвойса, поэтому сумма в криптовалюте, пока инвойс открыт, не меняется.

### Что если клиент заплатил меньше цены тарифа?

Инвойс получает статус `underpaid` и до своего срока открыт для доплаты на тот же адрес: `remaining_amount` показывает вашей системе, сколько не хватает, а клиент видит это на странице оплаты. Если остаток приходит вовремя, следует `invoice.paid`. Если нет, инвойс закрывается как недоплаченный, и вы решаете, продлить доступ или вернуть деньги.

### Как не выставить счёт за один период дважды?

Используйте `order_id`, в котором есть подписка и период, например `sub-4821-2026-10`, и передавайте `idempotency_by_order_id: true`. Тогда повторный запуск задачи или второй запрос за тот же период вернёт открытый инвойс, а не создаст новый, а период, за который деньги уже пришли, получит отказ `409 conflict`.
