К содержимому

Монеты и сетиГайд

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

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

Чтобы принимать биткоин на сайте через 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 — даже если перевод уже в блоке. Деньги, подтверждённые позже, всё равно зачисляются как поздний платёж, но заказ сам в «оплачен» уже не перейдёт. Закладывайте в срок три вещи:

  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 или встройте ту же страницу виджетом. На странице — сумма в 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, и индекс адреса никогда не используется повторно. Так перевод однозначно связывается с одним платежом без просьб указать назначение платежа.

Термины на странице

Читать дальше

Начните с тестового платежа

Создайте аккаунт, попросите у поддержки доступ к тестовой среде и посмотрите, как платёж проходит путь от pending до paid в тестовой сети.