Регистрация повторяемой оплаты
Общая информация
Для регистрации повторяемой оплаты на стороне платёжной платформы необходимо предварительно сохранить данные платёжного инструмента пользователя. Это можно сделать разными способами, в том числе при проведении платежей через 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...==" }