Закрытие списаний с помощью Charge Closer

Модуль Charge Closer — фоновый процесс, следящий за системными сообщениями о завершении заказов. Эти сообщения содержат ID подписки и значение параметра Период удаления подписки для клиента (в сутках), установленное для нее в правиле предоставления (см. Создание правила предоставления). Charge Closer получает сообщение о завершении заказа и проверяет тип биллинга указанной подписки. Если тип биллинга подписки указан в настройках Charge Closer, то он вызывает API-метод Close charges для закрытия ее списаний от имени менеджера реселлера. Для заказов на покупку и заказов на переключение в зависимости от значения параметра Период удаления подписки для клиента (в сутках) модуль делает следующее:

  • Период удаления подписки для клиента (в сутках) равен -1 или 0 — сразу вызывает API-метод Close charges для закрытия ее списаний от имени менеджера реселлера.
  • Период удаления подписки для клиента (в сутках) больше 0 — создает отложенную операцию для вызова API-метода Close charges. Выполнение операции откладывается в зависимости от количества дней до следующего финансового дня для подписки:
    • Если количество дней до следующего финансового дня для подписки больше или равно значению параметра Период удаления подписки для клиента (в сутках), выполнение операции откладывается на N × 24 часа, где N — значение параметра.
    • Если количество дней до следующего финансового дня для подписки меньше значения параметра Период удаления подписки для клиента (в сутках), выполнение операции откладывается до следующего финансового дня (в часовом поясе UTC+3). Списания закрываются в 00:00 в момент наступления финансового дня. Если до следующего финансового дня осталось меньше 1 часа, списания закрываются сразу.

Настройки Charge Closer хранятся в конфигурационном файле модуля и включают в себя:

  • URL для доступа к API v3 инсталляции.
  • Список типов биллинга, списания по которым необходимо закрывать.
  • Список пар значений ID реселлера и API-токена его менеджера для доступа к API. Списания по подпискам закрываются как для указанного реселлера, так и всех его нижестоящих реселлеров.

Если списания по подписке не удалось закрыть, Charge Closer вызывает API-метод еще раз. Всего выполняется до 5 попыток с интервалом 60 секунд. Результаты выполнения записываются в журнал модуля.