Переезд с другой платёжки — без переписывания кода
Уже интегрированы с Cryptomus / NOWPayments / Coinbase Commerce? Смените в SDK только base-URL и ключ — мы принимаем их формат create-invoice, отдаём нашу страницу оплаты в их формате ответа и шлём вебхук в их схеме с подписью, так что ваш verify-код работает как есть. Сопоставление по order_id.
Нужен другой процессор — напишите, добавим адаптер (это один модуль).
Приём оплаты внутри вашего Telegram-бота
Ваш бот — мерчант? Не уводите пользователя на сайт или в чужой кошелёк-бот. Бот дёргает наш API, показывает адрес + сумму + QR прямо в чате и сам меняет сообщение на «✅ Оплачено», как только платёж подтвердится в сети. Тот же in-bot UX, что у CryptoBot, но крипта идёт напрямую вам, ключи ваши, комиссия — копейки.
1. POST /v1/invoices # ваш API-ключ → { id, pay_address, pay_uri, amount_expected }
2. bot.sendPhoto( https://paygate.love/i/<id>/qr.png ) # публичный QR, Telegram сам его фетчит
+ кнопка «Открыть кошелёк» → pay_uri
3. наш вебхук invoice.paid → bot.editMessage → «✅ Оплачено»
Пользователь вообще не покидает бота мерча. QR-ручка /i/<id>/qr.png публичная (кодирует только адрес). Готовый copy-paste пример (grammy/telegraf) — в docs/BOT-INTEGRATION.md.
Для стримеров: донат-алерты, цель сбора, лидерборд
Все стримерские ручки ниже используют alert-токен — он уже вшит в ссылки оверлея и лидерборда на странице «Алерты» кабинета. Это read-only-возможность: API-ключ он не заменяет, но ссылку виджета публично не выкладывайте. Под капотом донат — это обычный инвойс с именем и сообщением донатера.
Как подключить донаты на стриме — по шагам
Зарегистрируйтесь как стример: на странице регистрации выберите тип аккаунта «Стример / блогер» — кабинет настроится под донаты.
Откройте Кабинет → «Алерты»: там живут ссылка оверлея (/alerts/widget?token=…), настройки вида алертов и редактор цели. Скопируйте ссылку оверлея.
В OBS/Streamlabs: Sources → «+» → Browser Source → вставьте ссылку, задайте размер холста (например 1920×1080) → OK. Алерты и полоса цели теперь рендерятся на стриме; проверьте кнопкой тестового доната.
Задайте цель сбора на той же странице «Алерты» — название, сумма и валюта. Прогресс-бар появится в оверлее и в GET /alerts/goal.
Создайте донат-ссылку (Кабинет → «Ссылки»), поделитесь ссылкой/QR со зрителями и запостите публичный лидерборд /d/<token> в своём канале.
Продвинутое: заливайте донаты с других платформ через POST /v1/donations/external или питайте сторонний прогресс-бар из GET /alerts/goal — детали ниже.
OBS-оверлей (Browser Source)
Готовая HTML-страница с живыми донат-алертами и полосой цели — добавьте её в OBS/Streamlabs как Browser Source:
Публичный JSON текущей цели (токен — и есть доступ; кэш ~5 с). Любой сторонний виджет прогресс-бара может поллить эту ручку и показывать общий итог где угодно — так фандрайзер paygate подключается к чужой полосе.
curl "https://paygate.love/alerts/goal?token=<alertToken>"
→ { "active": true, "title": "New PC", "target": 1000,
"current": 337.5, "currency": "USD" }
# цель не задана → { "active": false }
Внешние донаты — объединить источники в одной полосе (push)
Запишите донат, случившийся в другом месте (PayPal, DonationAlerts, вручную), чтобы он засчитался в ТУ ЖЕ полосу цели и, по желанию, вызвал тот же OBS-алерт. Одна полоса — все источники: крипта плюс всё, что вы сюда пушите. Авторизация: ваш API-ключ.
Поля: amount (>0, обязательное), currency (по умолчанию USD), name (≤60), message (≤300), source (≤40, по умолчанию "api"), fire_alert (по умолчанию true). Сумма конвертируется в USD для итога цели.
Живой поток алертов (SSE)
Server-Sent Events с каждым донатом — соберите полностью свой оверлей вместо нашего виджета:
const es = new EventSource(
"https://paygate.love/alerts/stream?token=<alertToken>");
es.onmessage = (e) => {
const d = JSON.parse(e.data); // { name, amount, currency, asset, message }
showAlert(d);
};
Публичный лидерборд
Шарибельная публичная страница топ-донатеров (топ, последние донаты, цель) — запостите её в описании канала или в чате:
https://paygate.love/d/<alertToken>
Выплаты: по умолчанию донаты кастодиальные — выводите из кабинета когда угодно. Либо добавьте xpub своего кошелька в кабинете (non-custodial) — и донаты будут падать сразу в ваш кошелёк в EVM / TRON / BTC / LTC / DOGE.
Реферальная программа
Приглашайте магазины и стримеров — и получайте долю нашей комиссии с каждого их платежа, пожизненно. Ставка по умолчанию — 20%, и она может выставляться индивидуально для каждого партнёра.
https://paygate.love/?ref=<yourCode>
Ваша уникальная ссылка — в Кабинете → «Рефералы». Каждый, кто зарегистрируется по ней (код ?ref= подхватывается через cookie, либо вводится в необязательное поле на форме регистрации), закрепляется за вами навсегда.
Начисления происходят автоматически по каждому подтверждённому (оплаченному) инвойсу приглашённого мерчанта, в USD; статистика и суммы — в Кабинете → «Рефералы».
💸 Prepaid-кошелёк донатера (мгновенные донаты)
Зритель пополняет кошелёк один раз (крипта подтверждается один раз), а потом шлёт мгновенные донаты любому стримеру Paygate из внутреннего баланса — алерт всплывает сразу, без ожидания подтверждения сети на каждый донат. Донаты падают в ваш обычный баланс, выводите как всегда. Страница кошелька: /w (ссылка на предъявителя, токен в #fragment — не попадает в логи).
🧩 Установка плагинов
Перед началом возьмите API-ключ и secret на странице «Настройки» вашего магазина. ⚙️
🛒 WooCommerce — установка
Скачайте zip плагина (кнопка «Скачать» на странице Плагины или в кабинете).
WP-админка → Плагины → Добавить новый → Загрузить плагин → выберите zip → Установить → Активировать.
Заказ создаётся в pending, статус обновляется по подписанному webhook (ipn_paygate.php).
🏪 osCommerce — установка
Скачайте zip (цель — osCommerce 2.3.x): файл модуля в includes/modules/payment/, callback.php в ext/modules/payment/paygate/, язык в includes/languages/english/....
Это лёгкий мост, а не платный SDK-модуль: распакуйте архив в веб-доступную папку, напр. https://ваш-биллинг/paygate/.
HostBill → Settings → API: создайте API-пользователя, впишите IP этого сервера в whitelist. Скопируйте config.sample.php → config.php и заполните ключи HostBill + Paygate + случайный link_secret.
В настройках магазина Paygate укажите webhook/callback → https://ваш-биллинг/paygate/callback.php. Оплата закрывает инвойс автоматически через Admin API (addInvoicePayment).
Кнопку «Pay with Crypto» на инвойсе добавьте хуком hooks/paygate_button.php (в includes/hooks/) или готовой подписанной ссылкой pay.php?invoice_id=…&token=… — см. README.
🖥️ WISECP — установка
Скопируйте папку coremio/ из архива поверх корня WISECP (модуль ляжет в coremio/modules/Payment/Paygate/).
Webhook настраивать не нужно: модуль сам передаёт callback-ссылку при каждом чекауте. Оплата подтверждается подписанным webhook.
🧾 ClientExec — установка
Распакуйте архив в plugins/gateways/paygate/ вашего ClientExec.
Settings → Plugins → Payment Processors → активируйте Paygate и вставьте API-ключ и secret (base URL — https://paygate.love).
Webhook: https://ваш-домен/plugins/gateways/paygate/callback.php — укажите его в настройках магазина Paygate.
🎨 Tilda — установка (универсальная платёжка)
Это самостоятельный мост: распакуйте архив на свой PHP-хостинг (напр. https://ваш-домен/paygate/), заполните config.php по образцу.
В Тильде: Настройки сайта → Платёжные системы → Универсальная платёжная система → API URL = https://ваш-домен/paygate/receive.php; поля и подпись — по README.
Webhook Paygate: https://ваш-домен/paygate/callback.php. После оплаты мост сам шлёт подписанное уведомление в Тильду — заказ помечается оплаченным.
🛒 BigCommerce — установка (мост)
Нативный список платёжек BigCommerce закрыт партнёркой, поэтому это мост: распакуйте архив на свой PHP-хостинг и заполните config.php.
В BigCommerce создайте Store-level API-аккаунт (scope Orders), включите оффлайн-метод «Cryptocurrency (Paygate)» и добавьте кнопку оплаты по README (Script Manager).
Webhook Paygate: https://ваш-домен/paygate/callback.php — после оплаты заказ автоматически переходит в Awaiting Fulfillment.
🛍️ Zid — установка (приватный мост)
В App Store Zid крипту не пускают (SAMA), поэтому мост ставится приватно под ваши партнёрские креды. Разверните Node-сервис из архива (npm i && npm run build).
Заполните .env (токены Zid, ключи Paygate), зарегистрируйте webhook на создание заказа по README.
Покупатель платит по ссылке /pay/:orderId; после подтверждения мост помечает заказ оплаченным через API Zid.
Ответ содержит id, pay_address, pay_uri, expires_at. Отправьте покупателя на /pay/.
Необязательные поля запроса: quote_currency (валюта суммы, по умолчанию USD), order_id, callback_url (вебхук для этого инвойса), success_url (куда вернуть покупателя), test (песочница). Полный ответ содержит также status, network, asset, amount_expected, rate_locked, fee_percent, telegram_url.
Песочница: добавьте "test": true — инвойс не отслеживается в блокчейне и не влияет на баланс; «оплату» можно симулировать в кабинете для проверки вебхуков. Вебхук такого инвойса подписан так же, но содержит "test": true — отгружайте товар только при test === false.
1b. Живой курс — цена в USD → сумма в BTC/LTC
GET /v1/quote?asset=BTC"e_currency=USD
X-Api-Key: pk_...
→ { "asset": "BTC", "quote_currency": "USD", "rate": "63022.25" }
# price a $12.99 item in BTC:
# amount = 12.99 / 63022.25 = 0.00020612 → send as "amount" to /v1/invoices
# optional: pass &amount=12.99 to get "quote_amount" back too
Сумма (amount) задаётся в валюте quote_currency (по умолчанию USD) — шлюз сам пересчитывает её в монету по живому курсу, считать вручную ничего не нужно. Для USDT/USDC при USD это 1:1. Чтобы задать сумму сразу в монете, укажите quote_currency равным символу монеты (например quote_currency=BTC) — тогда пересчёта нет. Курс тянется с CoinGecko/Coinbase, обновляется каждые ~45 сек и фиксируется в инвойсе (rate_locked), поэтому покупатель всегда платит корректную актуальную сумму. В ответе возвращаются quote_amount (как прислали) и amount_expected (итог в монете).
Не хотите считать сами? Используйте POST /v1/checkouts с суммой в USD — покупатель сам выберет монету, а конвертацию по живому курсу сделаем мы.
POST /v1/checkouts с суммой создаёт ссылку, где сеть и монету выбирает покупатель — идеально без интеграции. Ответ: checkout_url, short_url, telegram_url, expires_at. Поддерживаются те же order_id, callback_url и success_url, что и у инвойса.
🤖 Приём оплаты в Telegram-боте / магазине
Продаёте прямо в Telegram? Не нужен свой сайт. Ваш бот создаёт чек через API и получает telegram_url — deep-link, который открывает оплату прямо внутри нашего Telegram-бота: покупатель выбирает монету/сеть, видит адрес и QR, платит. Вы получаете подписанный вебхук и выдаёте товар.
Покупатель жмёт «Купить» в вашем боте → ваш бот вызывает POST /v1/checkouts (с order_id и callback_url).
Ваш бот отвечает инлайн-кнопкой со ссылкой telegram_url (или short_url для оплаты на веб-странице).
Покупатель оплачивает не выходя из Telegram → вам приходит вебхук invoice.paid → бот выдаёт товар/доступ.
Совет: используйте telegram_url для оплаты внутри Telegram, short_url — если хотите обычную веб-страницу оплаты. order_id привяжите к покупателю (chat id) и заказу, чтобы вебхук однозначно сматчился. Никогда не выдавайте товар, пока test=false.
Статусы: pending → detected → paid (а также underpaid, overpaid, expired, cancelled, settled).
Ещё эндпоинты
GET /v1/invoices — список инвойсов с пагинацией (limit до 200, offset, фильтр по status). POST /v1/invoices/<id>/cancel — отменить pending/detected (шлёт invoice.cancelled). GET /v1/quote?asset="e_currency=&amount= — предпросмотр курса и пересчёт суммы. GET /v1/networks — список сетей и монет (без ключа). GET /v1/reconciliation?from=&to= — сверка «выставлено vs получено» (лимит 30 запросов/мин).
Сверка: GET /v1/reconciliation?from=&to= — сколько выставлено vs получено (за вычетом комиссии) + расхождения по заказам (недоплаты/переплаты/неоплаченные). Мы — источник правды по факту оплаты; для non-custodial сверяйтесь по своему кошельку. Инструмент даёт данные — решения (отгрузка, споры) на вашей стороне.
3. Webhook
При смене статуса шлём POST на ваш webhook URL. Заголовок X-Signature = HMAC-SHA256(тело, api_secret). Проверьте подпись и свежесть (timestamp) до обработки.
// Node — verify signature (constant-time), dedupe, gate on test
import crypto from "node:crypto";
const expected = crypto.createHmac("sha256", API_SECRET).update(rawBody).digest("hex");
const sig = String(req.headers["x-signature"] ?? "");
if (sig.length !== expected.length ||
!crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected)))
return res.sendStatus(401);
const evt = JSON.parse(rawBody);
if (Date.now() - new Date(evt.timestamp) > 5*60_000) return res.sendStatus(400); // anti-replay
if (seen(req.headers["x-webhook-id"])) return res.sendStatus(200); // idempotency
if (evt.event === "invoice.paid" && evt.test === false) fulfil(evt.order_id); // only real payments
Доставка: 3 быстрых попытки, затем очередь до 12 попыток с backoff до 1 часа. Дубли отсекайте по X-Webhook-Id. URL вебхука должен быть публичным http(s) — localhost/приватные адреса и редиректы отклоняются. Не отгружайте товар, пока test не равен false.
Хардненинг
Idempotency-Key на создание инвойса — ретраи не плодят дубли.