Общий порядок интеграции
Обзор
Платежная форма Payment Page допускает различные варианты ее использования для выполнения оплаты и других действий. Так, для вызова формы можно работать напрямую с API Payment Page или же использовать подключаемую библиотеку Rocketpay, а открывать форму можно в отдельной вкладке браузера или же непосредственно на странице веб-сервиса. Различные варианты использования Payment Page описаны в разделе Общая информация о Payment Page, а в данном разделе представлена информация о порядке и технических особенностях интеграции через Payment Page.
К базовым условиям для работы с Payment Page независимо от используемых технических решений относятся:
- вызов платежной формы должен осуществляться с использованием протоколов HTTP версии не ниже 1.1 и TLS версии не ниже 1.2;
- данные в запросах и оповещениях должны кодироваться и обрабатываться с использованием кодировки UTF-8;
- запросы должны отправляться по URL-адресу Payment Page, например https://paymentpage.rocketpay.kz.
- в качестве пользовательского браузера могут использоваться актуальные версии таких браузеров, как Chrome, Safari, Opera, Firefox, Microsoft Edge, Internet Explorer, Yandex Browser, QQ, MIUI, Samsung Internet, 360 и ряда других.
- Отключите кеширование информации о разрешении DNS-имен и адресов платежной платформы.
- Не применяйте списки управления доступом (Access Control List, ACL) к исходящим подключениям к платежной платформе.
- По возможности не используйте систему защиты на основе SSL/TLS Fingerprinting в исходящих подключениях к платежной платформе.
- Обновляйте корневые сертификаты не реже чем раз в полгода.
Подробную информацию о работе Payment Page в разных средах можно получить у специалистов технической поддержки Rocketpay (support@rocketpay.kz), а информацию о вариантах интеграции, схемах работы и структуре запросов — в этом разделе.
Этапы интеграции
Для интеграции с платежной платформой Rocketpay через Payment Page необходимо:
-
Решить организационные вопросы, касающиеся взаимодействия с Rocketpay:
- Если у компании нет идентификатора проекта и секретного ключа для взаимодействия с Rocketpay — отправить заявку на подключение.
- Для проведения платежей с использованием платежных карт — предоставить курирующему менеджеру Rocketpay копию сертификата или лист самооценки соответствия требованиям PCI DSS. С вопросами о заполнении листа самооценки можно обращаться к курирующему менеджеру Rocketpay.
- При необходимости поддержать индивидуальный дизайн платежной формы — согласовать с курирующим менеджером Rocketpay условия реализации такого дизайна и необходимость проведения приемки результатов.
- Согласовать со специалистами технической поддержки Rocketpay порядок и сроки интеграции, тестирования и запуска в работу.
-
Выполнить подготовительные технические работы, собственными средствами или с использованием специализированных компонентов, предоставляемых Rocketpay:
- Если требуется индивидуальный дизайн платежной формы — разработать макет в соответствии с требованиями, перечисленными в разделе Индивидуальный дизайн Payment Page, и согласовать его со специалистами технической поддержки.
- Установить и подключить необходимые библиотеки и (или) плагины.
- Обеспечить возможности сбора параметров, необходимых для выполнения целевого действия, а также формирования и отправки запросов на открытие Payment Page на стороне клиентской части веб-сервиса.
- Обеспечить подписывание данных и корректное реагирование на оповещения на стороне серверной части веб-сервиса.
-
Совместно со специалистами технической поддержки Rocketpay протестировать выполнение целевых действий и запустить техническое решение в работу.
После тестирования и мониторинга, когда подтверждается корректность выполнения целевых действий на рабочем трафике, специалисты технической поддержки переводят работу с веб-сервисом в режим штатной поддержки.
При возникновении вопросов о работе с Payment Page на этапах 2 и 3 можно обращаться в службу технической поддержки Rocketpay support@rocketpay.kz.
Схема взаимодействия между пользователем, веб-сервисом и Payment Page
При использовании Payment Page выполнение любого действия подразумевает взаимодействие между тремя основными сторонами: пользователем, веб-сервисом и Payment Page:
- Взаимодействие веб-сервиса и Payment Page строится на обмене HTTP-сообщениями по принципу «запрос-ответ». В такой схеме клиентская часть веб-сервиса отправляет в Payment Page запросы, а Payment Page отправляет синхронные ответы в клиентскую часть веб-сервиса и асинхронные оповещения — в серверную части веб-сервиса. Как правило, Payment Page отправляет итоговые оповещения о результатах выполнения запроса, но в некоторых случаях могут отправляться и промежуточные оповещения, например если пользователь повторно пытется ввести данные. Кроме того, в веб-сервисе можно реализовать отслеживание интерфейсных событий в Payment Page с помощью встраиваемой библиотеки.
- Взаимодействие пользователя и Payment Page осуществляется через пользовательский интерфейс платежной формы и технически также основано на обмене HTTP-сообщениями по принципу «запрос-ответ» между пользовательским браузером и Payment Page.
Порядок взаимодействия между этими и другими сторонами представлен далее на схеме.
Рис.: Порядок взаимодействия
- Пользователь на стороне клиентской части веб-сервиса инициирует выполнение целевого действия, например оплату.
- На стороне клиентской части веб-сервиса выполняется сбор параметров, необходимых для формирования запроса на открытие Payment Page, и их передача в серверную часть веб-сервиса.
- Серверная часть веб-сервиса обрабатывает поступивший запрос:
- проверяет параметры;
- при необходимости дополняет полученные параметры информацией, которая хранится в серверной части;
- вычисляет подпись к собранному массиву параметров.
- Серверная часть веб-сервиса направляется ответ на запрос в клиентскую часть.
- Клиентская часть принимает ответ, после чего формирует и отправляет на заданный URL Rocketpay запрос на открытие Payment Page.
- Запрос на открытие Payment Page поступает в платежную платформу.
- Платежная платформа разбирает запрос, проверяя наличие обязательных параметров и корректной подписи.
- Осуществляется подготовка Payment Page согласно настройкам проекта и параметрам вызова.
- Пользователю отображается подготовленная платежная форма.
- Пользователь выполняет необходимые действия, например вводит данные платежной карты.
- Запрос на проведение платежа поступает в платежную платформу.
- Выполняются дальнейшая обработка запроса и его отправка в платежную среду.
- Платеж обрабатывается в платежной среде.
- Из платежной среды в платежную платформу направляется уведомление о результате платежа.
- Платежная платформа направляет в веб-сервис оповещение о результате платежа.
- Платежная платформа отправляет в Payment Page информацию о результате проведения платежа.
- Результат платежа отображается пользователю на Payment Page.
Доработка веб-сервиса мерчанта
Общая информация
До начала работы с Payment Page вам нужно в своем веб-сервисе реализовать:
- сбор параметров, необходимых для проведения платежа;
- формирование подписи;
- открытие Payment Page;
- обработку оповещений;
- обработку оповещений (callbacks) с отправкой ответов об их приеме.
Информация о настройке веб-сервиса с использованием собственных решений и каждого из специализированных компонентов, предоставляемых Rocketpay, представлена далее.
Использование собственных решений
Для настройки взаимодействия с Payment Page с использованием собственных решений на стороне веб-сервиса необходимо обеспечить выполнение всех требуемых действий в клиентской и серверной частях.
- В клиентской части веб-сервиса:
- Подготовить решение для сбора данных, необходимых для вызова платежной формы. Минимальный набор таких данных для проведения оплаты содержит идентификаторы проекта, платежа и пользователя, а также сумму и код валюты платежа.
-
Если выбран способ открытия Payment Page в модальном окне или в элементе iframe HTML-страницы — подключить CSS-библиотеку, добавив ее на страницу веб-сервиса с помощью элемента
<link>
, который следует разместить внутри заголовка страницы.<head> ... <!-- Подключение CSS-библиотеки --> <link rel="stylesheet" href="https://paymentpage.rocketpay.kz/shared/merchant.css" /> ... </head>
Это необходимо для корректного отображения платежной формы при указанных способах открытия. Если же выбран способ открытия в отдельной вкладке браузера, подключение этих библиотек не требуется.
- Если выбран способ открытия Payment Page в модальном окне и необходимо оформление модального окна в соответствии с дизайном веб-сервиса — определить стили CSS-классов для этого оформления (подробнее). При использовании способов открытия в элементе iframe и в отдельной вкладке браузера такое оформление не используется.
- Реализовать отправку собранных данных в серверную часть веб-сервиса для их подписывания и обеспечить прием подписанных данных от серверной части.
- Реализовать возможности вызова Payment Page выбранными способами: в отдельной вкладке браузера, в модальном окне и/или в элементе iframe HTML-страницы.
- Если необходимо фиксировать определенные интерфейсные события — открывать Payment Page в модальном окне или в элементе iframe HTML-страницы и реализовать функции для обработки таких событий.
- В серверной части веб-сервиса:
- Обеспечить прием данных для подписывания от клиентской части веб-сервиса.
- Реализовать алгоритм формирования подписи данных.
- Обеспечить отправку подписанных данных в клиентскую часть веб-сервиса.
- Обеспечить прием оповещений от платежной платформы, с проверкой подписи и отправкой ответов о приеме, а также обработку информации из этих оповещений.
Использование JavaScript-библиотеки
JavaScript-библиотека Rocketpay подключается к клиентской части веб-сервиса и позволяет открывать Payment Page в модальном окне и в элементе iframe HTML-страницы. Кроме того, использование такой библиотеки позволяет получать информацию об интерфейсных событиях в платежной форме, в том числе о выборе платежного метода, изменении значений полей ввода и других (подробнее).
Если используется JavaScript-библиотека, на стороне серверной части могут использоваться собственные решения. На стороне клиентской части необходимо:
- Подготовить решение для сбора данных, необходимых для вызова платежной формы. Минимальный набор таких данных для проведения оплаты содержит идентификаторы проекта, платежа и пользователя, а также сумму и код валюты платежа.
-
Подключить CSS- и JavaScript-библиотеки, добавив к странице веб-сервиса с помощью элементов
<link>
для CSS-библиотеки и<script>
для JavaScript-библиотеки. Эти элементы следует разместить внутри заголовка страницы.<head> ... <!-- Подключение CSS-библиотеки --> <link rel="stylesheet" href="https://paymentpage.rocketpay.kz/shared/merchant.css" /> <!-- Подключение JavaScript-библиотеки --> <script type="text/javascript" src="https://paymentpage.rocketpay.kz/shared/merchant.js"> </script> ... </head>
- Если выбран способ открытия Payment Page в модальном окне и необходимо оформление модального окна в соответствии с дизайном веб-сервиса — определить стили CSS-классов для этого оформления (подробнее). При использовании способов открытия в элементе iframe и в отдельной вкладке браузера такое оформление не используется.
- Реализовать отправку собранных данных в серверную часть веб-сервиса для их подписывания и обеспечить прием подписанных данных от серверной части.
- Реализовать возможности вызова Payment Page по щелчку кнопки или по иному событию в пользовательском интерфейсе выбранным способом: в модальном окне или в элементе iframe HTML-страницы — с использованием JavaScript-объекта EPayWidget.
- Если необходимо фиксировать определенные интерфейсные события — открывать Payment Page в модальном окне или в элементе iframe HTML-страницы и реализовать функции для обработки таких событий.
Порядок обработки запросов в платежной платформе
Взаимодействие между веб-сервисом и Payment Page начинается с отправки запроса на открытие Payment Page. После получения такого запроса в платежной платформе выполняются следующие действия:
- Получив запрос, платежная платформа проверяет наличие в нем минимального набора параметров и корректность подписи.
- Если данные корректны, запрос переводится на этап обработки, в веб-сервис отправляется ответ о приеме запроса в обработку.
- Если в запросе обнаруживаются ошибки, обработка запроса прекращается и пользователю отображается информация об ошибке. При этом оповещение в веб-сервис не направляется.
- На этапе обработки запроса платежная платформа подготавливает Payment Page в соответствии с настройкой проекта и параметрам вызова, а затем отображает ее пользователю.
- Если пользователь подтверждает выполнение целевого действия, то запрос переводится на этап выполнения. Для всех целевых действий, за исключением формирования токена, на этом этапе в платформе регистрируется платеж: создается объект
payment
. - Если пользователь не подтверждает выполнение целевого действия, то работа с запросом прекращается. В этом случае не регистрируется платеж и не отправляется оповещение к веб-сервису.
- Если пользователь подтверждает выполнение целевого действия, то запрос переводится на этап выполнения. Для всех целевых действий, за исключением формирования токена, на этом этапе в платформе регистрируется платеж: создается объект
- На этапе выполнения запроса обеспечивается выполнение всех необходимых действий для получения целевого результата.
- Если запрос выполнен, то платежная платформа отправляет в веб-сервис оповещение о результате.
- Если при выполнении запроса возникла ошибка, то работа с запросом прекращается и платежная платформа отправляет в веб-сервису оповещение с информацией об этой ошибке.
Запрос
Общая информация
При работе с Payment Page все данные от веб-сервиса должны передаваться в запросах (requests) — HTTP-сообщениях заданной структуры. При этом формат данных и параметры адресации таких запросов зависят от выбранного способа открытия платежной формы.
В этом разделе представлена информация о поддерживаемых методах отправки запросов на открытие Payment Page, форматах данных и параметрах адресации таких запросов.
Методы отправки
Вне зависимости от выбранного способа открытия Payment Page для отправки HTTP-запросов поддерживаются методы POST и GET. Выбор метода осуществляется на стороне веб-сервиса и не ограничивается со стороны платежной платформы. По умолчанию, если в HTTP-запросе не указано другое, запросы идентифицируются как отправленные методом GET. В некоторых браузерах максимальная длина URL-адреса ограничена, поэтому при передаче таких сведений, как информация о товарных позициях или «длинная запись», рекомендуется использовать метод POST.
Основные характеристики методов POST и GET представлены далее.
POST | GET | |
---|---|---|
Уровень безопасности | Более высокий за счет передачи параметров в теле запроса | Менее высокий в связи с передачей параметров в адресной строке |
Возможность передачи всех параметров Payment Page API | + | * |
Возможность передавать в виде ссылки | – | + |
* Ограничение объема передаваемых данных допустимой длиной URL.
Рис.: Пример GET-запроса на открытие Payment Page
GET /payment?payment_currency=EUR&project_id=42&payment_amount=1000&customer_id=123&payment_id=4438&signature=AE5hmtzdP0Dt7qGTg... HTTP/1.1
Host: https://paymentpage.rocketpay.kz
Рис.: Пример POST-запроса на открытие Payment Page
POST /payment HTTP/1.1
Host: https://paymentpage.rocketpay.kz
{
"payment_currency": EUR,
"project_id": 42,
"payment_amount": 1000,
"customer_id": 123,
"payment_id": "4438",
"signature": "AE5hmtzdP0Dt7qGTg..."
}
Параметры адресации
При формировании запросов на открытие Payment Page в отдельной вкладке браузера адреса отправки указываются следующим образом:
-
Если для отправки запросов используется метод GET, в качестве доменного имени запрашиваемого ресурса указывается базовый адрес Payment Page (например, https://paymentpage.rocketpay.kz), а затем следуют: URL-путь для выполнения целевых действий через Payment Page, знак вопроса
?
и строка данных, состоящая из пар «имя-значение» параметра. Имена и значения параметров разделяются знаком «равно» (=
), а сами пары разделяются знаками «амперсанд» (&
). Информацию об URL-адресе Payment Page можно получить у своего курирующего менеджера Rocketpay.// URL-путь для выполнения целевых действий через Payment Page /payment // Строка данных payment_currency=EUR&project_id=42&payment_amount=1000&customer_id=123&payment_id=4438&signature=AE5hmtzdP0Dt7qGTg%3D%3D // Полный адрес https://paymentpage.rocketpay.kz/payment?payment_currency=EUR&project_id=42&payment_amount=1000&customer_id=123&payment_id=4438&signature=AE5hmtzdP0Dt7qGTg%3D%3D
- Если для отправки запросов используется метод POST, в качестве доменного имени указывают базовый адрес Payment Page (например,
https://paymentpage.example.com
), а затем добавляют URL-путь для выполнения нужного действия через Payment Page. Данные в этом случае передаются в теле запроса. Базовый адрес Payment Page узнавайте у своего курирующего менеджера Rocketpay.
При формировании запросов на открытие Payment Page в элементе iframe или в модальном окне, как правило, адреса отправки указывать не требуется.
Ответ
Payment Page подтверждает получение запроса отправкой в пользовательский браузер ответа (response) — HTTP-сообщения определенной структуры — в рамках того же сеанса. Передаваемые в ответе данные содержат:
- сведения о приеме запроса, если запрос принят в обработку;
- сведения об ошибке, если запрос не принят в обработку.
Перечень кодов ответов и пояснительных фраз, используемых в ответах, приведен далее в таблице.
Код с пояснением | Описание |
---|---|
200 OK |
Запрос успешно принят, ожидайте итоговое оповещение. Пользователю отображается платежная форма |
400 Bad Request |
Запрос не принят из-за отсутствия в нем обязательного параметра, например идентификатора проекта, или из-за некорректной подписи. Пользователю отображается сообщение об ошибке |
404 Not Found |
Запрос не принят в обработку из-за некорректных значений параметров Пользователю отображается сообщение об ошибке |
500 Internal Error |
Запрос не принят в обработку из-за сбоя в платежной платформе. Пользователю отображается сообщение об ошибке |
Оповещение (callback)
Для передачи промежуточной и итоговой информации о результате обработки и выполнения запроса в рамках асинхронного взаимодействия используются оповещения (callbacks) — HTTP-запросы, отправляемые методом POST от платежной платформы на согласованные адреса. Общая структура оповещений описана далее, а подробная информация о работе с ними — в разделе Оповещения (callbacks) в Payment Page.
В каждом оповещении от платформы содержатся следующие элементы в порядке перечисления:
- стартовая строка с указанием метода передачи запроса (
POST
), URL веб-сервиса для отправки оповещений о результатах (в примере —/notify/success
), протокола и его версии (HTTP/1.1
); - поля заголовка, в том числе поле
Host
с указанием доменного имени веб-сервиса (в примере —webservice.com
); - пустая строка — разделитель, отделяющая служебную информацию от тела сообщения;
- тело сообщения, содержащее JSON-строку в кодировке UTF-8 с набором данных и подписью к ним.
Далее представлен пример оповещения с информацией о результате проведения платежа. Содержимое JSON-строки в этом примере разбито на несколько строк для удобства чтения.
Рис.: Пример оповещения
POST /notify/success HTTP/1.1 Content-Length: 1237 User-Agent: GuzzleHttp/6.3.3 curl/7.47.0 PHP/7.0.32-0ubuntu0.16.04.1 Content-Type: application/json Host: webservice.com { "account":{ "number":"421234******1234", "token":"1234567890", "type":"visa", "card_holder":"TEST TEST", "id":1234, "expiry_month":"**", "expiry_year":"****" }, "customer":{ "id":"12345", "phone":"***********" }, "payment":{ "date":"2019-06-07T11:38:31+0000", "id":"1234567890", "method":"card", "status":"success", "sum":{ "amount":175000, "currency":"RUB" }, "type":"purchase", "description":"Deposit to 1234567890" }, "project_id":25, "processingDateTime":"2019-06-07T11:38:30+0000", "country":"RU", "product_name":"Visa", "issuer_name":"", "operation":{ "id":1234567890, "type":"sale", "status":"success", "date":"2019-06-07T11:38:32+0000", "created_date":"2019-06-07T11:37:56+0000", "request_id":"1234567890-1234567890", "sum_initial":{ "amount":175000, "currency":"RUB" }, "sum_converted":{ "amount":175000, "currency":"RUB" }, "provider":{ "id":11, "payment_id":"098765432", "date":"2019-06-07T11:38:30+0000", "auth_code":"", "endpoint_id":1 }, "code":"0", "message":"Success", "eci":"05" }, "signature":"qwertyuioiuytrewqwertyuu123434" }