SDK для Java
SDK для Java — это набор средств разработки для взаимодействия веб-сервисов, разработанных на Java, с платежной платформой JetPay при проведении оплаты через Payment Page. В этом разделе представлена информация о работе с SDK для Java с примерами кода на языке программирования Java.
SDK для Java совместим с Java SE Development Kit версии 8 или выше и доступен для загрузки на GitHub по следующей ссылке: https://github.com/Jetpay/paymentpage-sdk-java.
Возможности
- подписывать набор параметров платежа и формировать запрос для вызова Payment Page,
- проверять подлинность оповещений от JetPay и получать из них информацию о платежах.
Состав
SDK для Java содержит библиотеки для разработки и автоматизированного тестирования, а также служебные файлы.
Порядок работы
Для использования SDK для Java необходимо:
- Решить организационные вопросы, касающиеся взаимодействия с JetPay:
- Если у компании нет идентификатора проекта и ключа для взаимодействия с JetPay — отправить заявку на подключение.
- Если у компании идентификатор и ключ для взаимодействия с JetPay есть — сообщить специалистам технической поддержки о намерении интеграции с использованием SDK для Java и согласовать с ними порядок тестирования.
- Установить библиотеки, входящие в состав SDK для Java, в каталог с исходным кодом веб-сервиса и подключить их в коде, а также доработать код для использования необходимой функциональности.
- Протестировать и запустить в работу обновленный исходный код веб-сервиса.
- Для тестирования следует использовать тестовый идентификатор проекта, тестовые значения параметров платежа и пример оповещения из библиотеки test/java.
- Для перевода в рабочий режим необходимо заменить тестовое значение project_id на рабочее, полученное от JetPay.
При возникновении вопросов о работе с SDK для Java следует обращаться в службу технической поддержки JetPay: support@jetpay.kz.
Установка и подключение библиотек
Устанавливать библиотеки, входящие в состав SDK для Java, в проект с исходным кодом веб-сервиса можно вручную или автоматически. Способы установки и подключения библиотек могут отличаться в зависимости от среды разработки.
Чтобы установить библиотеки вручную и подключить их в исходном коде веб-сервиса, необходимо:
- Загрузить SDK для Java и сформировать JAR-архив из файлов, входящих в SDK.
- Если в каталоге проекта с исходных кодом веб-сервиса не создан каталог libs, необходимо создать его. Поместить в каталог libs JAR-архив.
- Подключить файл в проекте с исходным кодом веб-сервиса.
Вызов платежной формы
Запрос для вызова Payment Page формируется из набора параметров, подписываемых для обеспечения защиты данных при передаче запроса в JetPay. SDK для Java позволяет автоматически подписывать параметры и формировать из них запрос. Для вызова Payment Page с использованием SDK для Java следует:
- Создать объект класса
Payment
и указать значения параметров платежа.Payment payment = new Payment('186', "1555943554067"); // Идентификатор проекта и идентификатор платежа, уникальный в рамках проекта payment .setParam(Payment.PAYMENT_AMOUNT, 1001) // Сумма в дробных единицах валюты .setParam(Payment.PAYMENT_CURRENCY, "RUB") // Код валюты в формате ISO-4217 alpha-3 .setParam(Payment.PAYMENT_DESCRIPTION, "Тестовый платеж"); // Описание платежа. Необязательный параметр
Все параметры в данном примере, за исключением описания платежа, являются необходимыми для любой оплаты. Дополнительно можно использовать любые другие параметры из числа доступных для работы с Payment Page. Подробнее о доступных параметрах — в разделе Параметры открытия платежной страницы Payment Page.
- Создать объект класса
Gate
и указать значение секретного ключа, полученное от JetPay. Секретный ключ необходим для автоматического подписывания параметров.Gate gate = new Gate("<secret_key>"); // Секретный ключ проекта, полученный при интеграции от JetPay
- Сформировать запрос для вызова платежной формы.
String paymentUrl = gate.getPurchasePaymentPageUrl("<pp_host>", payment);
Корректный запрос для вызова платежной формы содержит подпись и параметры платежа:
https://paymentpage.jetpay.kz/payment?signature=OEKRlLXKStyo ...%3D%3D&payment_id=1555943554067...123
- Использовать сформированный запрос для вызова платежной формы.
Далее приведен пример формирования запроса для вызова платежной формы Payment Page с открытием на английском языке. На странице с выбором платежных методов обеспечивается отображение информации о платеже: идентификатора, валюты, суммы и описания платежа.
Рис.: Пример формирования запроса на открытие Payment Page
Payment payment = new Payment('186', "1555943554067"); // Идентификатор проекта и идентификатор платежа, уникальный в рамках проекта payment .setParam(Payment.PAYMENT_AMOUNT, 1001) // Сумма в дробных единицах валюты .setParam(Payment.PAYMENT_CURRENCY, "RUB") // Код валюты в формате ISO-4217 alpha-3 .setParam(Payment.PAYMENT_DESCRIPTION, "Тестовый платеж") // Описание платежа. Необязательный параметр .setParam(Payment.LANGUAGE_CODE, ("en") // Код языка, на котором Payment Page открывается пользователю Gate gate = new Gate("mySecret"); // Секретный ключ проекта, полученный при интеграции от JetPay String paymentUrl = gate.getPurchasePaymentPageUrl("example.com", payment); // Готовый запрос с подписью
Обработка оповещений
Информацию о результатах проведения платежей можно получать в оповещениях, отправляемых от JetPay на URL-адрес, который необходимо сообщить службе технической поддержки JetPay. Оповещение представляет собой HTTP-запрос POST с данными в формате JSON-строки. Чтобы извлечь информацию о результате проведения платежа из JSON-строки, необходимо:
- Если ранее, при формировании запроса для вызова Payment Page, не был создан объект класса
Gate
, создать его и указать значение секретного ключа, полученного от JetPay.Gate gate = new Gate("<secret_key>");
- Создать объект класса
Callback
, используя JSON-строку с информацией о платеже из оповещения от JetPay:Callback callback = gate.handleCallback(data);
- Использовать методы, доступные для работы с оповещениями. Можно получить всю информацию о платеже или информацию только об отдельных параметрах платежа:
callback.getPaymentId(); // Получение идентификатора платежа callback.getPaymentStatus(); // Получение текущего статуса платежа callback.getPayment(); // Получение всей информации о платеже
Далее приведен пример данных из оповещения, которое включает в себя подпись и информацию о результатах проведения платежа. При использовании SDK для Java проверка подписи в оповещении выполняется автоматически.
Рис.: Пример оповещения о проведении оплаты
{
"project_id": 186, // Идентификатор проекта
"payment": { // Информация о платеже
"id": "1555943554067", // Идентификатор платежа
"type": "purchase", // Тип платежа
"status": "success", // Статус платежа
"date": "2018-08-28T09:11:28+0000", // Дата и время проведения платежа
"method": "card",
"sum": { // Сумма и валюта платежа
"amount": 1000,
"currency": "RUB"
},
"description": "Тестовый платеж" // Описание платежа
},
"account": { // Информация о платежном средстве
"number": "431422******0056",
"token": "9cb38282187b7a5b5b91b5814c6b814162741b29c0c486fbbc500cd451abb8b2",
"type": "visa",
"card_holder": "ADA LOVELACE",
"id": 778804,
"expiry_month": "11",
"expiry_year": "2022"
},
"operation": { // Информация о последней операции в рамках платежа
"id": 17839000001150, // Идентификатор операции
"type": "sale", // Тип операции
"status": "success", // Статус операции
"date": "2018-08-28T09:11:28+0000", // Дата и время проведения операции
"created_date": "2018-08-28T09:10:50+0000",
"request_id": "2c8af331519833f2c96c4a1aaf60edfcffb...", // Идентификатор запроса
"sum_initial": { // Сумма и валюта операции, указанные в запросе
"amount": 1000,
"currency": "RUB"
},
"sum_converted": {
// Сумма и валюта операции с учетом настроенных для проекта правил конвертации
"amount": 1000,
"currency": "RUB"
},
"provider": { // Информация о проведении платежа в платежной системе
"id": 6,
"payment_id": "15354474886323",
"date": "2018-02-07T08:34:24+0000",
"auth_code": "563253",
"endpoint_id": 6
},
"code": "0", // Унифицированный код ответа
"message": "Success", // Расшифровка кода ответа
"eci": "05" // Код индикатора ECI, отображающий результат 3D-Secure проверки
},
"signature": "22YlUIIgoppli/JX8w5F5+c2h12RXi81WLmgDx..." // Подпись оповещения
}