# Как принимать биткоин на сайте

> Приём BTC через CryptoLike по шагам: цена в BTC или в долларах, срок оплаты с учётом времени блоков, медленные и заменённые переводы, выплаты в биткоине.

Source: https://cryptolike.net/ru/guides/accept-bitcoin-payments
Published: 2026-09-24 · Updated: 2026-09-25 · Author: CryptoLike team

Чтобы принимать биткоин на сайте через CryptoLike, создайте платёж к заказу через `POST /v1/invoices` с `coin_id` биткоина, отправьте покупателя на страницу оплаты и отгружайте, когда платёж получит статус `paid`. От других активов биткоин отличается временем: блоки выходят в среднем раз в 10 минут, от комиссии плательщика зависит, как скоро его перевод попадёт в блок, и срок оплаты должен учитывать и то, и другое. Ниже — пошагово, с решениями, специфичными для биткоина, на каждом шаге.

## Биткоин-платежи коротко

CryptoLike принимает нативный биткоин в сети Bitcoin, ончейн. У каждого платежа свой адрес; статус переходит из `new` в `pending`, когда перевод попал в блок, и в `paid` — на пороге подтверждений актива, а о каждом изменении сообщает подписанный вебхук.

| Факт | Биткоин в CryptoLike |
|---|---|
| Актив · сеть | BTC · Bitcoin; `network` в API — `btc` |
| Точность | 8 знаков (1 сатоши = 0,00000001 BTC) |
| Адрес платежа | Native SegWit, начинается с `bc1q`, новый для каждого платежа, повторно не используется |
| Платёжная ссылка и QR | `bitcoin:<address>?amount=<BTC>` — кошелёк плательщика сам подставит сумму |
| Когда появляется `pending` | Когда перевод попал в блок (первое подтверждение) |
| Когда `paid` | На пороге подтверждений актива: `confirmations` в `GET /v1/currencies`, показан на [странице биткоина](https://cryptolike.net/ru/coins/bitcoin) |
| Интервал блоков | В среднем 10 минут — так устроена сеть |
| Адреса для выплат | Начинающиеся с `1`, `3`, `bc1q` или `bc1p` |
| Не поддерживается | Платежи через Lightning; «обёрнутый» биткоин в других сетях |

Сверено с CryptoLike и документацией для разработчиков Bitcoin 24.09.2026.

## Что нужно заранее

Нужен аккаунт CryptoLike с включённым биткоином, API-ключ с правами `create_invoice` и `read` и эндпоинт вебхуков на вашем сервере с проверкой подписи. Если сайт работает на WooCommerce, OpenCart, PrestaShop или Magento, шаги 2–5 за вас делает плагин — см. [интеграции](https://cryptolike.net/ru/integrations), — и из этого гайда вам пригодятся только советы про срок оплаты.

Подпись запросов показана в гайдах для [Node.js](https://cryptolike.net/ru/guides/accept-crypto-payments-nodejs), [PHP](https://cryptolike.net/ru/guides/accept-crypto-payments-php) и [Python](https://cryptolike.net/ru/guides/accept-crypto-payments-python). Примеры ниже используют функцию `cryptolike()` из гайда для Node.js.

## 1. Решите, в чём цена и сколько времени у покупателя

Цену платежа в биткоине CryptoLike принимает в BTC или в фиате. В BTC сумма — ровно та, что вы указали. В USD или EUR курс фиксируется при создании платежа с `coin_id` биткоина и держится до срока, поэтому сумма в BTC на странице не меняется, пока покупатель платит. Как это устроено — в статье [цена в долларах, оплата в криптовалюте](https://cryptolike.net/ru/blog/fiat-priced-crypto-payments).

Для биткоина срок оплаты важнее, чем для быстрых сетей. Платёж, который к сроку всё ещё в статусе `new` или `pending`, становится `expired` — даже если перевод уже в блоке. Деньги, подтверждённые позже, всё равно зачисляются как поздний платёж, но заказ сам в «оплачен» уже не перейдёт. Закладывайте в срок три вещи:

1. **Время покупателя**, чтобы открыть кошелёк и отправить перевод, — часто больше, если он сначала покупает биткоин на бирже.
2. **Первый блок.** В среднем 10 минут, но отдельный блок может выходить гораздо дольше, а перевод с низкой комиссией может ждать несколько блоков.
3. **Подтверждения.** Порог из `GET /v1/currencies`, умноженный примерно на 10 минут.

Параметром `ttl_seconds` срок задаётся для каждого платежа — от 60 секунд до 30 дней; без него действует значение аккаунта, 30 минут, если его не меняли. Для биткоина срок в несколько часов снимает большинство поздних платежей; для цены в долларах помните, что более долгий срок — это и более долгая фиксация курса.

## 2. Найдите биткоин в каталоге

Возьмите из `GET /v1/currencies` запись с `ticker` BTC и `network` btc. Её `id` — это `coin_id` для платежей и выплат, `confirmations` — порог зачисления, а `maintenance: true` означает, что актив временно нельзя выбрать для новых платежей.

```ts
const { currencies } = await cryptolike("GET", "/v1/currencies");
const btc = currencies.find((c: any) => c.ticker === "BTC" && c.network === "btc");
if (!btc || btc.maintenance) throw new Error("Bitcoin is not available right now");
```

Если записи нет, биткоин в вашем аккаунте выключен: включите его в кабинете на странице **Монеты**. В поддержку пишите, только если биткоина там нет вовсе; до тех пор предложите покупателю другой актив.

## 3. Создайте платёж к заказу

Создавайте один платёж на заказ, с номером заказа в `order_id` и в ключе идемпотентности, — тогда двойной клик или повтор запроса не откроют второй платёж. В примере заказ оценён в долларах, у покупателя три часа, актив — биткоин.

```ts
const payment = await cryptolike("POST", "/v1/invoices", {
  amount: "129.00",
  currency: "USD",
  coin_id: btc.id,
  order_id: "A-1003",
  idempotency_by_order_id: true,
  ttl_seconds: 3 * 3600,
  return_url: "https://shop.example/orders/A-1003",
}, "order-A-1003");
// payment.address      → bc1q…
// payment.payer_amount → the exact BTC amount to send
// payment.checkout_url → the payment page for the customer
```

Сохраните `payment.id` в заказе. `503 unavailable` значит, что свежего курса BTC не было: повторите запрос с тем же ключом или выставьте цену в BTC. Не передавайте `coin_id`, если покупатель может выбирать между биткоином и другими активами на странице оплаты.

## 4. Отправьте покупателя на страницу оплаты

Перенаправьте покупателя на `checkout_url` или встройте ту же страницу [виджетом](https://cryptolike.net/ru/docs/widget). На странице — сумма в BTC, сеть, адрес `bc1q` с QR-кодом, предупреждение отправлять только в сети Bitcoin и оставшееся время. QR-код и кнопка «открыть в кошельке» содержат ссылку `bitcoin:` с суммой, поэтому большинство кошельков подставляют и адрес, и сумму.

Две вещи, которые стоит знать плательщику и повторить вашей поддержке, если спросят:

- **Отправляйте точную сумму и только в сети Bitcoin.** Если кошелёк или биржа вычтут свою комиссию из суммы, платёж придёт неполным: при нехватке больше 0,5 % суммы он станет `underpaid`, а меньшая нехватка всё равно засчитывается как `paid`. Плательщик может доплатить на тот же адрес до срока.
- **Комиссия сети — сверху.** Кошелёк плательщика выбирает комиссию в сатоши за виртуальный байт; чем она выше, тем обычно быстрее перевод попадёт в блок. CryptoLike её не назначает и не получает.

## 5. Дождитесь подтверждений и отгружайте по paid

CryptoLike следит за блокчейном Bitcoin блок за блоком. Когда перевод попадает в блок, платёж получает статус `pending` — «Платёж обнаружен. Ожидаем подтверждения.» — и на ваш эндпоинт приходит `invoice.pending`. Каждый новый блок добавляет подтверждение; на пороге платёж становится `paid`, деньги зачисляются, приходит `invoice.paid`. Отгружайте по `invoice.paid`, не раньше.

Переводы, которые есть только в мемпуле — отправлены, но ещё не в блоке, — не показываются как `pending`. Так сделано намеренно: пока перевод не в блоке, его ещё можно заменить, и показ пообещал бы платёж, который может не прийти. Страница обновится, как только первый блок включит перевод. Почему порог в разных сетях разный — в статье [сколько подтверждений нужно платежу](https://cryptolike.net/ru/blog/crypto-payment-confirmations).

Если реорганизация блоков убирает подтверждённый перевод из цепочки, CryptoLike сторнирует зачисление и присылает `invoice.reverted`. Остановите отгрузку до нового `invoice.paid`. Подробнее о [реорганизациях](https://cryptolike.net/ru/glossary/reorg).

## 6. Медленные, заменённые и поздние переводы

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

| Что произошло | Что делает CryptoLike | Что делаете вы |
|---|---|---|
| Перевод с низкой комиссией ждёт блока | Ничего не показывает, пока перевод не в блоке | Ничего; если срок истечёт раньше — см. «поздний» ниже |
| Плательщик заменил перевод (replace-by-fee) до блока | Засчитывается только перевод, попавший в блок | Ничего: замена зачисляется, если платит на этот адрес |
| Замена отправила монеты в другое место | На платёж ничего не приходит | Платёж истекает; покупатель платит заново новым платежом |
| Перевод подтверждён после срока | Зачислен на баланс, `late_payment: true`, `invoice.late_payment` | Решите с покупателем: отгрузить или вернуть деньги |
| Пришло меньше суммы более чем на 0,5 % | `underpaid`; плательщик может доплатить до срока | Подождать, затем отгрузить за меньшую сумму, запросить остаток или вернуть |

Два последних случая подробно разобраны в статье про [недоплату, переплату и поздние платежи](https://cryptolike.net/ru/blog/underpaid-crypto-payments).

## 7. Выплаты в биткоине

Выплаты в BTC уходят с доступного баланса через `POST /v1/withdrawals` на стандартные адреса Bitcoin: legacy (`1…`), script (`3…`), native SegWit (`bc1q…`) или Taproot (`bc1p…`). Сначала вызовите `POST /v1/withdrawals/estimate`: он вернёт комиссию платформы, резерв комиссии сети, итоговое списание и минимальную сумму — всё в BTC и до того, как что-то создано.

Комиссия сети для выплаты в биткоине считается от ставки, которая сейчас нужна сети для подтверждения за несколько блоков. Оценка резервирует её с запасом; в зависимости от режима, который платформа задаёт для вашего аккаунта, вы платите резерв или фактическую комиссию с возвратом остатка. Передавайте свой `payout_id`, чтобы повтор запроса не заплатил дважды, и защитите постоянные адреса [белым списком и вторым подтверждением](https://cryptolike.net/ru/guides/payout-whitelist-dual-approval). Ставки — на странице [тарифов](https://cryptolike.net/ru/pricing).

## Ошибки и что делать

| HTTP · код | Что произошло | Что делать |
|---|---|---|
| `400 validation_error`, поле `amount` | Больше 8 знаков или не положительное число | Округлить до сатоши и отправить снова |
| `409 conflict`, `order_invoice_mismatch` | У заказа есть открытый платёж с другой суммой | Использовать его или, пока он в статусе `new`, отменить и создать новый |
| `503 unavailable` | Нет свежего курса BTC для платежа в фиате | Повторить с тем же `Idempotency-Key` или выставить цену в BTC |
| `422 address_refused` у выплаты | Адрес назначения не принимается | Использовать другой адрес |
| `403 kyb_required` у выплаты | Для выплат нужен верифицированный аккаунт | Пройти верификацию аккаунта в кабинете |

Все коды — в [справочнике API](https://cryptolike.net/ru/docs/api).

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

### Сколько подтверждается платёж в биткоине?

Сеть Bitcoin выпускает блок в среднем раз в 10 минут, а CryptoLike зачисляет BTC на пороге подтверждений актива, опубликованном в GET /v1/currencies. Статус pending появляется, когда первый блок включит перевод. Низкая комиссия сети может задержать этот первый блок.

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

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

### Какой срок оплаты ставить для биткоина?

Заложите время на отправку, на первый блок и на подтверждения. Платёж, который к сроку всё ещё new или pending, истекает, а деньги, подтверждённые позже, приходят как поздний платёж. Срок в несколько часов снимает большинство поздних платежей.

### Можно ли платить через Lightning?

Нет. CryptoLike принимает только ончейн-биткоин в сети Bitcoin. Платежи через Lightning и «обёрнутый» биткоин в других сетях на платёж не попадают. Покупатели со стейблкоинами могут заплатить в USDT в сети TRON или Ethereum.

### Используются ли адреса для платежей повторно?

Нет. Каждый платёж получает новый адрес native SegWit, начинающийся с bc1q, и индекс адреса никогда не используется повторно. Так перевод однозначно связывается с одним платежом без просьб указать назначение платежа.
