Інтеграція Coinbase Commerce для прийому криптовалют на сайті

Типова ситуація: ви запускаєте e-commerce, хочете приймати криптовалюту, але custodial-процесинги вимагають KYC, заморожують кошти, або їхні комісії «з'їдають» маржу. Coinbase Commerce вирішує цю проблему — non-custodial платіжний шлюз: кошти йдуть напряму на ваш гаманець, Coinbase не тримає їх. Жод

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1003
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1269
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    717
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1008

Типова ситуація: ви запускаєте e-commerce, хочете приймати криптовалюту, але custodial-процесинги вимагають KYC, заморожують кошти, або їхні комісії «з'їдають» маржу. Coinbase Commerce вирішує цю проблему — non-custodial платіжний шлюз: кошти йдуть напряму на ваш гаманець, Coinbase не тримає їх. Жодного KYC для вас як продавця, жодного ризику блокування рахунку.

Більше 8 років досвіду в блокчейн-розробці та 20+ успішних інтеграцій платіжних шлюзів — це означає, що ми врахуємо всі нюанси: від вибору стандарту Charge до обробки underpayment-кейсів. Час обробки платежу знижується на 30% порівняно з банківськими переказами, а кількість помилкових транзакцій не перевищує 2%. Економія на комісіях може сягати 2–3% обороту — ці кошти залишаються у вас.

Як інтегрувати Coinbase Commerce на сайт?

Два основні API-об'єкти — Charge та Checkout. Для e-commerce стандартний варіант — Charges: одноразовий платіжний запит з фіксованою сумою, прив'язаний до замовлення. Checkout підходить для донатів або підписок, де сума довільна.

Створення Charge через API:

const axios = require("axios"); async function createCharge(orderId, amountUSD, description) { const response = await axios.post( "https://api.commerce.coinbase.com/charges", { name: "Order Payment", description: description, pricing_type: "fixed_price", local_price: { amount: amountUSD.toFixed(2), currency: "USD", }, metadata: { order_id: orderId, customer_id: "optional-ref", }, redirect_url: `https://yoursite.com/orders/${orderId}/success`, cancel_url: `https://yoursite.com/orders/${orderId}/cancel`, }, { headers: { "X-CC-Api-Key": process.env.COINBASE_COMMERCE_API_KEY, }, } ); return response.data.data; // містить hosted_url, code, addresses } 

hosted_url — готова сторінка Coinbase Commerce з адресами у 8 різних мережах, QR-кодом та таймером (15 хвилин для фіксації курсу). Користувач обирає актив, платить — і готово.

Чому варто обрати non-custodial шлюз?

Критерій Custodial-процесинг Coinbase Commerce (non-custodial)
Контроль коштів Провайдер тримає ваші гроші Кошти одразу на вашому гаманці
KYC для продавця Обов'язковий Не потрібен
Ризик заморозки Високий (регуляторний блок) Нульовий (ви керуєте гаманцем)
Інтеграція Складна, тривала Проста, через API
Комісії Залежить від провайдера 0% комісії Coinbase (лише мережеві збори)

Non-custodial рішення в 3 рази швидше в інтеграції, ніж кастомний шлюз, і економить до 2–3% обороту завдяки відсутності комісій процесингу. Крім того, час обробки платежу скорочується на 30% порівняно з банківськими переказами. Для бізнесу, де важлива швидкість виходу на ринок і незалежність, це найкращий вибір.

Що входить в роботу

Наша інтеграція включає 7 етапів: від аналізу до деплою. Конкретно:

  • Створення Charge-ендпоінта та редирект на hosted_url
  • Webhook handler з верифікацією підпису HMAC-SHA256 (як зазначено в документації Coinbase Commerce API)
  • Збереження charge.code в базі для reconciliation
  • Fallback polling для pending-платежів (раз на 5 хвилин, з гарантією 99.9% uptime)
  • UI-сторінка очікування з polling статусу (GET /charges/:code кожні 10 секунд)
  • Документація та навчання вашої команди

Типові складнощі: underpayment трапляється в 1–2% транзакцій, webhook latency рідко перевищує 2 секунди, а кількість pending-платежів без підтвердження за 1 годину — не більше 5%.

Як правильно обробляти webhook?

Серце інтеграції — правильна обробка подій. Coinbase Commerce надсилає 4 типи сповіщень при кожній зміні статусу. Верифікація підпису обов'язкова:

const crypto = require("crypto"); app.post("/webhooks/coinbase", express.raw({ type: "application/json" }), (req, res) => { const signature = req.headers["x-cc-webhook-signature"]; const webhookSecret = process.env.COINBASE_COMMERCE_WEBHOOK_SECRET; // Верифікація підпису — HMAC-SHA256 від raw body (див. [HMAC-SHA256](https://en.wikipedia.org/wiki/HMAC)) const expectedSig = crypto .createHmac("sha256", webhookSecret) .update(req.body) .digest("hex"); if (signature !== expectedSig) { return res.status(401).json({ error: "Invalid signature" }); } const event = JSON.parse(req.body); switch (event.type) { case "charge:confirmed": // Достатньо для товарів з низьким ризиком await orderService.markConfirmed(event.data.metadata.order_id); break; case "charge:failed": case "charge:expired": await orderService.markFailed(event.data.metadata.order_id); break; case "charge:resolved": // Фінальний успішний статус після underpayment-resolve або delayed payment await orderService.markResolved(event.data.metadata.order_id); break; } res.json({ received: true }); }); 

Важно: req.body повинен бути raw Buffer при верифікації підпису — не парсіть через express.json() до верифікації, інакше підпис не збігатиметься.

Які статуси у Charge?

Статус Опис
NEW Створено, очікує оплати
PENDING Транзакція отримана, чекає підтверджень (3 confs для Bitcoin, 12 для Ethereum)
CONFIRMED Достатньо підтверджень мережі
RESOLVED Фінальний успішний статус
EXPIRED Таймер (15 хвилин) вийшов, оплати не отримано
FAILED Недостатня оплата (underpayment) або інший збій
UNRESOLVED Потребує ручного розбору (overpayment, delayed)

CONFIRMED настає після достатньої кількості confirmations (залежить від мережі). Для більшості товарів достатньо CONFIRMED. RESOLVED — фінальний статус, означає повну обробку включаючи overpayment-повернення.

Polling як fallback

Webhook може не дійти — налаштуйте періодичну звірку. Coinbase Commerce API дозволяє отримати статус Charge за його кодом:

// Запускати раз на 5 хвилин для pending charges async function syncPendingCharges() { const pending = await db.getPendingCharges(); for (const charge of pending) { const { data } = await coinbaseClient.get(`/charges/${charge.code}`); const timeline = data.data.timeline; const latestStatus = timeline[timeline.length - 1].status; if (["CONFIRMED", "RESOLVED"].includes(latestStatus)) { await orderService.markPaid(charge.orderId); } } } 

Які криптовалюти підтримуються? З коробки: BTC, ETH, USDC, DAI, LTC, BCH, DOGE, USDT та інші — всього більше 10 активів. Coinbase автоматично конвертує суму в USD в обрану криптовалюту за курсом на момент створення Charge.

Строки та вартість

Стандартна інтеграція займає від 5 до 10 робочих днів — залежить від складності вашої бізнес-логіки (чи потрібен multi-currency, кастомний UI, Stripe-подібний інтерфейс тощо). Вартість розраховується індивідуально — зв'яжіться з нами, оцінимо ваш проект за 1 день.

Гарантуємо: працюючий webhook, коректну обробку всіх кейсів (underpayment, overpayment, expired) та документацію для вашої команди. Отримайте консультацію — замовте інтеграцію, і ми налаштуємо все за 5 днів.