Оплата в одну стадию
Общая информация
В платежной платформе оплата в одну стадию проводится, как описано в разделе Схема и статусы разовой оплаты в одну стадию.
При проведении разовой оплаты в одну стадию реквизиты платежного инструмента могут указываться в одной из следующих форм:
- Реквизиты (в явном виде) Это базовая форма, при использовании которой необходимо получить реквизиты у пользователя, а затем передать эти реквизиты в платежную платформу в запросе на платеж.
- Идентификатор реквизитов В этом случае со стороны веб-сервиса передается идентификатор, однозначно ассоциированный с реквизитами платежного инструмента на стороне платежной платформы (подробнее — в разделе Сохранение платежных данных).
- Токен реквизитов В отличие от базового способа, вместо полных реквизитов передается токен. Для использования этого способа необходимо провести первоначальный платеж. Подробная информация об использовании токена представлена в разделе Использование токенов.
Схема проведения
Для проведения оплаты в одну стадию через 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...==" }