⚡ XPh03niX

PayTransfer API

В админке для каждого API-проекта можно задать Callback URL для webhook и отдельный редирект после успешной оплаты. API рассчитан на работу с поддомена вида api.домен.ru. Внешние проекты создают счета, отправляют клиента на оплату переводом и получают webhook после ручного подтверждения.

Авторизация

Каждый проект получает API key и API secret в админке PayTransfer.

X-Api-Key: pt_xxxxxxxxx
X-Signature: sha256=HMAC_SHA256(raw_json_body, api_secret)

Создать счёт

POST https://api.example.ru/v1/invoices
POST https://api.example.ru/v1/payments

Legacy:
POST /api/v1/invoices
POST /api/v1/payments
Content-Type: application/json
X-Api-Key: pt_xxxxxxxxx
X-Signature: sha256=...
{
  "amount": 1500,
  "currency": "RUB",
  "description": "Оплата тарифа PRO",
  "customer_name": "Иван Иванов",
  "external_order_id": "artistflow_plan_123",
  "success_url": "https://artistflow.ru/payment/success",
  "fail_url": "https://artistflow.ru/payment/fail",
  "callback_url": "https://artistflow.ru/api/payment-callback"
}
{
  "success": true,
  "invoice_id": "PT-260503-ABC12345",
  "payment_url": "https://pay-site.ru/pay?invoice=PT-260503-ABC12345",
  "status": "pending",
  "amount": 1500
}

Проверить статус

GET https://api.example.ru/v1/invoices/PT-260503-ABC12345
GET https://api.example.ru/v1/payments/PT-260503-ABC12345

Legacy:
GET /api/v1/invoices/PT-260503-ABC12345
GET /api/v1/payments/PT-260503-ABC12345
X-Api-Key: pt_xxxxxxxxx

Webhook

callback_url используется только для server-to-server webhook. После смены статуса PayTransfer отправляет POST на callback URL. Подпись приходит в X-PayTransfer-Signature.

{
  "invoice_id": "PT-260503-ABC12345",
  "external_order_id": "artistflow_plan_123",
  "amount": 1500,
  "status": "paid",
  "paid_at": "2026-05-03 01:30:00"
}

PHP-пример подписи

$body = json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$signature = 'sha256=' . hash_hmac('sha256', $body, $apiSecret);

Редирект клиента после подтверждения

После того как админ нажимает Оплачено, страница ожидания клиента получает статус paid через /status-feed и автоматически перенаправляет клиента на success_url. Если счёт не передал success_url, редирект не выполняется. Для старых счетов без success_url сохранён fallback на callback_url.