Выберите, как будет платить покупатель
| Вариант | Кому подходит | Сложность |
|---|---|---|
Готовая страница оплаты — перенаправление на checkout_url | Любой сайт, самый быстрый запуск. Показывает сумму, сеть, адрес, QR и живой статус | Один API-запрос |
Своя страница оплаты — показываете crypto.address и crypto.amount_coin | Свой UX, покупатель не уходит с вашего домена | API-запрос + ваш интерфейс |
| CMS — WooCommerce, Shopify | Магазины на платформах | См. разделы ниже |
Шаг 1 — создайте заказ на сервере
Никогда не создавайте заказы из браузера с секретным ключом. Вызывайте API со своего сервера, передавая сумму корзины и монету, которую выбрал покупатель:
curl -X POST https://api.utopay.app/v1/crypto/payments \
-H "Authorization: Bearer utopay_sk_live_..." \
-H "content-type: application/json" \
-d '{ "coin": "bep20/usdt", "amount": 49.90, "currency": "EUR",
"description": "Order #1042",
"success_url": "https://shop.example/thanks",
"cancel_url": "https://shop.example/cart" }'
С аккаунтом кошелёк для выплат берётся из настроек проекта. Без аккаунта используйте POST /v1/crypto/pay и передайте payout_address. Список монет и сетей с минимальными суммами — в GET /v1/crypto/coins.
Шаг 2 — отправьте покупателя на оплату
- Перенаправьте на
checkout_url: страница показывает точную сумму, сеть, QR-код и живой статус, а затем возвращает покупателя на вашsuccess_url. - Или выведите
crypto.addressиcrypto.amount_coinсами и опрашивайтеGET /v1/payments/:id, пока покупатель на странице.
Шаг 3 — подтвердите оплату вебхуком
Не доверяйте одному лишь возврату на сайт. Отмечайте заказ оплаченным, когда ваш эндпоинт получит подписанное событие payment.succeeded; обрабатывайте payment.underpaid, если пришло меньше запрошенного. Проверяйте заголовок x-utopay-signature своим секретом whsec_… — примеры на Node.js, PHP и Python есть в документации по вебхукам.
<?php // PHP: проверка вебхука UTOPAY
$raw = file_get_contents("php://input");
parse_str(str_replace(",", "&", $_SERVER["HTTP_X_UTOPAY_SIGNATURE"]), $sig);
$expected = hash_hmac("sha256", $sig["t"] . "." . $raw, getenv("UTOPAY_WHSEC"));
if (!hash_equals($expected, $sig["v1"] ?? "") || abs(time() - (int)$sig["t"]) > 300) {
http_response_code(400); exit;
}
$event = json_decode($raw, true);
if ($event["event"] === "payment.succeeded") { /* отметить $event["data"]["id"] оплаченным */ }
http_response_code(200);
WordPress и WooCommerce
Для WooCommerce есть готовый плагин UTOPAY — см. раздел плагины. Без плагина магазин на WooCommerce подключается через API: создайте заказ в хуке woocommerce_checkout_order_processed, отправьте покупателя на checkout_url и завершите заказ из обработчика вебхука.
Shopify
Shopify показывает как платёжный шлюз только одобренные платёжные приложения. Рабочая схема — ручной способ оплаты (например, «Оплата криптой») плюс страница оплаты UTOPAY: при оформлении заказа ваше приложение или автоматизация создаёт заказ UTOPAY на сумму покупки и отправляет покупателю письмо с checkout_url. Затем вебхук отмечает заказ в Shopify оплаченным.
Чек-лист перед запуском
- Проверьте весь сценарий с тестовыми ключами (
utopay_sk_test_…) — тестовые заказы не уходят в блокчейн. - Убедитесь, что кошелёк для выплат поддерживает все сети, которые вы предлагаете.
- Показывайте название сети рядом с суммой — переводы не в ту сеть самая частая причина обращений в поддержку.
- Храните
idзаказа UTOPAY вместе со своим заказом и дедуплицируйте вебхуки по нему. - Решите заранее, что делать с заказами в статусе
underpaid.
Обновлено · Команда UTOPAY