Skip to content

Шаг 4. Финализация платежа

В двухэтапной парадигме ожидается, что на первом шаге клиент видит финальную ставку для себя и принимает решение о необходимости перевода, если он соглашается с условиями, мерчант присылает запрос на финализацию платежа c деталями о получателе и отправителя.

Запрос:

curl -X POST https://api.creon.ae/v2/payout \
     -H "Authorization: Bearer <ACCESS_TOKEN>" \
     -H "Content-Type: application/json" \
     -d '{"quoteId":"<QUOTE_ID>","invoiceId":"<INVOICE_ID>", "clientId": "<CLIENT_ID>", "recipient": {"account_number": "4210090401235566","account_owner": "Card Holder", "type": "card"}}'
  • quoteId: string (required) — Идентификатор, полученный на этапе /v2/rate
  • invoiceId: string (required) — Внутренний номер инвойса мерчанта
  • clientId: string (optional) — Идентификатор клиента в системе мерчанта
  • type: string (optional) — Способ исполнения выплаты (платежный метод), по умолчанию p2p, применяется только в случае, если выплата идет на кошелек.
  • recipient: Object (required) — Данные получателя платежа
    • account_number: string (required) — Номер счета получателя (в этом поле передается основной реквизит получателя, например если перевод будет по номеру карты, то тут передается именно ее номер. Тип реквизита определяется в поле ниже)
    • account_owner: string (required) — Имя владельца номера счета (имя получателя)
    • account_iban: string (optional) — IBAN получателя, в случае если это НЕ основной реквизит а дополнительный
    • account_phone: string (optional) — Телефон получателя, в случае если это дополнительный реквизит, а не основной
    • account_email: string (optional) — Email получателя
    • account_ewallet_name: string (optional) — Название кошелька получателя
    • account_bank_id: string (optional) — ID банка, полученный на этапе /banks
    • account_bic: string (optional) — BIC/SWIFT получателя
    • account_internal_client_number: string (optional) — Bank internal identifier used for method banktransferphp
    • type: string (required) — Тип реквизита, который используется в качестве основного счета получателя. Может принимать одно из следующих значений: iban, phone, card, account, custom
  • sender_personal: Object (optional) — Данные отправителя платежа для KYC
    • name: string (required) — Фамилия и имя отправителя
    • birthday: string (optional) — Дата рождения отправителя в любом формате
    • phone: string (optional) — Номер телефона отправителя в международном формате
    • address: string (optional) — Адрес отправителя
    • passport: string (optional) — Номер удостоверения личности отправителя

Info

Для большинства выплат (на карты, IBAN, номер банковского счета либо по номеру телефона) type не указывается. Для выплат на кошельки используется recipient.type = custom и передается type в соответствии с типом кошелька.

Info

Необходимость передачи персональных данных и их состав в поле sender_personal устанавливается в рамках договора с мерчантом. Все персональные данные сохраняются в системе оператора площадки в зашифрованном виде, не участвуют в автоматизированном обмене данными. Передача персональных данных возможна только банку получателя при соответствуещем запросе в рамках процедуры AML/KYC. В рамках договора с мерчантом можно выбрать геолокацию для хранилища персональных данных.

Warning

Если в ответ на создание транзакции пришел HTTP-статус, отличный от 2xx — это автоматически означает, что транзакция не была принята к исполнению. В целях контроля целостности и исключения сетевых ошибок допустимо дополнительно отправлять запрос на проверку статуса транзакции, чтобы убедиться, что транзакция не была принята. Кроме того, для защиты от двойных выплат используется идемпотентный ключ invoiceId.

Разбор ответа:

В ответе на запрос создание транзакции сервер возвращает только id транзакции и ее первичный статус.

  • Status 200:

    {
      "id": "00fd5cb1-a99b-49c0-813f-5b5df0c7e32b",
      "status": "queued"
    }
    

    • id: uuid (required) — invoice ID
    • status: string (required) — queuedcanceled, completed,paid,pending

Обработка ошибок

  • Status 400: Invalid request, typically due to a missing or malformed parameter.

    {
    "error": "ERROR_ACCESS_TOKEN_INVALID", 
    "message": "Access token is invalid.", 
    "statusCode": 400 
    }
    

    • error: string (required)
    • message: string (required)
    • statusCode: number
  • Status 401: Authentication failed. This may happen due to the following reasons:

    • Authentication is required but not provided.
    • The access token has expired.
{
"error": "ERROR_TOKEN_EXPIRED", 
"message": "Access token has expired.", 
"statusCode": 401 
}
- `error`: string (required)
- `message`: string (required)
- `statusCode`: number
  • Status 400: QR code format not supported right now.
{ 
"error": "ERROR_CURRENCY_NOT_SUPPORTED", 
"message": "Currency not supported", 
"statusCode": 400 
}
- `error`: string (required)
- `message`: string (required)
- `statusCode`: number
  • Status 400: QR code expired.
{ 
"error": "ERROR_QUOTE_EXPIRED", 
"message": "Quote request expired", 
"statusCode": 400 
}
- `error`: string (required)
- `message`: string (required)
- `statusCode`: number
  • Status 409: Conflict occurred because a deal with the same invoice ID already exists.
{ 
"error": "TRANSACTION_ALREADY_EXISTS", 
"message": "Transaction with same invoiceId already exists.", 
"statusCode": 409 
}
- `error`: string (required)
- `message`: string (required)
- `statusCode`: number
  • Status 500: Project tariff not configured, please contact our support.
{
  "error": "TARIFF_NO_FOUND",
  "message": "Project tariff not configured, pls contact with our support.",
  "statusCode": 500
}
- `error`: string (required)
- `message`: string (required)
- `statusCode`: number
  • Status 501: Requested quote not found, please contact our support.
{
  "error": "QUOTE_NOT_FOUND",
  "message": "Requested quote not found, pls contact with our support.",
  "statusCode": 501
}
* `error`: string (required)
* `message`: string (required)
* `statusCode`: number