Проведение оплаты с автоматическими списаниями

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

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

Схемы проведения

Проведение с инициированием списаний при регистрации платежа

В базовом случае, когда при регистрации повторяемой оплаты передаётся параметр scheduled_payment_id, для проведения повторяемой оплаты с автоматическими списаниями необходимо:

  1. Зарегистрировать повторяемую оплату.
  2. Принять от платёжной платформы оповещение о результате списания.
  3. Продолжать принимать оповещения о результате каждого списания в рамках платежа.

Для изменения условий повторяемой оплаты или её отмены, а также для возврата средств после одного или нескольких списаний необходимо передать соответствующие запросы в платёжную платформу (подробнее — в статье Управление списаниями в рамках оплаты).

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

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

Проведение с отдельным инициированием списаний

В случае, если при регистрации повторяемой оплаты не передаётся параметр scheduled_payment_id, для проведения повторяемой оплаты с автоматическими списаниями необходимо:

  1. Зарегистрировать повторяемую оплату.
  2. Передать Формат запроса с идентификатором записи о серии списаний.
  3. Принять от платёжной платформы оповещение о результате списания.
  4. Продолжать принимать оповещения о результате каждого списания в рамках платежа.
Рис. 2. Проведение повторяемой оплаты с отдельным инициированием списаний. Описание шагов
  1. От веб-сервиса на заданный URL ecommpay передаётся запрос на инициирование списаний.
  2. Этот запрос поступает в платёжную платформу.
  3. В платёжной платформе выполняется обработка запроса.
  4. От платёжной платформы к веб-сервису направляется ответ с информацией о получении запроса и его корректности.
  5. От платёжной платформы к платёжной системе направляется запрос на списание.
  6. В платёжной системе выполняется дальнейшая обработка запроса и его отправка эмитенту.
  7. На стороне эмитента выполняется обработка списания и перевод средств от пользователя к мерчанту.
  8. От эмитента к платёжной системе направляется информация о результате списания.
  9. От платёжной системы к платёжной платформе направляется информация о результате списания.
  10. От платёжной платформы к веб-сервису направляется оповещение о результате списания.
  11. На стороне веб-сервиса обеспечивается информирование пользователя о результате списания.
  12. Далее со стороны платёжной платформы инициируются последующие плановые списания и для каждого из них повторяются шаги 5—11.

Формат запроса

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

  1. Для инициирования каждой оплаты должен использоваться отдельный POST-запрос к конечной точке /v2/payment/card/recurring.
  2. В каждом запросе должны использоваться следующие объекты и параметры:
    • general — объект, содержащий основные идентификационные сведения запроса:
      • project_id — идентификатор проекта, полученный от ecommpay при интеграции;,
      • payment_id — идентификатор платежа, уникальный в рамках проекта;,
      • signature — подпись запроса, составленная после указания всех целевых параметров (подробнее — в разделе Работа с подписью к данным); (подробнее),
    • customer — объект, содержащий сведения о пользователе:
      • id — идентификатор пользователя, уникальный в рамках проекта и имеющий то же значение, которое было использовано при регистрации данной повторяемой оплаты;,
        Внимание: Использование разных идентификаторов пользователя для операций в рамках одной повторяемой оплаты не допускается
      • ip_address — IP-адрес пользователя, актуальный для инициируемой операции;,
    • payment — объект, содержащий сведения о платеже:
      • amount — сумма платежа в дробных единицах валюты;,
      • currency — код валюты платежа в формате ISO-4217 alpha-3;,
      • cryptocurrency_type — указатель категории цифровой валюты, обязательный при выполнении операций, связанных с использованием криптовалют через платёжную систему Visa, и допускающий одно из следующих значений:
        • cbdc — цифровая валюта центрального банка или токенизированный депозит, выпущенные определённым государством;
        • stablecoins_fiat_backed — цифровая валюта (в виде стейблкоина), чья стабильность обеспечивается за счёт резервов в определённой фиатной валюте;
        • native_tokens — цифровая валюта определённого блокчейна, необходимая для выполнения операций в его сети, в том числе для оплаты комиссий;
        • other — нефиатная валюта, которая заведомо не относится ни к одной из других категорий либо не может быть отнесена ни к одной из категорий при инициировании операции.
    • recurring — объект, содержащий сведения повторяемой оплате:
      • id — идентификатор записи о серии списаний, полученный в оповещении после регистрации повторяемой оплаты или заданный при переносе информации об этой оплате от стороннего эквайера.
  3. С учётом региональных особенностей и специфики провайдеров, участвующих в проведении платежей, могут быть обязательны и некоторые другие параметры. Информацию о таких особенностях и требованиях провайдеров можно уточнять у курирующего менеджера ecommpay.
  4. Дополнительно могут использоваться любые другие параметры из числа указанных в спецификации.

Таким образом, в общем случае корректный запрос должен содержать идентификаторы проекта и платежа, подпись, IP-адрес пользователя, код валюты и сумму проведения платежа, а также идентификатор серии списаний.

Рис. 3. Пример набора данных в запросе на проведение повторяемой оплаты
{  
  "general":{  
    "project_id":42,
    "payment_id":"456789",
    "signature":"K5D/aZAMdeR+YyilUwS=="
  },
  "customer":{  
    "ip_address":"202.144.196.0",
    "id":"customer_12"
  },
  "payment":{
    "amount":400,
    "currency":"USD"
  },
  "recurring":{
    "id":1079
  }
}

Формат оповещений

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

В следующем примере оповещение свидетельствует о том, что в рамках проекта 42 для пользователя customer_12 было выполнено списание в размере 4,00 USD с платёжной карты № 424242******4243 и ожидаются последующие списания.

Рис. 4. Пример данных из оповещения о списании средств в базовом случае
{  
  "customer":{  
    "id":"customer_12"
  },
  "account":{  
    "number":"431422******0056",
    "type":"visa",
    "card_holder":"JOHN SMITH",
    "id":45678,
    "expiry_month":"08",
    "expiry_year":"2026"
  },
  "payment":{  
    "sum":{  
      "amount":400,
      "currency":"USD"
    },
    "method":"card",
    "date":"2023-06-07T06:18:02+0000",
    "status":"scheduled recurring processing",    // Статус платежа
    "type":"recurring",    // Тип платежа
    "id":"456789",
    "description":""
  },
  "project_id":42,
  "recurring":{  
    "valid_thru":"2023-07-31T00:00:00+0000",
    "currency":"USD",
    "id":1079    // Идентификатор серии списаний
  },
  "operation":{  
    "id":39690002636,
    "type":"recurring",    // Тип операции
    "status":"success",    // Статус операции
    "date":"2023-06-07T06:18:02+0000",
    "created_date":"2023-06-07T06:18:02+0000",
    "request_id":"5cfa0199c33071",
    "sum_initial":{  
      "amount":400,
      "currency":"USD"
    },
    "sum_converted":{  
      "amount":400,
      "currency":"USD"
    },
    "provider":{  
      "id":6,
      "payment_id":"1192",
      "date":"2023-02-07T08:34:24+0000",
      "auth_code":"5253",
      "endpoint_id":6
    },
    "code":"0",
    "message":"Success"
  },
  "signature":"v7KNMpfZZ5D/aZMdeR+YyilUwSm...=="
}

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