Повторные попытки проведения платежа
Общая информация
При работе с Payment Page пользователю, как правило, достаточно одной попытки для проведения платежа. Но в некоторых случаях, например когда пользователь указывает реквизиты платежной карты, на которой недостаточно средств, для проведения платежа могут потребоваться дополнительные попытки. Для работы с такими ситуациями в платежной платформе Rocketpay предусмотрена возможность выполнять повторные попытки проведения одного и того же платежа (с одним идентификатором) в рамках одного сеанса работы с Payment Page.
В общем случае, если возможность выполнения повторных попыток не подключена, при отклонении платежа пользователю отображается итоговая страница с сообщением об ошибке, сеанс работы с Payment Page завершается, и чтобы повторить попытку, пользователю необходимо вернуться к веб-сервису и инициировать новый платеж. Если же возможность выполнения повторных попыток подключена, при отклонении платежа на итоговой странице отображается сообщение об ошибке и предложение повторить попытку (с дополнительной кнопкой для перехода к этой попытке).
Поскольку для выполнения повторных попыток не требуется заново открывать платежную форму, все параметры, указанные в запросе на открытие Payment Page, актуальны как для первой, так и для всех последующих попыток. Так, при передаче в запросе токена платежных данных все попытки возможны только с использованием этого токена.
Число дополнительных попыток и время на их выполнение ограничиваются. Эти параметры регулируются по согласованию с курирующим менеджером Rocketpay и применяются для каждого платежа в рамках проекта, для которого подключена возможность выполнения повторных попыток.
Пользовательский сценарий
Со стороны пользователя проведение оплаты с выполнением повторных попыток выглядит следующим образом:
- На стороне веб-сервиса мерчанта пользователь подтверждает готовность перейти к оплате.
- Пользователю отображается Payment Page с учетом параметров ее вызова, после чего пользователь выполняет необходимые действия и ожидает информацию о результате оплаты.
- При отклонении оплаты пользователю отображается страница с предложением повторить попытку. Он соглашается и перенаправляется к шагу 2.
- При проведении оплаты пользователю отображается типовая итоговая страница (без предложения повторить попытку).
Особенности
При подключении повторных попыток проведения платежей необходимо учитывать следующие особенности:
- Необходимость отображения итоговой страницы. Для поддержки возможности выполнения повторных попыток необходимо отображать пользователю итоговую страницу Payment Page. Если при работе с Payment Page применяется перенаправление пользователя в веб-сервис без отображения итоговой страницы (подробнее), то повторные попытки не могут использоваться.
- Поддержка индивидуального дизайна. При использовании индивидуального оформления итоговой страницы Payment Page необходимо согласовать с курирующим менеджером Rocketpay добавление на нее дополнительного элемента — кнопки для перехода пользователя к повторным попыткам — и предоставить готовый макет специалистам технической поддержки. Информация об индивидуальном оформлении платежной формы представлена в разделе Индивидуальный дизайн Payment Page.
- Учет времени выполнения повторных попыток. Отсчет времени на выполнение всех повторных попыток начинается с момента фиксации на стороне платежной платформы первого отказа в проведении платежа и не отображается на Payment Page. Однако, если для этого же платежа ограничено время работы с Payment Page (подробнее), то пользователю отображается обратный отсчет до завершения этого времени, а время на выполнение повторных попыток игнорируется. В любом из этих случаев, если время работы с Payment Page истекло и за это время ни одна попытка не привела к проведению платежа, то платеж отклоняется и пользователю отображается итоговая страница с соответствующим уведомлением.
Подключение
Чтобы подключить возможность повторного проведения платежей, со стороны мерчанта необходимо:
- Согласовать с курирующим менеджером Rocketpay подключение этой возможности, необходимость ее тестирования и применение ограничений на число дополнительных попыток и на время их выполнения. Такие ограничения действуют для каждого платежа в рамках проекта и могут настраиваться специалистами Rocketpay с учетом потребностей мерчанта. Типовые значения составляют 3 попытки в течение 6 минут.
- Если была согласована необходимость тестирования, получить от специалистов Rocketpay уведомление о готовности к тестированию, проверить работу платежной формы с использованием этой возможности и сообщить о готовности к запуску.
- Получить от специалистов Rocketpay уведомление о подключении возможности.
Схема работы
Повторные попытки проведения платежа выполняются согласно следующей схеме.
Рис.: Проведение оплаты с выполнением повторной попытки. Описание шагов
- Если попытка проведения оплаты не завершилась списанием или блокировкой средств, то для этой оплаты в платежной платформе проверяется возможность выполнения повторной попытки.
- Платежная платформа направляет в веб-сервис оповещение о возможности выполнения повторной попытки.
- От платежной платформы к Payment Page передаются данные о возможности выполнения повторной попытки.
- Пользователю отображается страница с сообщением об отклонении оплаты и предложением повторить попытку.
- Пользователь соглашается повторить попытку и выполняет необходимые действия.
- Указанные пользователем данные передаются в платежную платформу, после чего выполняется очередная попытка проведения платежа с их использованием.
При выполнении повторных попыток статус платежа может принимать следующие значения:
processing
— при проверке возможности выполнения дополнительной попытки в случае отклонения оплаты (в процессе выполнения шага 1 на схеме), а также при получении платежных данных от пользователя в рамках дополнительной попытки (по результатам выполнения шага 6);awaiting customer
— с момента выявления в платежной платформе возможности выполнения повторной попытки (в рамках шага 1) и до момента получения данных от пользователя (по результатам выполнения шага 6) или до момента истечения времени на выполнение повторных попыток (после чего платежу присваивается итоговый статусdecline
);success
— при выполнении целевого действия (если одна из выполненных попыток привела к списанию или блокировке средств);decline
— в случае, если было исчерпано число дополнительных попыток или время на их выполнение и при этом ни одна из выполненных попыток не привела к списанию или блокировке средств, а также в случае, если пользователь отказался от выполнения повторной попытки.
Описание всех используемых статусов платежей представлено в разделе Типы платежей, операции и платежи.
Работа с оповещениями
При выполнении повторных попыток проведения платежей от платежной платформы к веб-сервису отправляются промежуточные и итоговые оповещения.
Промежуточные оповещения. При получении информации об отклонении оплаты и выявлении возможности выполнения повторной попытки этой оплаты от платежной платформы к веб-сервису отправляется промежуточное оповещение. К особенностям таких оповещений можно отнести наличие параметров, содержащих информацию о доступности повторных попыток (is_new_attempts_available
) и оставшемся времени на их выполнение (timeout_attempts
; в секундах — ss
).
В промежуточных оповещениях параметр is_new_attempts_available
принимает значение true
, что означает одновременное выполнение следующих условий:
- ни одна попытка еще не привела к проведению платежа;
- остаются доступные попытки;
- остается время на выполнение повторных попыток.
В следующем примере содержится информация о том, что в рамках оплаты 100028024
доступны повторные попытки (is_new_attempts_available = true
) и на их выполнение остается шесть минут (attempts_timeout = 360
).
Рис.: Пример данных из оповещения о возможности выполнения повторной попытки
{ "project_id": 212, "payment": { "id": "100028024", "type": "purchase", "status": "awaiting customer", // статус платежа "date": "2020-07-21T17:51:04+0000", "method": "card", "is_new_attempts_available": true, // доступность повторных попыток "attempts_timeout": 360, // оставшееся время "sum": { "amount": 131970, "currency": "USD" }, "description": "" }, "account": { "number": "424242******4242", "type": "visa", "card_holder": "JOHN DOE", "expiry_month": "01", "expiry_year": "2023" }, "operation": { "id": 20759000013841, "type": "auth", "status": "decline", "date": "2020-07-21T17:51:04+0000", "created_date": "2020-07-21T17:20:55+0000", "request_id": "7ba0fb24436a717d3091f7b71007891696db6e-00020760", "sum_initial": { "amount": 131970, "currency": "USD" }, "sum_converted": { "amount": 131970, "currency": "USD" }, "code": "108", "provider": { "id": 414, "payment_id": "", "endpoint_id": 414 } }, "signature":"oXlx8QWh3OC/YOqb2ib3C5jq/lHvisceI9Lqg/tRTuwcrNmj1zQ..." }
Итоговые оповещения. В случае, если платеж удалось провести или больше нет возможности для его проведения, со стороны платежной платформы отправляется итоговое оповещение. В итоговых оповещениях параметр is_new_attempts_available
принимает значение false
, что означает выполнение одного из следующих условий:
- по итогам последней попытки платеж был проведен;
- пользователь отказался от дополнительной попытки;
- все доступные попытки исчерпаны;
- доступное время истекло.
В следующем примере содержится информация о том, что время на выполнение повторных попыток истекло и оплата отклонена.
Рис.: Пример данных из оповещения об отклонении оплаты
{ "project_id": 212, "payment": { "id": "100028024", "type": "purchase", "status": "decline", // статус платежа "date": "2020-07-21T17:51:04+0000", "method": "card", "is_new_attempts_available": false, // доступность повторных попыток "attempts_timeout": 0, // оставшееся время "sum": { "amount": 131970, "currency": "USD" }, "description": "" }, "account": { "number": "424242******4242", "type": "visa", "card_holder": "JOHN DOE", "expiry_month": "01", "expiry_year": "2023" }, "operation": { "id": 20759000013841, "type": "auth", "status": "decline", "date": "2020-07-21T17:51:04+0000", "created_date": "2020-07-21T17:20:55+0000", "request_id": "7ba0fb24436a717d3091a2bdf7891696db6e-00020760", "sum_initial": { "amount": 131970, "currency": "USD" }, "sum_converted": { "amount": 131970, "currency": "USD" }, "code": "603", "message": "Auto decline", "provider": { "id": 414, "payment_id": "", "endpoint_id": 414 } }, "signature": "oXlx8QWh3OC/YOqb2ib3C5VLPksceI9Lqg/tRTuwcrNmj1zQ..." }