Чтобы принимать биткоин на сайте через 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, показан на странице биткоина |
| Интервал блоков | В среднем 10 минут — так устроена сеть |
| Адреса для выплат | Начинающиеся с 1, 3, bc1q или bc1p |
| Не поддерживается | Платежи через Lightning; «обёрнутый» биткоин в других сетях |
Сверено с CryptoLike и документацией для разработчиков Bitcoin 24.09.2026.
Что нужно заранее
Нужен аккаунт CryptoLike с включённым биткоином, API-ключ с правами create_invoice и read и эндпоинт вебхуков на вашем сервере с проверкой подписи. Если сайт работает на WooCommerce, OpenCart, PrestaShop или Magento, шаги 2–5 за вас делает плагин — см. интеграции, — и из этого гайда вам пригодятся только советы про срок оплаты.
Подпись запросов показана в гайдах для Node.js, PHP и Python. Примеры ниже используют функцию cryptolike() из гайда для Node.js.
1. Решите, в чём цена и сколько времени у покупателя
Цену платежа в биткоине CryptoLike принимает в BTC или в фиате. В BTC сумма — ровно та, что вы указали. В USD или EUR курс фиксируется при создании платежа с coin_id биткоина и держится до срока, поэтому сумма в BTC на странице не меняется, пока покупатель платит. Как это устроено — в статье цена в долларах, оплата в криптовалюте.
Для биткоина срок оплаты важнее, чем для быстрых сетей. Платёж, который к сроку всё ещё в статусе new или pending, становится expired — даже если перевод уже в блоке. Деньги, подтверждённые позже, всё равно зачисляются как поздний платёж, но заказ сам в «оплачен» уже не перейдёт. Закладывайте в срок три вещи:
- Время покупателя, чтобы открыть кошелёк и отправить перевод, — часто больше, если он сначала покупает биткоин на бирже.
- Первый блок. В среднем 10 минут, но отдельный блок может выходить гораздо дольше, а перевод с низкой комиссией может ждать несколько блоков.
- Подтверждения. Порог из
GET /v1/currencies, умноженный примерно на 10 минут.
Параметром ttl_seconds срок задаётся для каждого платежа — от 60 секунд до 30 дней; без него действует значение аккаунта, 30 минут, если его не меняли. Для биткоина срок в несколько часов снимает большинство поздних платежей; для цены в долларах помните, что более долгий срок — это и более долгая фиксация курса.
2. Найдите биткоин в каталоге
Возьмите из GET /v1/currencies запись с ticker BTC и network btc. Её id — это coin_id для платежей и выплат, confirmations — порог зачисления, а maintenance: true означает, что актив временно нельзя выбрать для новых платежей.
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 и в ключе идемпотентности, — тогда двойной клик или повтор запроса не откроют второй платёж. В примере заказ оценён в долларах, у покупателя три часа, актив — биткоин.
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 или встройте ту же страницу виджетом. На странице — сумма в 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. Так сделано намеренно: пока перевод не в блоке, его ещё можно заменить, и показ пообещал бы платёж, который может не прийти. Страница обновится, как только первый блок включит перевод. Почему порог в разных сетях разный — в статье сколько подтверждений нужно платежу.
Если реорганизация блоков убирает подтверждённый перевод из цепочки, CryptoLike сторнирует зачисление и присылает invoice.reverted. Остановите отгрузку до нового invoice.paid. Подробнее о реорганизациях.
6. Медленные, заменённые и поздние переводы
Перевод в биткоине может идти долго или измениться до подтверждения, и у логики заказа должен быть ответ на каждый случай. Особого кода не нужно: статус платежа и вебхуки уже всё это выражают.
| Что произошло | Что делает CryptoLike | Что делаете вы |
|---|---|---|
| Перевод с низкой комиссией ждёт блока | Ничего не показывает, пока перевод не в блоке | Ничего; если срок истечёт раньше — см. «поздний» ниже |
| Плательщик заменил перевод (replace-by-fee) до блока | Засчитывается только перевод, попавший в блок | Ничего: замена зачисляется, если платит на этот адрес |
| Замена отправила монеты в другое место | На платёж ничего не приходит | Платёж истекает; покупатель платит заново новым платежом |
| Перевод подтверждён после срока | Зачислен на баланс, late_payment: true, invoice.late_payment |
Решите с покупателем: отгрузить или вернуть деньги |
| Пришло меньше суммы более чем на 0,5 % | underpaid; плательщик может доплатить до срока |
Подождать, затем отгрузить за меньшую сумму, запросить остаток или вернуть |
Два последних случая подробно разобраны в статье про недоплату, переплату и поздние платежи.
7. Выплаты в биткоине
Выплаты в BTC уходят с доступного баланса через POST /v1/withdrawals на стандартные адреса Bitcoin: legacy (1…), script (3…), native SegWit (bc1q…) или Taproot (bc1p…). Сначала вызовите POST /v1/withdrawals/estimate: он вернёт комиссию платформы, резерв комиссии сети, итоговое списание и минимальную сумму — всё в BTC и до того, как что-то создано.
Комиссия сети для выплаты в биткоине считается от ставки, которая сейчас нужна сети для подтверждения за несколько блоков. Оценка резервирует её с запасом; в зависимости от режима, который платформа задаёт для вашего аккаунта, вы платите резерв или фактическую комиссию с возвратом остатка. Передавайте свой payout_id, чтобы повтор запроса не заплатил дважды, и защитите постоянные адреса белым списком и вторым подтверждением. Ставки — на странице тарифов.
Ошибки и что делать
| 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.
Вопросы и ответы
Сколько подтверждается платёж в биткоине?
Сеть Bitcoin выпускает блок в среднем раз в 10 минут, а CryptoLike зачисляет BTC на пороге подтверждений актива, опубликованном в GET /v1/currencies. Статус pending появляется, когда первый блок включит перевод. Низкая комиссия сети может задержать этот первый блок.
Почему страница оплаты не сразу показывает мой перевод?
CryptoLike показывает перевод в биткоине, как только его включит блок. Перевод, который только отправлен, ещё можно заменить или потерять, поэтому как pending он не показывается. При низкой комиссии первого блока придётся подождать; страница обновится, как только он выйдет.
Какой срок оплаты ставить для биткоина?
Заложите время на отправку, на первый блок и на подтверждения. Платёж, который к сроку всё ещё new или pending, истекает, а деньги, подтверждённые позже, приходят как поздний платёж. Срок в несколько часов снимает большинство поздних платежей.
Можно ли платить через Lightning?
Нет. CryptoLike принимает только ончейн-биткоин в сети Bitcoin. Платежи через Lightning и «обёрнутый» биткоин в других сетях на платёж не попадают. Покупатели со стейблкоинами могут заплатить в USDT в сети TRON или Ethereum.
Используются ли адреса для платежей повторно?
Нет. Каждый платёж получает новый адрес native SegWit, начинающийся с bc1q, и индекс адреса никогда не используется повторно. Так перевод однозначно связывается с одним платежом без просьб указать назначение платежа.