Регистрация повторяемой оплаты
Общая информация
Для регистрации повторяемой оплаты на стороне платёжной платформы необходимо предварительно сохранить данные платёжного инструмента пользователя. Это можно сделать разными способами, в том числе при проведении платежей через Gate, Payment Page (подробнее), Dashboard (подробнее) и при переносе информации о повторяемых оплатах от стороннего эквайера (подробнее).
При регистрации повторяемой оплаты через Gate необходимо отправить запрос на проведение разовой оплаты, оплаты по ссылке или на проверку действительности платёжного инструмента с параметрами, указывающими на необходимость сохранения данных.
Повторяемая оплата регистрируется на срок, заданный в параметрах запроса, или, если такие параметры не переданы, на срок, равный сроку действия платёжной карты. После истечения срока действия повторяемой оплаты к веб-сервису мерчанта направляется оповещение, а выполнение списаний в рамках этой оплаты становится недоступным: запросы на списания отклоняются и к веб-сервису направляются оповещения с кодом ошибки 3184 (или 3301).
Регистрация повторяемых оплат может быть запрещена в рамках проекта мерчанта или для провайдера, участвующего в проведении платежа. В таком случае запрос на проведение оплаты с регистрацией повторяемой оплаты может быть отклонён. Чтобы избежать отклонения платежа можно настроить игнорирование параметров, указывающих на необходимость зарегистрировать повторяемую оплату, при наличии таких запретов. Для этого необходимо обратиться к специалистам службы технической поддержки — support@ecommpay.com.
При изменениях в настройках системы провайдера может требоваться новая регистрация повторяемых оплат. В таких случаях от службы технической поддержки ecommpay мерчанту направляется письмо со списком идентификаторов повторяемых оплат, по которым следует выполнить регистрацию заново. Для этой регистрации необходимо уведомить пользователей о прекращении прежних списаний и необходимости инициирования новых, предварительно отвязав сохранённую карту, после чего инициировать регистрацию в платформе. Каждая вновь зарегистрированная повторяемая оплата получает новый идентификатор, который отправляется мерчанту в оповещении об успешной регистрации.
Схема выполнения
Для регистрации повторяемой оплаты необходимо отправить запрос на инициирование одной из операций: sale, auth, account verification или invoice. В таком запросе необходимо передать не только параметры, обязательные для инициирования операции, но и параметры, необходимые для регистрации повторяемой оплаты.
После получения запроса на инициирование одной из перечисленных операций в платёжной платформе выполняется стандартное выполнение такой операции, которое может включать в том числе выполнение вспомогательных процедур. В случае хранения данных на стороне платёжной платформы при успешном завершении операции на стороне платёжной системы или провайдера (то есть при получении статуса операции success) на стороне платёжной платформы создаётся запись о серии списаний. Этой записи присваиваются следующие атрибуты:
- Идентификатор. После создания записи о серии списаний этот идентификатор передаётся к веб-сервису в параметре
idобъектаrecurringоповещения о результате операции и должен использоваться в запросах на проведение повторяемой оплаты и для управления ей. - Статус. Как правило, при создании записи о серии списаний ей присваивается статус
active. Этот статус может измениться на статусcanceled, если повторяемая оплата отменена по запросу мерчанта или пользователя, а также в некоторых других случаях.
В случае хранения данных на стороне веб-сервиса запись о серии списаний не создаётся.
Далее от платёжной платформы к веб-сервису направляется оповещение о результате операции, в котором содержится присвоенный записи о серии списаний идентификатор, если эта запись была создана. Такое оповещение свидетельствует об успешной регистрации повторяемой оплаты.
Регистрация с хранением данных на стороне веб-сервиса
При формировании запросов на регистрацию повторяемой оплаты с хранением платёжных данных пользователя на стороне веб-сервиса необходимо учитывать следующее:
- Должен использоваться POST-запрос к одной из следующих конечных точек:
- В запросе должны использоваться обязательные для этого запроса объекты и параметры.
- Помимо обязательных объектов и параметров в запросе должен использоваться параметр
stored_card_typeс одним из следующих значений:3— для автооплаты,5— для регулярной оплаты (кроме запросов к конечной точке /v2/payment/card/account_verification/token).
Таким образом, помимо обязательных параметров корректный запрос должен содержать признак регистрации определённой категории повторяемой оплаты.
{
"general": {
"project_id": 42,
"payment_id": "456789",
"signature": "v7KNeR+CqGrNxYyilUwSm...=="
},
"card": {
"pan": "4314220000000056",
"year": 2025,
"month": 8,
"card_holder": "JUDY DOE",
"cvv": "123",
"stored_card_type": 3 // Регистрация автооплаты
},
"customer": {
"id": "customer_12",
"ip_address": "202.144.196.0"
},
"payment": {
"amount": 400,
"currency": "USD"
}
}
Информация о регистрации повторяемой оплаты передаётся от платёжной платформы к веб-сервису в составе оповещения о результате операции. Для этого оповещения используется стандартный формат, описание которого представлено в разделе Работа с оповещениями.
{
"project_id":42,
"payment":{
"id":"567890",
"type":"purchase",
"status":"success",
"date":"2019-05-14T12:52:45+0000",
"method":"card",
"sum":{
"amount":400,
"currency":"USD"
},
"description":""
},
"account":{
"number":"431422******0056",
"token":"d927d3f006008edf5c07661",
"type":"visa",
"card_holder":"JUDY DOE",
"expiry_month":"08",
"expiry_year":"2025"
},
"customer":{
"id":"customer_12"
},
"scheme_id":"MCS38A0790706",
"operation":{
"id":22136002040,
"type":"sale",
"status":"success",
"date":"2019-05-14T12:52:45+0000",
"created_date":"2019-05-14T12:52:42+0000",
"request_id":"8c53d11-1160d2c",
"sum_initial":{
"amount":400,
"currency":"USD"
},
"sum_converted":{
"amount":400,
"currency":"USD"
},
"provider":{
"id":414,
"payment_id":"00200011764",
"date":"2019-05-14T12:52:55+0000",
"auth_code":"231567",
"endpoint_id":414
},
"code":"0",
"message":"Success",
"eci":"07"
},
"signature":"v7KN5D/aZAdeR+CqGrNxYyilUwSm...=="
}
Регистрация с хранением данных на стороне платёжной платформы
При формировании запросов на регистрацию повторяемой оплаты с хранением платёжных данных пользователя на стороне платёжной платформы необходимо учитывать следующее:
- Должен использоваться POST-запрос к одной из следующих конечных точек:
- /v2/payment/card/sale — при проведении разовой оплаты в одну стадию,
- /v2/payment/card/auth — при проведении разовой оплаты в две стадии,
- /v2/payment/card/account_verification — при проверке платёжного инструмента,
- /v2/payment/invoice/create — при проведении оплаты по ссылке,
- /v2/payment/invoice/card/token/create — при проведении оплаты по ссылке с использованием токена.
- В запросе должны использоваться обязательные для этого запроса объекты и параметры.
- Помимо обязательных объектов и параметров в запросе должен использоваться объект
recurring, содержащий параметры с информацией о регистрируемой оплате:register— признак регистрации повторяемой оплаты, необходимо использовать значениеtrue;type— категория регистрируемой повторяемой оплаты, необходимо использовать одно из следующих значений:C— для экспресс-оплаты,U— для автооплаты,R— для регулярной оплаты;
time— время последующих списаний (для регулярной оплаты) в форматеhh:mm:ss;period— периодичность списаний (для регулярной оплаты):D— ежедневно,W— еженедельно,M— ежемесячно,Q— ежеквартально,Y— ежегодно.
- Для регистрации регулярной оплаты также могут использоваться и другие параметры в объекте
recurring:expiry_year— год окончания действия повторяемой оплаты;expiry_month— месяц окончания действия повторяемой оплаты;expiry_day— день окончания действия повторяемой оплаты;interval— множитель для кратного увеличения периода списаний, например чтобы списания выполнялись раз в три недели, в параметреperiodнадо задать значениеW, а в параметреintervalзначение3; возможные значения: от1до100;amount— сумма каждого списания;start_date— дата первого списания;scheduled_payment_id— идентификатор платежа, в рамках которого следует выполнять списания; должен отличаться от идентификатора платежа, в рамках которого выполняется регистрация повторяемой оплаты, и быть уникальным в рамках проекта (также не стоит путать его с идентификатором серии списаний, передаваемым в параметреidобъектаrecurringоповещения о регистрации повторяемой оплаты).Внимание: Если идентификаторы платежа, который необходимо присвоить повторяемой оплате (scheduled_payment_id), и платежа, в рамках которого эта оплата регистрируется (payment_id), совпадают, запрос на регистрацию отклоняется.
Таким образом, помимо обязательных параметров корректный запрос должен содержать признак регистрации повторяемой оплаты и её категорию, а также, при регистрации регулярной оплаты, время и периодичность списаний.
В зависимости от особенностей провайдеров, участвующих в проведении платежа, набор обязательных параметров может варьироваться. Подробную информацию о требованиях провайдеров можно уточнить у курирующего менеджера ecommpay.
{
"general": {
"project_id": 42,
"payment_id": "567890",
"signature": "v7KN1ZZ5D/aZAeR+CqGrwSm...=="
},
"card": {
"pan": "4314220000000056",
"year": 2025,
"month": 8,
"card_holder": "JUDY DOE",
"cvv": "123"
},
"customer": {
"id": "customer_12",
"ip_address": "202.144.196.0"
}
"payment": {
"amount": 400000,
"currency": "USD"
},
"recurring": {
"type": "R",
// Регистрация регулярной оплаты
"period": "W",
"interval": 3,
// Списания каждые 3 недели
"expiry_year": 2025,
"expiry_month": 5,
"expiry_day": 5,
// Последнее списание 5-го мая 2025 года
"time": "10:00:00",
// Выполнение списаний в 10:00:00
"register": true,
// Регистрация повторяемой оплаты
"scheduled_payment_id": "567891",
"start_date": "10-10-2020"
}
}
Информация о регистрации повторяемой оплаты передаётся от платёжной платформы к веб-сервису в составе оповещения о результате операции. Для этого оповещения используется стандартный формат, описание которого представлено в разделе Работа с оповещениями.
В примере далее оповещение свидетельствует о том, что повторяемая оплата зарегистрирована и записи о серии списаний присвоен идентификатор 1001648059.
{
"project_id":42,
"payment":{
"id":"567890",
"type":"purchase",
"status":"success",
"date":"2019-05-14T12:52:45+0000",
"method":"card",
"sum":{
"amount":400,
"currency":"USD"
},
"description":""
},
"account":{
"number":"431422******0056",
"token":"d927d3f006008edf5c07661",
"type":"visa",
"card_holder":"JUDY DOE",
"expiry_month":"08",
"expiry_year":"2025"
},
"customer":{
"id":"customer_12"
},
"recurring":{
"id":1001648059, // Идентификатор записи о серии списаний
на стороне платёжной платформы
"currency":"USD",
"valid_thru":"2019-05-20T00:00:00+0000"
},
"scheme_id":"MCS38A0790706",
"operation":{
"id":22136002040,
"type":"sale",
"status":"success",
"date":"2019-05-14T12:52:45+0000",
"created_date":"2019-05-14T12:52:42+0000",
"request_id":"8c77279053d011-1160421d51e11f87d2c",
"sum_initial":{
"amount":400,
"currency":"USD"
},
"sum_converted":{
"amount":400,
"currency":"USD"
},
"provider":{
"id":414,
"payment_id":"00200011764",
"date":"2019-05-14T12:52:55+0000",
"auth_code":"231567",
"endpoint_id":414
},
"code":"0",
"message":"Success",
"eci":"07"
},
"signature":"v7KNMpZ1ZZ5D/aZAebR+CqGrUwSm...=="
}