Работа с повторными попытками автоматических списаний

Общая информация

Введение

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

При использовании повторных попыток их количество и время на выполнение ограничиваются: для каждого очередного списания допускается не более 7 повторных попыток, которые могут быть выполнены в течение 6 суток. Интервал между первой (исходной) попыткой очередного списания и первой повторной попыткой, а также между первой и второй повторными попытками составляет 12 часов, интервал между остальными попытками — 24 часа. При этом проверяется, что до следующего очередного списания (согласно графику списаний) остаётся не менее 12,5 или 24,5 часов соответственно. Иначе повторные попытки прекращаются. Эти ограничения действуют для всех платежей в рамках любого проекта и не могут быть изменены.

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

Особенности

При работе с повторными попытками автоматических списаний стоит учитывать следующие особенности:

  • для каждого проекта может использоваться только базовый график от Flashpay;
  • повторные попытки применимы для классических карточных платежей;
  • повторные попытки применимы только для регулярных оплат с хранением графика списаний на стороне платёжной платформы (с типом R);
  • повторные попытки могут выполняться только в тех случаях, когда предшествующие попытки списаний были отклонены при отклонении предшествующих попыток списаний на стороне платёжной системы или эмитента;
  • применение повторных попыток не гарантирует итогового списания средств — если допустимое число попыток не приводит к списанию, такое списание считается отклонённым (со статусом операции decline) и целевая оплата проводится в платформе дальше согласно её графику.

Варианты применения

Способы применения повторных попыток списаний можно рассмотреть на частных примерах.

Если в рамках повторяемой оплаты плановые списания инициируются по понедельникам в 12:00 и по графику должны быть выполнены 02, 09, 16 и 23 ноября, но 09 и 16 ноября плановых списаний средств не происходит, то реагирование на такую ситуацию может обеспечиваться следующим образом:

  1. Если повторные попытки для такой оплаты недоступны, то независимо от того, было ли выполнено или отклонено очередное списание, за ним вслед за каждым отклонённым списанием планируется и выполняется следующее.
  2. Если повторные попытки для такой оплаты доступны, то вслед за отклонением исходной попытки любого из очередных списаний для него обеспечивается актуальное число повторных попыток: две первые с интервалом в 12 часов и последующие с интервалом в 24 часа и остановкой не менее чем за 24,5 часа до очередного списания в понедельник.
  3. Если повторные попытки для такой оплаты доступны и со стороны веб-сервиса отменяются дальнейшие повторные попытки после трёх подряд отклонённых, то вслед за отклонением исходной попытки любого из очередных списаний для него обеспечивается актуальное число повторных попыток, но не более трёх подряд.

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

Схема работы

Технически повторные попытки списаний выполняются следующим образом:

  1. При отклонении со стороны платёжной системы или эмитента исходной попытки очередного списания в платёжной платформе Flashpay очередного списания проверяется возможность повторить попытку, и если эта возможность подтверждается, то к веб-сервису направляется оповещение об отклонении списания со статусом операции decline и с плановыми датой и временем повторной попытки.
  2. В заданное время автоматически выполняется повторная попытка списания.
  3. Исходя из результата повторной попытки выполняются последующие действия:
    • Если попытка приводит к переводу необходимых средств от пользователя к мерчанту, то к веб-сервису направляется оповещение о результате списания (со статусом операции success) и оплата проводится дальше согласно графику.
    • Если попытка отклоняется и в платёжной платформе подтверждается возможность выполнить следующую попытку, то к веб-сервису направляется повторное оповещение об отклонении списания (со статусом операции decline и с плановыми датой и временем следующей попытки) и шаг 2 повторяется.
    • Если попытка отклоняется и в платёжной платформе не подтверждается возможность выполнить следующую попытку, то к веб-сервису направляется итоговое оповещение об отклонении списания (со статусом операции decline и без информации о следующей попытке) и оплата проводится дальше согласно графику. В таком случае решения относительно необходимости дополнительных списаний или завершения серии списаний и оплаты в целом должны приниматься на стороне мерчанта.

Общая схема этого процесса выглядит следующим образом.

Рис. 4. Проведение повторяемой оплаты с повторными попытками списаний. Описание шагов
  1. Если исходная попытка списания не завершилась переводом средств, то для этого списания в платёжной платформе проверяется возможность выполнения повторной попытки.
  2. От платёжной платформы к веб-сервису направляется оповещение об отклонении планового списания (со статусом операции decline) с датой и временем выполнения повторной попытки.
  3. На стороне веб-сервиса обеспечивается информирование пользователя об отклонении списания и планировании новой попытки.
  4. От платёжной платформы к платёжной системе в соответствующие дату и время направляется запрос на списание.
  5. В платёжной системе выполняется дальнейшая обработка запроса и его отправка эмитенту.
  6. На стороне эмитента выполняется обработка списания.
  7. От эмитента к платёжной системе направляется информация о результате списания.
  8. От платёжной системы к платёжной платформе направляется информация о результате списания.
  9. В платёжной платформе проверяются необходимость и возможность выполнения повторной попытки. Если актуально, со стороны платёжной платформы инициируются следующие попытки списания и для каждой из них повторяются шаги 2–8.
  10. От платёжной платформы к веб-сервису направляется итоговое оповещение о результате списания: со статусом decline (если ни одна из попыток не привела к переводу средств от пользователя к мерчанту) или success (если одна из попыток привела к переводу средств).
  11. На стороне веб-сервиса обеспечивается информирование пользователя о результате списания.
  12. Со стороны платёжной платформы инициируются последующие плановые списания и для каждого из них могут повторяться шаги 1–11.

Формат оповещений, используемых в рамках этого процесса, описан далее.

Подключение

Чтобы подключить возможность работы с повторными попытками автоматических списаний, со стороны мерчанта необходимо:

  1. Согласовать подключение с курирующим менеджером Flashpay подключение этой возможности и необходимость её тестирования.
  2. Если была согласована необходимость тестирования, получить от специалистов Flashpay уведомление о готовности к тестированию, проверить корректность работы с использованием этой возможности и сообщить о готовности к запуску.
  3. Получить от специалистов Flashpay уведомление о подключении возможности.

Контроль выполнения попыток

Повторные попытки списаний выполняются на стороне платёжной платформы автоматически, в соответствии с графиком и общей схемой. Со стороны веб-сервиса при этом важно обеспечивать контроль таких попыток и выстраивать работу с пользователями с учётом итоговых результатов списаний.

Для получения информации о планировании и выполнении каждой повторной попытки списания можно использовать оповещения от платформы. Общая информация о работе с такими оповещениями представлена в отдельной статье. В случаях, когда для автоматических списаний по проекту используются повторные попытки, в оповещения включается дополнительный объект recurring_retry, в структуре которого, в зависимости от ситуации, могут использоваться следующие параметры со следующими параметрами:

  • trigger_operation_id — идентификатор очередного списания, для которого была выполнена повторная попытка. Указывается в тех случаях, когда была выполнена по крайней мере одна повторная попытка.
  • retry_count — число использованных повторных попыток (в виде числа от 1 до 7). Указывается в тех случаях, когда была выполнена по крайней мере одна повторная попытка.
  • next_retry_exists — индикатор наличия следующей запланированной попытки (со значением true, если перевод средств не был выполнен и в платформе подтверждена возможность повторить попытку списания, и со значением или false в остальных случаях). Указывается во всех случаях.
  • next_retry_date — дата и время следующей запланированной попытки. Указывается в тех случаях, когда была запланирована очередная повторная попытка.

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

Рис. 5. Пример данных из оповещения об отсутствии запланированных повторных попыток
"recurring_retry": {   
            "next_retry_exists": false 
            }

В следующем примере содержится информация о том, что вслед за отклонённой исходной попыткой очередного списания запланирована первая повторная попытка ("next_retry_exists": true). В этом случае не указываются идентификатор целевого списания и идентификатор повторной попытки, поскольку ни одна повторная попытка ещё не выполнялась.

Рис. 6. Пример данных из оповещения об отклонении очередного списания с планированием первой повторной попытки
"recurring_retry": {   
            "next_retry_exists": true,
            "next_retry_date": "2026-01-21T16:58:02+0000"  
            }

В следующем примере содержится информация о том, что первая повторная попытка ("retry_count": 1) списания 344589675 была отклонена и для этого списания запланирована вторая повторная попытка ("next_retry_exists" : true) на 2026-01-25T16:58:02+0000.

Рис. 7. Пример данных из оповещения об отклонении первой повторной попытки с планированием второй
"recurring_retry": {   
            "trigger_operation_id": 344589675,
            "retry_count": 1,
            "next_retry_exists": true,
            "next_retry_date": "2026-01-25T16:58:02+0000"  
            }

В следующем примере содержится информация о том, что для списания 344589675 была выполнена вторая повторная попытка ("retry_count": 2) и последующих попыток не планируется ("next_retry_exists" : false). Это может быть связано с тем, что вторая повторная попытка привела к переводу средств от пользователя к мерчанту (об этом должен свидетельствовать статус операции success), либо с тем, что повторные попытки исчерпаны, не приведя к переводу средств (об этом должен свидетельствовать статус операции decline).

Рис. 8. Пример данных из оповещения о результате второй повторной попытки без планирования третьей
"recurring_retry": {     
            "trigger_operation_id": 344589675,
            "next_retry_exists": false,
            "retry_count": 2
            }

Отмена дальнейших попыток

Чтобы отменить через Gate API выполнение дальнейших повторных попыток для конкретного списания, следует:

  1. Отправить POST-запрос к конечной точке .
  2. Принять синхронный ответ о прекращении повторных попыток для указанного списания.

Следует учитывать, что для выполнения таких запросов используется синхронная схема взаимодействия между веб-сервисом и платёжной платформой, когда каждый запрос полностью выполняется на стороне платёжной платформы в течение одного HTTP-сеанса с предоставлением актуального ответа (подробнее). Описание типового формата синхронного ответа представлено в отдельной статье.

Общая схема выполнения запроса на отмену дальнейших попыток для конкретного списания выглядит следующим образом.

Рис. 9. Отмена дальнейших повторных попыток. Описание шагов
  1. От веб-сервиса на заданный URL Flashpay направляется запрос на отмену дальнейших повторных попыток, запланированных в платформе для отклонённого списания.
  2. Этот запрос поступает в платёжную платформу.
  3. В платёжной платформе выполняется обработка запроса и отменяются дальнейшие попытки выполнить это списание.
  4. От платёжной платформы к веб-сервису направляется ответ с информацией о выполнении запроса.
  5. На стороне веб-сервиса обеспечивается информирование пользователя о результате списания.
  6. Со стороны платёжной платформы инициируются последующие плановые списания.

При работе с запросами на отмену дальнейших повторных попыток конкретного списания каждый раз должны использоваться следующие объекты и параметры:

  • general — объект, содержащий основные идентификационные сведения запроса:
    • project_id — идентификатор проекта, полученный от Flashpay при интеграции;,
    • signature — подпись запроса, составленная после указания всех целевых параметров (подробнее — в статье Работа с подписью к данным); (подробнее),
  • recurring — объект, содержащий сведения о повторяемой оплате:
    • id — идентификатор записи о целевой серии списаний, полученный при регистрации повторяемой оплаты или заданный при переносе информации об этой оплате от стороннего эквайера;,
  • trigger_operation_id — идентификатор списания, для которого необходимо прекратить выполнение повторных попыток.

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

Рис. 10. Пример набора данных в запросе на отмену дальнейших повторных попыток списания
{ 
  "general":{ 
    "project_id":42,
    "signature":"K5D/anjn7fv+YyilUwS=="
  },
  "recurring":{
    "id":1079
   },
  "trigger_operation_id":092384
}
Рис. 11. Пример набора данных в запросе на отмену дальнейших повторных попыток списания
{ 
  "general":{ 
    "project_id":42,
    "signature":"K5D/anjn7fv+YyilUwS=="
  },
  "recurring":{
    "id":1079
   },
  "trigger_operation_id":092384
}

При выполнении такого запроса на отмену дальнейших попыток списания от платёжной платформы к веб-сервису передаётся ответ с кодом 200 OK, а при отклонении — с указанием статуса обработки запроса error и поясняющего описания.