Оплата в одну стадию
Общая информация
В платежной платформе оплата в одну стадию проводится, как описано в разделе Схема и статусы разовой оплаты в одну стадию.
При проведении разовой оплаты в одну стадию реквизиты платежного инструмента могут указываться в одной из следующих форм:
- Реквизиты (в явном виде) Это базовая форма, при использовании которой необходимо получить реквизиты у пользователя, а затем передать эти реквизиты в платежную платформу в запросе на платеж.
- Идентификатор реквизитов В этом случае со стороны веб-сервиса передается идентификатор, однозначно ассоциированный с реквизитами платежного инструмента на стороне платежной платформы (подробнее — в разделе Сохранение платежных данных).
- Токен реквизитов В отличие от базового способа, вместо полных реквизитов передается токен. Для использования этого способа необходимо провести первоначальный платеж. Подробная информация об использовании токена представлена в разделе Использование токенов.
Схема проведения
Для проведения оплаты в одну стадию через Gate со стороны веб-сервиса необходимо:
- Отправить запрос в конечную точку
/v2/payment/{название метода}/sale[/форма указания реквизитов платежного инструмента]. - При необходимости выполнить вспомогательные процедуры, инициированные платежной платформой. Это может быть один из вариантов аутентификации пользователя или дополнение информации о платеже.
- Аутентификация 3-D Secure обеспечивает безопасность оплаты с использованием платежных карт через Интернет. Подробнее об этой процедуре см. Аутентификация по протоколу 3‑D Secure 1.
- Аутентификация по инициативе мерчанта обеспечивает дополнительную безопасность оплаты с использованием платежных карт. Подробнее об этой процедуре см. Аутентификация по инициативе мерчанта.
- Дополнение информации о платеже используется, когда по запросу одной из сторон, участвующих в проведении платежа, требуется предоставить дополнительную информацию. Подробная информация о процедуре представлена в разделе Дополнение информации о платеже.
- Принять от платежной платформы оповещение о результате оплаты.
- При необходимости для проведенных оплат использовать дополнительную возможность — возврат средств по проведенной оплате. Возврат используется в ситуациях, когда в рамках проведенной оплаты необходимо частично или полностью вернуть средства пользователю. Подробная информация о возвратах представлена в разделе Возврат средств после оплаты.
Схема проведения оплаты в одну стадию в базовом случае — без выполнения дополнительных процедур — представлена далее.
Рис.: Оплата в одну стадию в базовом случае
- Пользователь на стороне веб-сервиса инициирует оплату.
- От веб-сервиса на заданный URL Rocketpay передается запрос на проведение оплаты в одну стадию.
- Запрос на проведение оплаты в одну стадию поступает в платежную платформу.
- В платежной платформе выполняется прием запроса с проверкой его корректности.
- Платежная платформа направляет в веб-сервис ответ с информацией о получении запроса и его корректности.
- В платежной платформе выполняется обработка этого запроса, его преобразование и отправка в платежную систему в соответствии с протоколом взаимодействия с ней.
- В платежной системе выполняется дальнейшая обработка запроса и его отправка эмитенту.
- На стороне эмитента выполняется обработка платежа и списание средств пользователя.
- От эмитента к платежной системе направляется уведомление о результате оплаты.
- От платежной системы к платежной платформе направляется уведомление о результате оплаты.
- Платежная платформа направляет в веб-сервис оповещение о результате оплаты.
- От веб-сервиса пользователю направляется результат оплаты.
Далее приведена информация о формате запросов и параметрах инициирования оплаты в одну стадию с использованием платежных карт, а также о формате оповещений с результатами оплаты.
Структура запроса
В этом разделе описана структура запросов для оплаты в одну стадию с использованием платежных карт. Далее описаны требования к запросам:
- POST-запрос должен отправляться в одну из следующих конечных точек:
- /v2/payment/card/sale — при передаче реквизитов карты в явном виде;
- /v2/payment/card/sale/saved — при передаче идентификатора, а не реквизитов карты;
- /v2/payment/card/sale/token — при передаче токена, а не реквизитов карты.
- В запросе должны использоваться следующие объекты и параметры:
- general — объект, содержащий основные идентификационные сведения запроса:
- project_id — идентификатор проекта, полученный от Rocketpay при интеграции;
- payment_id — идентификатор платежа, уникальный в рамках проекта мерчанта;
- signature — подпись запроса, составленная после указания всех параметров запроса (подробнее см. Подписывание и проверка подписи);
- customer — объект, содержащий сведения о пользователе:
- ip_address — IP-адрес пользователя;
- id — идентификатор пользователя в проекте мерчанта;
- payment — объект, содержащий сведения о платеже:
- amount — сумма оплаты в дробных единицах валюты без десятичной точки и пробелов за исключением случаев, когда у валюты нет дробной части. Если у валюты нет дробных единиц (то есть количество разрядов дробных единиц равно нулю), то в этом параметре нужно указывать сумму в основных единицах валюты. Подробнее о разрядах дробных единиц у валют см. Коды валют;
- currency — валюта платежа в формате ISO-4217 alpha-3.
- general — объект, содержащий основные идентификационные сведения запроса:
- В запросе должны содержаться сведения о платежной карте пользователя:
- при передаче реквизитов карты в явном виде нужно передать следующие данные в объекте card:
- pan — номер карты,
- year — год окончания срока действия карты,
- month — месяц окончания срока действия карты,
- card_holder — имя держателя карты (в соответствии с указанным на карте),
- cvv — код проверки подлинности карты (в соответствии с указанным на карте), если такой код у используемой карты есть.
У некоторых карт код проверки подлинности (CVV) отсутствует, в таких случаях в платежах с применением таких карт параметр cvv не передается. Подробнее о наличии CVV у карт и обязательности параметра cvv узнавайте у своего курирующего менеджера Rocketpay.
- при передаче идентификатора нужно передать идентификатор, связанный с реквизитами карты в платежной платформе, и код проверки подлинности карты в параметрах saved_account_id и cvv, если такой код поддерживается для используемой карты.
У некоторых карт код проверки подлинности (CVV) отсутствует, в таких случаях в платежах с применением таких карт параметр cvv не передается. Подробнее о наличии CVV у карт и обязательности параметра cvv узнавайте у своего курирующего менеджера Rocketpay.
- при передаче токена нужно передать токен и код проверки подлинности карты в параметрах token и cvv, если такой код у используемой карты есть.
У некоторых карт код проверки подлинности (CVV) отсутствует, в таких случаях в платежах с применением таких карт параметр cvv не передается. Подробнее о наличии CVV у карт и обязательности параметра cvv узнавайте у своего курирующего менеджера Rocketpay.
- при передаче реквизитов карты в явном виде нужно передать следующие данные в объекте card:
- В запросе должен содержаться объект return_url с адресами для перенаправления пользователя в веб-сервис:
- success — URL-адрес, на который перенаправляется пользователь в случае успешного завершения платежа;
- decline — URL-адрес, на который перенаправляется пользователь в случае отклонения платежа;
- return — URL-адрес, на который перенаправляется пользователь до завершения платежа независимо от его исхода. Этот же адрес используется, если не заданы параметры success и decline.
- При наличии особых региональных требований, а также от требований провайдеров и платежных систем, в запросе может понадобиться указать дополнительные сведения о пользователе:
- first_name — имя пользователя;
- last_name — фамилия;
- middle_name — отчество или среднее имя;
- day_of_birth — дата рождения;
- phone — номер телефона с кодом страны;
- email — адрес электронной почты;
- zip — почтовый индекс адреса проживания;
- address — адрес проживания (улица, номер дома);
- city — город проживания (или иной населенный пункт);
- district — округ (район, область и т. п.) проживания;
- state — регион проживания (штат, графство, кантон и т. п.);
- avs_post_code — почтовый индекс, зафиксированный эмитентом как актуальный для пользователя;
- avs_street_address — улица и номер дома, зафиксированные эмитентом как актуальные для пользователя.
За информацией о параметрах, требуемых в каждом конкретном случае, обращайтесь к своему курирующему менеджеру Rocketpay. Если вы не передадите в запросе необходимые сведения, вам потребуется выполнить процедуру дополнения информации о платеже.
- Дополнительно могут использоваться любые другие параметры, указанные в спецификации.
Вот пример запроса:
{
"general": {
"project_id": 42,
"payment_id": "456789",
"signature": "v7KNMpfogAxwRIL9tVftZ1ZZ5D/aZAeb0VMdeR+CqGrNxYyilUwSm...=="
},
"customer": {
"ip_address": "248.121.176.220",
"id": "customer_12"
},
"payment": {
"amount": 400000,
"currency": "USD"
},
"return_url": {
"success": "http://example.com/return",
"decline": "http://example.com/decline",
"return": "http://example.com/return"
},
//при передаче реквизитов карты в явном виде:
"card": {
"pan": "4242424242424243",
"year": 2025,
"month": 8,
"card_holder": "JOHN SMITH",
"cvv": "123"
}
//при передаче идентификатора ранее сохраненной платежной карты:
"saved_account_id": 2345678,
"cvv": "123"
//при передаче токена ранее сохраненной платежной карты:
"token": "f365bb1729f9b72fd9c09703a751c979f3becc679f29c3e35c91d18070d15654",
"cvv": "123"
}
Данные для перенаправления пользователей
- url — ссылка для перенаправления пользователя,
- body — данные для отправки запроса (может быть пустым).
- method — метод отправки запроса.
Такие оповещения платежная платформа отправляет на URL-адрес, указанный в параметрах вашего проекта. А платеж переводится в статус awaiting redirect result до момента завершения оплаты пользователем.
Если параметр body не содержит данных, он представлен в оповещении как пустой массив, в противном случае он присутствует в оповещении как JSON-объект с данными. Далее приведены примеры представления body в оповещении.
Рис.: Пример объекта redirect_data с данными для перенаправления: пустой массив body
"redirect_data": { "body": [], // Пустой массив "method": "POST", "url": "https://example.com/redirect/absd1234" }
Рис.: Пример объекта redirect_data с данными для перенаправления: объект body с данными
"redirect_data": { "body": { // Объект с данными "reference": "2000016" }, "method": "POST", "url": "https://example.com/redirect/absd1234" }
Структура оповещения
Для оповещения (callback) о результате оплаты в одну стадию с использованием платежных карт используется стандартая структура, описание которой представлено в разделе Оповещения (callbacks) в Gate.
В следующем примере содержится информация о том, что в проекте 42 для пользователя customer_12 была проведена оплата в одну стадию в размере 4000,00 USD с платежной карты №424242******4243.
Рис.: Пример данных о проведенной оплате в одну стадию
{
"account": {
"number": "424242******4243",
"token": "f365bb1729f9b72fd9c09703a751c979f3becc679f29c3e35c91d18070d15654",
"type": "visa",
"card_holder": "JOHN SMITH",
"id": 45678,
"expiry_month": "08",
"expiry_year": "2025"
},
"customer": {
"id": "customer_12",
"phone": "44991234567"
},
"payment": {
"date": "2019-01-11T13:02:42+0000",
"id": "456789",
"method": "card",
"status": "success",
"sum": {
"amount": 400000,
"currency": "USD"
},
"type": "purchase",
"description": ""
},
"project_id": 42,
"operation": {
"id": 969000002636,
"type": "sale",
"status": "success",
"date": "2019-01-11T13:02:42+0000",
"created_date": "2019-01-11T13:01:45+0000",
"request_id": "c6eed1eb14c629b4ef20b3b8086d...d04132c34b0088cbc0be4667c",
"sum_initial": {
"amount": 400000,
"currency": "USD"
},
"sum_converted": {
"amount": 400000,
"currency": "USD"
},
"provider": {
"id": 408,
"payment_id": "330157196",
"date": "2019-01-11T13:02:32+0000",
"auth_code": "",
"endpoint_id": "612266625"
},
"code": "0",
"message": "Success",
"eci": "07"
},
"signature": "v7KNMpfogAxwRIL9tVftZ1ZZ5D/aZAeb0VMdeR+CqGrNxYyilUwSm...=="
}
Далее представлен пример данных из оповещения с информацией об отказе в проведении оплаты. Оплата отклонена из-за ввода некорректных данных карты.
Рис.: Пример данных об отказе в проведении оплаты в одну стадию
{
"project_id": 42,
"payment": {
"id": "456789",
"type": "purchase",
"status": "decline",
"date": "2019-01-11T14:11:33+0000",
"method": "card",
"sum": {
"amount": 400000,
"currency": "USD"
},
"description": ""
},
"account": {
"number": "424242******4243",
"type": "visa",
"card_holder": "JOHN SMITH",
"expiry_month": "08",
"expiry_year": "2025"
},
"customer": {
"id": "customer_12",
"phone": "44991234567"
},
"operation": {
"id": 13300000004505,
"type": "sale",
"status": "decline",
"date": "2019-01-11T14:11:33+0000",
"created_date": "2019-01-11T14:11:00+0000",
"request_id": "c6eed1eb14c629b4ef20b3b8086d...d04132c34b0088cbc0be4667c",
"sum_initial": {
"amount": 400000,
"currency": "USD"
},
"sum_converted": {
"amount": 400000,
"currency": "USD"
},
"provider": {
"id": 12,
"payment_id": "48219213050",
"auth_code": "",
"endpoint_id": 12
},
"code": "10102",
"message": "Incorrect data entered",
"eci": "05"
},
"signature": "v7KNMpfogAxwRIL9tVftZ1ZZ5D/aZAeb0VMdeR+CqGrNxYyilUwSm...=="
}