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

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

Введение

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

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

Особенности

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

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

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

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

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

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

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

Схема работы

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

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

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

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

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

Подключение

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

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

Управление графиками попыток

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

Платёжная платформа позволяет задавать для каждого проекта отдельный график повторных попыток списаний (действительный для каждой регулярной оплаты в рамках этого проекта) — с помощью соответствующих программных запросов через Gate (подробнее далее) или инструментов интерфейса Dashboard (подробнее). При этом может использоваться базовый график, заданный со стороны ecommpay в качестве варианта по умолчанию, или индивидуальный график, настроенный со стороны мерчанта с учётом специфики конкретного проекта — базовый, заданный со стороны ecommpay по умолчанию, или индивидуальный, настроенный со стороны мерчанта.

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

  • В базовом случае для каждого очередного списания допускается не более 7 повторных попыток, которые могут быть выполнены в течение 6 суток.

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

  • В случае с индивидуальным графиком для каждого очередного списания допускается от 1 до 10 повторных попыток, которые могут быть выполнены в течение 10 суток.

    При этом интервал перед выполнением любой повторной попытки может быть произвольным, но должен быть кратным 24 часам и с ограничением, что до следующего планового списания (согласно графику списаний) остаётся не менее 24,5 часов. Например, для ежемесячных списаний четыре попытки повторных списаний могут быть выстроены с увеличивающимися интервалами в 24, 48, 72 и 96 часов (на 1, 3, 6 и 10 сутки, с соблюдением ограничений на общий период в 10 суток и на время до очередного списания не менее 24,5 часов).

Базово Индивидуально
Допустимое число повторных попыток

7

1…10

Предельное время выполнения повторных попыток

6 суток

10 суток

Интервалы выполнения повторных попыток

дважды по 12 часов,
далее пять раз по 24 часа

любые, кратные суткам (N × 24 часа), в любом порядке

Минимально допустимое время до следующего планового списания

для первых двух попыток — 12,5 часов,
для последующих попыток — 24,5 часа

в любом случае — 24,5 часа

Возможности настройки количества и времени выполнения попыток


+

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

Также при работе с Gate API следует учитывать, что для выполнения запросов по работе с графиком повторных попыток списаний используется синхронная схема взаимодействия между веб-сервисом и платёжной платформой. В рамках этой схемы каждый запрос полностью выполняется на стороне платёжной платформы в течение одного HTTP-сеанса, а в ответе на корректно составленный запрос содержится HTTP-код ответа (200) и запрошенная информация без указания статуса запроса. В случаях, когда запрос некорректен или с его приёмом и обработкой возникли проблемы, в ответе на запрос содержатся HTTP-код ответа, статус обработки запроса error и описание причины обнаруженной ошибки. Описание типового формата ответа представлено в отдельной статье.

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

Настройка индивидуального графика

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

  1. Отправить POST-запрос к конечной точке /v2/recurring/retry-custom-schedule/save.
  2. Принять синхронный ответ об изменении графика в платформе.

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

  • general — объект, содержащий основные идентификационные сведения запроса:
    • project_id — идентификатор проекта, полученный от ecommpay при интеграции;,
    • signature — подпись запроса, составленная после указания всех целевых параметров (подробнее — в статье Работа с подписью к данным); (подробнее),
  • interval_days — массив с порядковыми номерами дней для выполнения повторных попыток, отсчитываемых от того дня, в который была отклонена исходная попытка целевого списания, и указываемых в виде последовательности возрастающих чисел в диапазоне от 1 до 10, последовательно по возрастанию и через запятую в качестве разделителя (например: [1,5,9]).

Таким образом, корректный запрос должен содержать идентификатор проекта, подпись и массив interval_days. В следующем примере повторные попытки списаний должны быть запланированы на 1, 5 и 9 сутки с момента отклонения исходной попытки списания.

Рис. 6. Пример набора данных в запросе на настройку индивидуального графика
{
"general":{
    "project_id": 42,
    "signature": "K5D/aZAsdsg ... R+YyilEtbS="
    }, 
"interval_days": [1,5,9]
}
Рис. 7. Пример набора данных в запросе на настройку индивидуального графика
{
"general":{
    "project_id": 42,
    "signature": "K5D/aZAsdsg ... R+YyilEtbS="
    }, 
"interval_days": [1,5,9]
}

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

Проверка графика

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

  1. Отправить POST-запрос к конечной точке /v2/recurring/retry-custom-schedule/info.
  2. Принять синхронный ответ с информацией о графике.

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

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

Таким образом, корректный запрос должен содержать идентификатор проекта и подпись.

Рис. 8. Пример набора данных в запросе на получение сведений об используемом графике
{
  "general":{
    "project_id": 42,
    "signature": "K5D/kyky...il8l="
  }
}
Рис. 9. Пример набора данных в запросе на получение сведений об используемом графике
{
  "general":{
    "project_id": 42,
    "signature": "K5D/kyky...il8l="
  }
}

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

Если для целевого проекта в платформе задан индивидуальный график повторных попыток, в объект schedule включаются следующие параметры:

  • interval_days — массив с порядковыми номерами дней для выполнения повторных попыток, отсчитываемых от того дня, в который была отклонена исходная попытка целевого списания, и указываемых в виде последовательности возрастающих чисел в диапазоне от 1 до 10, последовательно по возрастанию и через запятую в качестве разделителя (например: [1,5,9]).
  • status — указатель использования индивидуального графика (со значением active, подтверждающим, что для целевого проекта был задан и не деактивирован индивидуальный график).

Если для целевого проекта используется базовый график от ecommpay, объект schedule передаётся с пустым значением.

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

Рис. 10. Пример сведений из ответа об индивидуальном графике
{
  "project_id": 42,
  "schedule": {
    "interval_days": [1,5,9],
    "status": "active"
  }
}
Рис. 11. Пример сведений из ответа об индивидуальном графике
{
  "project_id": 42,
  "schedule": {
    "interval_days": [1,5,9],
    "status": "active"
  }
}

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

Рис. 12. Пример сведений из ответа о базовом графике
{
  "project_id": 42,
  "schedule": {}
}
Рис. 13. Пример сведений из ответа о базовом графике
{
  "project_id": 42,
  "schedule": {}
}

Сброс графика к базовым значениям

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

  1. Отправить POST-запрос к конечной точке /v2/recurring/retry-custom-schedule/disable.
  2. Принять синхронный ответ о выполнении запроса.

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

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

Таким образом, корректный запрос должен содержать идентификатор проекта и подпись.

Рис. 14. Пример набора данных в запросе на сброс графика
{
 "general":{    
    "project_id": 42,
    "signature": "K5D/aZAMdeR+YyilUwS="
 }
}
Рис. 15. Пример набора данных в запросе на сброс графика
{
 "general":{    
    "project_id": 42,
    "signature": "K5D/aZAMdeR+YyilUwS="
 }
}

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

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

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

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

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

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

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

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

Рис. 17. Пример данных из оповещения об отклонении очередного списания с планированием первой повторной попытки
"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.

Рис. 18. Пример данных из оповещения об отклонении первой повторной попытки с планированием второй
"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).

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

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

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

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

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

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

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

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

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

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

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

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