Skip to main content
Официальная библиотека для PHP. Пакет oblodai/sdk. Без внешних зависимостей (работает на cURL), поддерживает подстановку своего HTTP-транспорта. Требования: PHP 8.0+, расширения json и curl.

Установка

Новое в v1.1.0 (текущая версия в Packagist): группы batches() / links() / splits() / payoutLinks(), методы createBatch / refundBatch / sendEmail / resolve — и ломающее изменение идемпотентности: вместо авто-order_id теперь заголовок Idempotency-Key (см. «Ошибки и повторы»).

Аутентификация (ключи из окружения)

Ключи берутся в кабинете my.oblodai.com — см. Регистрация и ключи. Задайте переменные окружения (не пишите секрет в коде):
Или явно:

Быстрый старт: принять платёж

Совет: не хотите указывать валюту/сеть за покупателя? Не передавайте to_currency и network — получится «валюто-агностичная» ссылка, где покупатель сам выберет монету на странице оплаты.

Ресурсы и методы

Доступ через $client->имя(): Каждый метод возвращает уже развёрнутый result (массив). Точные поля запроса/ответа — в Справочнике.
Всё, что помечено «с v1.1.0», доступно начиная с версии 1.1.0 — если у вас стоит v1.0.x, обновите пакет (composer update oblodai/sdk). Свой ключ идемпотентности в методах создания — 'idempotency_key' в массиве параметров (уйдёт в заголовок).
Крипто-чек за 4 строки — выплата без адреса получателя (заберёт сам по ссылке):
  • Задавайте expires_in_hours явно: без него чек живёт всего 1 час.
  • claim_url / claim_token возвращаются только из create, один раз — сохраните сразу.
  • Дедупликация — поле reference (заголовок Idempotency-Key на этих эндпоинтах не действует).
Подробности — Массовые операции, Платёжные ссылки, Сплит-платежи, Счета на e-mail, Крипто-чеки, Резолв платежа.

Валюта цены и валюта расчёта

В примере выше 'currency' => 'USD'валюта цены, а 'to_currency' => 'USDT'валюта расчёта. Это разные вещи:
  • currency (цена) — одна из 23 фиатных валют: USD, EUR, GBP, RUB, UAH, PLN, CZK, TRY, CNY, INR, BRL, CAD, AUD, CHF, AED, ZAR, MXN, IDR, THB, VND, NGN, JPY, KRW — или любая монета (USDT, BTC, TRX, …).
  • to_currency (расчёт)только крипта. Фиата здесь не бывает: баланс, выплаты и возвраты всегда в монете, шлюз не хранит фиат.
  • У JPY и KRW ноль знаков после запятой ('amount' => '10000', не '10000.00'); у остальных — 2.
  • KZT, KGS, UZS пока не поддерживаютсяpayment.unknown_currency.
  • Фиатная цена + только network без to_currency400 payment.to_currency_required. Либо задайте to_currency, либо не задавайте ни то, ни другое (тогда монету выберет покупатель).
Полный список валют цены — $client->rates()->currencies(), поле pricing_currencies.

Проверьте, что заработало

  1. Запустите код создания платежа из «Быстрого старта». В ответе должен прийти url — это ссылка на hosted-страницу оплаты. Откройте её в браузере: если страница открылась, приём платежей настроен.
  2. Чтобы реально поймать вебхук об оплате на локальной машине, нужен публичный HTTPS-адрес — поднимите туннель (ngrok / cloudflared) и укажите его URL в url_callback. Подробнее — в Тестировании и Настройке вебхуков.

Вебхуки

Шаг 1. Регистрация (один раз)
Важно: этот webhook-секрет — не ваш API-secret. Без регистрации Oblodai не будет слать уведомления.
Шаг 2. Приём (обязательно СЫРОЕ тело)
Статусы payment_status: check, confirm_check, paid, paid_over, wrong_amount, wrong_amount_waiting, cancel, select. Оплаченными считайте только paid и paid_over.

Ошибки и повторы

Клиент сам повторяет 5xx / 429 / сетевые сбои с экспоненциальной задержкой и учётом заголовка Retry-After. Отключить повторы: new Client($id, $secret, ['retry' => false]). Повтор безопасен, но механизм зависит от версии: В обеих версиях таймаут/обрыв сети не создаст дубль счёта или перевода. Для выплат order_id обязателен всегда — его задаёте вы (иначе payout.order_id_required).

Свой HTTP-транспорт (необязательно)

По умолчанию — cURL. Хотите Guzzle / PSR-18 / мок для тестов — реализуйте интерфейс Oblodai\Http\Transport:

Логи и отладка

Включите логи одной переменной окружения — увидите каждый запрос/ответ/ретрай:
Строки идут в stderr с префиксом oblodai: (метод, путь, статус, номер попытки, задержка ретрая). Секреты, подпись и тела запросов в лог не попадают. Вместо переменной можно задать свой логгер — опция logger в конфиге:
Проверяете подпись вебхука статичным (старым) вектором? По умолчанию действует окно свежести 5 минут — старый timestamp отклонит replay-защита (валидная подпись → всё равно ошибка). Для офлайн-проверки задайте окно 0: Webhooks::constructEvent($secret, $raw, $ts, $sig, maxAgeSeconds: 0).

Если не получилось

Полная диагностика — Что делать, если не работает.

Связанные страницы

Обзор SDK

Приём первого платежа

Настройка и приём вебхуков

Справочник кодов ошибок