Перейти к основному содержимому

Рекуррентные платежи через СБП

API Zetplat позволяет:

Как получить токен со списанием средств

1. Создайте платежную сессию

Отправьте запрос на создание сессии transaction/initiate. В ответе придет идентификатор платежной сессии.

2. Начните платеж

Отправьте запрос на проведение платежа transaction/start/checkout.

3. Дождитесь вебхука для платежа

Zetplat отправит вам вебхук approve_pending и будет ждать подтверждения или отмены.

4. Подтвердите или отмените платеж

Проверьте данные для платежа, а затем подтвердите или отмените его:

5. Выполните дополнительные действия

Дождитесь вебхука action_pending. В параметре user_action.payment_qr.qr_data.qr_contentпередается диплинк на оплату. Его можно показать плательщику в виде QR-кода или отправить по нему плательщика в приложение банка-эмитента.

6. Дождитесь результата платежа

Zetplat отправит вам вебхук checkout_results.

Если платеж успешен, в вебхуке будут переданы значения status=completed (объект session_info) и status=successful (массив payouts), а в параметре recurring_token_info.token будет передан токен для последующих оплат.

Если платеж неуспешен, в вебхуке будут переданы значения status=canceled (объект transaction) и status=unsuccessful (массив payouts), а рекуррентного токена не будет.

Пример
curl -X POST \
https://partner.ru \
-H 'Content-Type: application/json' \
-H 'X-Signature: signature' \
-d '{
"type": "checkout_results",
"session_info": {
"id": "ps_713610",
"transaction_status": "completed",
"created_date": "2024-08-08T08:06:51.841432Z",
"updated_at": "2024-08-08T08:14:56.168219Z",
"payments": [{
"id": "pm_308906",
"transaction_status": "successful",
"created_date": "2024-08-08T08:06:51.931193Z",
"completed_date": "2024-08-08T08:14:55.996273Z",
"user_info": {
"user_id": "user123",
"contact_info": [{
"phone_number": "7123****345"
}]
},
"payment_info": {
"type": "fps_info"
},
"recurring_token_info": {
"token": "6a6a29c4193a8e1049231e1497a3c5f180e120b20db81b39f53ec478029b53cf",
"created_date": "2024-08-08T10:10:27+03:00",
"completed_date": "2034-08-08T10:10:27+03:00",
"token_active": true,
"type": "recurring_token"
},
"sum_info": {
"sum": 1000,
"currency_code": "RUB"
},
"fee_info": {
"net": {
"sum": 1000,
"currency_code": "RUB"
},
"gross": {
"sum": 1000,
"currency_code": "RUB"
}
}
}],
"actions": {
"approve": "2024-08-08T08:06:52.184593Z",
"finalize": "2024-08-08T08:14:55.699095Z"
}
}
}'

Схема привязки счета к СБП

Как получить токен без списания средств

Чтобы получить токен для рекуррентных платежей через СБП без фактического списания денег, выполните стандартные шаги по проведению платежа через СБП.

При создании запроса transaction/initiate укажите "type": "faster_payment_system_binding" и "allow_recurring": true.

В объекте sum_info укажите любое положительное числом (например, 1 рубль). В этом случае значение объекта игнорируется, и сумма списана не будет.

Токен для рекуррентных платежей вернется в вебхуке checkout_results.

Пример
curl -X POST \
https://proxy-demo.zetplat.com/api/v1/transaction/initiate \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"payment_info": {
"type": "faster_payment_system_binding"
},
"sum_info": {
"sum": 100,
"currency_code": "rub"
},
"user_info": {
"user_id": "lucky"
},
"payment_settings": {
"allow_recurring": true
}
}'

Когда получите токен, принимайте рекуррентные платежи стандартным образом.

Пример
curl -X POST \
https://proxy-demo.zetplat.com/api/v1/transaction/initiate \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"payment_info": {
"type": "recurrent",
"recurrent": {
"token": "e9876f32bcd947f79c324cf2da5726304a894f6ae2037de7705fdb3e0a134d39"
}
},
"sum_info": {
"sum": 10000,
"currency_code": "rub"
},
"user_info": {
"user_id": "lucky"
}
}'

Подробнее о статусах платежа
Описание кодов ошибок и их значений