# Криптоплатежи для цифровых товаров, SaaS и онлайн-сервисов

> Продавайте лицензии, подписки и онлайн-услуги за криптовалюту: один вызов API создаёт платёж, подписанный вебхук сообщает серверу, когда открыть доступ.

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

CryptoLike позволяет цифровому бизнесу выдавать товар автоматически, как только криптоплатёж подтверждён. Ваш сервер создаёт платёж одним вызовом API, клиент платит на странице оплаты, а подписанный вебхук сообщает серверу, что пора открыть доступ. Так работают лицензионные ключи, пополнения, периоды подписки и кредиты сервиса — без ручной проверки блокчейна.

## Почему цифровому продукту нужен API, а не кнопка оплаты?

Цифровой продукт выдаёт код, а не человек, поэтому платёж должен быть понятен машине. Коду нужно знать, что платёж подтверждён, сколько пришло и к какому заказу он относится, и выдать товар ровно один раз, даже если сообщение повторилось. CryptoLike даёт всё это полями API и правилами вебхуков.

Без этого доступ открывается по переводу, который только обнаружен, повтор запроса выдаёт товар дважды, реорганизация сети отменяет перевод, уже принятый за оплату, а суммы во float теряют точность.

## Как CryptoLike встраивается в автоматическую выдачу

Интеграция с CryptoLike — это три части на вашем сервере: создать платёж, отправить на него клиента и обработать один вебхук. Секрет API не покидает сервер. Всё, что нужно коду выдачи, приходит вместе с платежом, включая ваш номер заказа и до 20 пар метаданных.

1. **Создайте платёж** через `POST /v1/invoices`: сумма, валюта (фиатный код, например `USD`, или тикер монеты), ваш `order_id` и при необходимости `metadata`. С заголовком `Idempotency-Key` повтор в течение 24 ч вернёт тот же платёж.
2. **Отправьте клиента** на `checkout_url` или встройте страницу [виджетом оплаты](https://cryptolike.net/ru/docs/widget), чтобы он остался в вашем приложении; браузер получает только id платежа.
3. **Выдавайте по `invoice.paid`.** Проверьте подпись, пропустите уже обработанный `event_id`, откройте доступ и ответьте 2xx.

```json
{
  "amount": "29.00",
  "currency": "USD",
  "order_id": "sub-8812-2026-10",
  "metadata": { "plan": "pro", "period": "2026-10" },
  "return_url": "https://app.example.com/billing/done"
}
```

`metadata` возвращается в API и в каждом вебхуке `invoice.*`, никогда не показывается плательщику и ограничена 20 строковыми парами и 4 КБ.

## На что может опираться ваша интеграция

CryptoLike публикует контракт платежа, поэтому ваш код может заранее обработать каждый случай, от повтора вебхука до лимита запросов. Числа в таблице взяты из документации API и вебхуков. Они описывают поведение платформы по отношению к вашему серверу, а не обещание о скорости подтверждений в сети.

| Правило | Значение |
|---|---|
| Ответ на вебхук | Код 2xx в течение 10 секунд |
| Повторы вебхука | 1 мин, 5 мин, 15 мин, 1 ч, 6 ч, 24 ч: 7 попыток примерно за 31 ч, с тем же `event_id` |
| Подпись | HMAC-SHA256 от timestamp и сырого тела, заголовок `X-Signature` |
| Идемпотентность | `Idempotency-Key` повторяет тот же ответ 24 ч |
| Лимит запросов | На API-ключ, по умолчанию 600 запросов в минуту; `429` приходит с `Retry-After` |
| Суммы | Десятичные строки до 18 знаков, никогда не float |
| Тестовый режим | Ключи `ck_test_` и тестовый адрес API, тестовые сети; тестовые монеты ничего не стоят |

Статусы платежа: `new`, `pending`, `paid`, `underpaid`, `expired` и `cancelled`; только `paid` означает, что деньги подтверждены и зачислены. Если реорганизация отменила подтверждённый перевод, придёт `invoice.reverted`: приостановите выдачу до нового `invoice.paid`. Подробнее — в [модели статусов платежа](https://cryptolike.net/ru/docs#status-model).

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

Для интеграции с CryptoLike нужен сервер, который хранит секрет API, тестовый ключ и https-эндпоинт для вебхуков. Официальные SDK для TypeScript, Python, Go и PHP подписывают запросы, повторяют их, добавляют ключи идемпотентности и проверяют вебхуки. Это пре-релиз: до публикации в реестрах пакетов SDK устанавливаются из репозитория.

1. Попросите у поддержки CryptoLike доступ к тестовой среде: в её кабинете создайте ключ `ck_test_` с правами `create_invoice` и `read` и используйте адрес её API.
2. Установите SDK: [TypeScript SDK](https://cryptolike.net/ru/integrations/sdk-typescript), [Python SDK](https://cryptolike.net/ru/integrations/sdk-python), [Go SDK](https://cryptolike.net/ru/integrations/sdk-go) или [PHP SDK](https://cryptolike.net/ru/integrations/sdk-php) — или подписывайте запросы сами по описанию [аутентификации API](https://cryptolike.net/ru/docs/auth).
3. Создайте платёж и оплатите его в тестовой сети.
4. Обработайте вебхук по руководству [как проверять вебхуки криптоплатежей](https://cryptolike.net/ru/guides/verify-crypto-payment-webhooks).
5. Переключитесь на боевой ключ.

Все маршруты — в [справочнике API](https://cryptolike.net/ru/docs/api), комиссия платформы по активам — на [странице тарифов](https://cryptolike.net/ru/pricing).

Продаёте тарифы с продлением? Смотрите раздел [криптоплатежи для подписок](https://cryptolike.net/ru/use-cases/subscriptions): один инвойс на расчётный период с ценой в USD.

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

### Когда открывать доступ: на `pending` или на `paid`?

На `paid`. `pending` значит, что перевод обнаружен и ждёт подтверждений, и он ещё может не покрыть сумму. `paid` значит, что вся сумма подтверждена и зачислена на ваш баланс.

### Как не выдать товар дважды?

Проверьте подпись и найдите `event_id` в своём хранилище: если он уже был, ответьте 2xx и остановитесь. Доставка «как минимум один раз», повторы — норма. При создании платежей передавайте `Idempotency-Key`, чтобы повтор запроса не создал второй платёж.

### Можно ли продавать подписки?

Да, одним платежом на период. Каждый криптоперевод отправляет сам клиент, поэтому автоматически с его кошелька ничего не списывается. Создавайте платёж на каждый период, показывайте или отправляйте ссылку, а тариф и период кладите в `metadata`.

### Что, если клиент отправил больше цены?

Платёж получает статус `paid`, вся сумма зачисляется на ваш баланс, а вебхук содержит `overpaid_amount` больше нуля. Товар выдаётся как обычно, а разницу вы урегулируете с клиентом.
