protopaysAPI

Создание платежа

В ответе — requisite (СБП, карта и др.) или checkoutUrl для квази-еком или m2tjs. Статус — GET или webhook.

POSThttps://api.protopays.io/api/v1/payments

Параметры тела (JSON)

Мерчант — из заголовков, не из тела. Подпись — от байт JSON ниже.

ПолеТипОбяз.Описание
orderIdstringдаВаш id заказа. Повтор с тем же method → тот же платёж.
amountnumber | stringдаСумма, минимум 1.
currencystringдаRUB, AZN, KZT, TRY, UZS, MNT и др. — по кассе.
callbackUristring (URL)даHTTPS URL для webhook.
methodstringдаСпособ оплаты: sbp | sim | card

Методы

methodВалюта
sbpRUB, KZT
simRUB
kaRUB
c2cRUB, AZN, KZT, MNT
kapitalAZN
biznesAZN
dostAZN
humoUZS
uzcardUZS
m10AZN
account_ruRUB
ibanTRY, MNT
qr_nspkRUB
quasi_ecomAZN, TRY
m2tjsRUB
payerobjectнетОпционально: userId игрока, userIp, fullName, type, payments. Для квази-еком userId нужен, чтобы на этой кассе карта подставлялась в следующий платёж того же игрока.

Для MNT: method c2c (карта) или iban. Пример: {"currency":"MNT","method":"c2c"}. Выплаты в MNT трейдеру включает администратор.

Заголовки

Content-Type, X-Merchant-Key-Id, Signature — см. аутентификацию.

Примеры запроса

curl

curl
curl -X POST 'https://api.protopays.io/api/v1/payments' \
  -H 'Content-Type: application/json' \
  -H 'X-Merchant-Key-Id: <KEY_ID>' \
  -H 'Signature: <SIGNATURE>' \
  -d '{
    "orderId": "order-001",
    "amount": "1000",
    "currency": "RUB",
    "callbackUri": "https://example.com/hooks/protopays",
    "method": "sbp",
    "payer": {
      "userId": "u-4095",
      "userIp": "188.11.55.10",
      "fullName": "Kim Min-jun",
      "type": "trusted",
      "payments": {
        "successful": 5,
        "expired": 1
      }
    }
  }'

PHP (cURL + hash_hmac)

Base URL, <SECRET>, <KEY_ID> из кабинета. Один и тот же $body — в HMAC и в тело.

php
<?php
$base = rtrim("https://api.protopays.io", '/');
$keyId = '<KEY_ID>';
$secret = '<SECRET>';

$payload = [
    'orderId' => 'order-001',
    'amount' => '1000',
    'currency' => 'RUB',
    'callbackUri' => 'https://example.com/hooks/protopays',
    'method' => 'sbp',
    'payer' => [
        'userId' => 'u-4095',
        'userIp' => '188.11.55.10',
        'fullName' => 'Kim Min-jun',
        'type' => 'trusted',
        'payments' => [
            'successful' => 5,
            'expired' => 1,
        ],
    ],
];
$body = json_encode($payload, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
$signature = hash_hmac('sha256', $body, $secret);

$ch = curl_init("{$base}/api/v1/payments");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'X-Merchant-Key-Id: ' . $keyId,
        'Signature: ' . $signature,
    ],
    CURLOPT_POSTFIELDS => $body,
]);
echo curl_exec($ch);

Ответ

message + data: id, orderId, status, amount, currency, method, requisite, paymentPageUrl (или checkoutUrl для квази), expiresAt, extra.

В extra: fiatPerUsdt — курс (фиат за 1 USDT), marginPercent — комиссия в %, rate — сумма в USDT после комиссии.

json
{
  "message": "Payment created",
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "orderId": "order-001",
    "status": "pending",
    "amount": "1000.00",
    "currency": "RUB",
    "method": "sbp",
    "requisite": {
      "value": "+79991234567",
      "holder": "И. Иванов",
      "bank": "Пример банк"
    },
    "paymentPageUrl": "https://pay.protopays.io/r/rpt_<token>",
    "expiresAt": "2026-04-20T15:30:00+00:00",
    "extra": {
      "rate": "90.00000000",
      "fiatPerUsdt": "100.00000000",
      "marginPercent": "10.00",
      "cryptoCurrency": "USDT"
    }
  }
}