Payin Classic

Prepare → Confirm

Двухэтапное создание операции пополнения.

Двухэтапное пополнение

Создание операции пополнения — двухэтапное:

/prepare_topup

Регистрирует операцию. Клиенту ещё не выставляется счёт — операция подготовлена.

/confirm_topup

Запускает операцию. Должен быть вызван сразу после /prepare_topup — иначе подготовленная операция отменится.

/prepare_topup

Запрос

{
  "Datetime": "2009-11-10T23:01:02+03:00",
  "Payload": {
    "Payer": "someUserName",
    "Currency": "RUB",
    "DesireSum": 1000.01,
    "WorkKind": "topupMerchantAccount",
    "paymentMethod": "sbp",
    "FailRedirectUrl": "https://example.com/fail",
    "SuccessRedirectUrl": "https://example.com/success",
    "payerBank": "100000000111"
  }
}
ПолеОбяз.Описание
PayerдаУникальный идентификатор пользователя в системе мерчанта
CurrencyдаRUB. Поддержка USDT — по согласованию; для USDT указывайте walletAddress.
DesireSumдаЖелаемая сумма пополнения (> 0)
WorkKindдаВарианты ниже
paymentMethodдаМетод оплаты: card, sbp, tpay или any. any — без привязки к методу (выбор на стороне виджета).
payerBankопц.¹Код банка плательщика (отправителя). ¹Может быть обязательным по условиям работ.
FailRedirectUrl, SuccessRedirectUrlопц.Куда редиректить пользователя по итогу платежа. Не полагайтесь на то, что пользователь их посетит.
WebhookStatusUrlопц.URL (http/https), на который POST-ом приходят смены статуса операции. См. Статус операции.
emailопц.E-mail плательщика.
userCreatedAtопц.Дата регистрации пользователя в системе мерчанта (ISO 8601, напр. 2009-11-10T23:01:02+03:00).
walletAddressопц.Адрес кошелька плательщика (для крипто-пополнений / USDT).
paymentMethodобязателен. Запрос без него отклоняется с ErrorInfo.Code = otherError (malformed request: payment method is empty).

Значения WorkKind:

  • topupMerchantAccount — базовый.
  • topupMerchantAccount_usingTelegram — согласовывается через менеджера.
  • topupMerchantAccount_usingWebsite — согласовывается через менеджера.

Пример с дополнительными опциональными полями:

{
  "Datetime": "2009-11-10T23:01:02+03:00",
  "Payload": {
    "Payer": "someUserName",
    "Currency": "RUB",
    "DesireSum": 1000.01,
    "WorkKind": "topupMerchantAccount",
    "paymentMethod": "card",
    "payerBank": "100000000111",
    "WebhookStatusUrl": "https://example.com/webhooks/topup-status",
    "email": "payer@example.com",
    "userCreatedAt": "2024-01-15T10:00:00+03:00"
  }
}

Ответ

{
  "SuccessCall": true,
  "Datetime": "2009-11-10T23:01:02+03:00",
  "Payload": {
    "RegisteredUid": "1234567"
  }
}

RegisteredUid — идентификатор операции (строка с числовым значением), нужен для /confirm_topup и /topup_status. Передавайте его обратно без изменений.

При ошибке запрос можно повторить через 5 секунд.

/confirm_topup

Вызов можно делать несколько раз — повторно операция не создаётся. Но вызвать хотя бы один раз после /prepare_topup обязательно, иначе операция будет отменена.

Запрос

{
  "Datetime": "2009-11-10T23:01:02+03:00",
  "Payload": {
    "RegisteredUid": "1234567"
  }
}

Ответ

{
  "SuccessCall": true,
  "Datetime": "2009-11-10T23:01:02+03:00",
  "Payload": {
    "RedirectUrl": "https://example.com/path/page"
  }
}

Пользователя нужно перенаправить на RedirectUrl методом GET.

Обработка ошибочного ответа

Ошибочный ответ не означает, что запрос фактически не выполнен (например, сервер мог получить запрос, но ответ потерялся из-за сетевого сбоя). Обязательно:

  • повторите запрос через несколько секунд, или
  • запросите статус через /topup_status.
Copyright © 2026