1. Прежде чем начать
Предварительные требования
- Вы завершили шаги 1 и 2 процесса внедрения.
- Вы можете разместить предоставленный Java-сервер с завершением TLS, используя либо Google App Engine, либо собственное решение, в домене, настроенном в Google.
- Java установлена в вашей среде.
Что вы узнаете
- Как проверить подключение, отправив корректный запрос к API Google Echo.
- Как получить, расшифровать и проанализировать запрос от Google к API Echo, размещенному на партнерском сервере.
2. Настройка и требования
Скачать приложение
Скачайте пример кода на Java .
Обзор структуры приложения
Пример кода на Java интегрируется со стандартными платежными API Google. Структура проекта содержит каталоги outbound и inbound запросов, отражающие входящие запросы от Google к партнеру и исходящие запросы от реализации партнера к Google.
Обе эти директории имеют схожую иерархию упаковки по уровням. Три основных уровня — это controller , service и domain .
- Пакет
controllerсодержит API-интерфейсы. - Данный пакет
serviceотвечает за бизнес-логику, кодирование URL-адресов в формате base64 и шифрование. - Пакет
domainсодержит POJO-объекты.
Установите зависимости
Перейдите в каталог проекта и выполните следующую команду для установки необходимых зависимостей с помощью Maven Wrapper. Если вы используете App Engine, этот шаг можно пропустить.
./mvnw install
3. Настройте идентификатор учетной записи интегратора платежей (PIAID).
Идентификатор учетной записи платежного интегратора ( PIAID ) — это идентификатор, используемый для однозначной идентификации ваших интеграций. Вы должны были получить свой PIAID от Google, выполнив необходимые предварительные условия, прежде чем начать это руководство.
- Перейдите в каталог проекта по адресу
src/main/resources/application.properties. - Установите свойство
payment.integrator.account.idравным PIAID, выданному вам компанией Google.
payment.integrator.account.id={YOUR_PAYMENT_INTEGRATOR_ACCOUNT_ID}
4. Укажите URL-адрес эхо-сервера, размещенного Google.
URL-адрес echo размещенного Google, различается в зависимости от того, с каким API вы интегрируетесь. Перейдите в справочную документацию API для вашего конкретного типа интеграции и скопируйте URL-адрес API диагностического эхо-запроса. После копирования URL-адреса перейдите к следующим шагам, чтобы обновить его в проекте Java.
- Перейдите в каталог проекта по адресу
src/main/resources/application.properties. - Установите для свойства
API_SERVICE_NAMEзначение, соответствующее тому, что указано в документации для разработчиков.
google.hosted.echo.url=vgw.googleapis.com/gsp/{API_SERVICE_NAME}/echo/
5. Добавьте ключи PGP.
Как показано ниже, добавьте свои ключи PGP, чтобы включить шифрование PGP.
- Перейдите в
src/resources/publicKey1.gpgи добавьте в файл зашифрованный в ASCII открытый ключ. - Перейдите в
src/resources/privateKey1.gpgи добавьте в файл зашифрованный в ASCII закрытый ключ. - Перейдите в папку
src/resources/passphrase1.txtи добавьте секретную парольную фразу в файл.

Чтобы включить шифрование с двумя ключами, добавьте свой второй открытый ключ в файл publicKey2.gpg , свой второй закрытый ключ в файл privateKey2.gpg и свою вторую парольную фразу в passphrase.txt . После добавления вторых ключей раскомментируйте закомментированные строки кода, отвечающие за загрузку второй пары ключей, в методах KeyConfig.addPrivateKeyAndPassphrase(...) и KeyConfig.addPublicKeys(...) .
Отлично, теперь вы готовы запустить приложение!
6. Запустите приложение
Для запуска приложения выполните следующую команду.
$ ./mvnw spring-boot:run
Если вы используете предварительно настроенный экземпляр App Engine, выполните вместо этого следующую команду.
$ gcloud app deploy
По умолчанию сервер будет прослушивать порт 8080. Чтобы просмотреть пользовательский интерфейс Swagger Open API, перейдите по указанному ниже URL-адресу.
https://{APPLICATION_HOST}/swagger-ui.html
7. Проверьте подключение к API Google Standard Payments Outbound.
Теперь, когда приложение запущено, пришло время проверить подключение к API Google Echo.
Для выполнения следующей команды инициировать вызов с серверов Google из вашего экземпляра тестового приложения можно использовать либо Swagger UI, либо CLI. API echo тестового приложения принимает POST-запрос в открытом виде. После получения запроса отправляется последующий запрос к API, размещенному на серверах Google.
Отправьте запрос через командную строку.
Замените HOSTNAME на имя вашего сервера перед выполнением команды.
$ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Partner Bank!' https://{HOSTNAME}/echo
Отправьте запрос в Swagger UI.
Чтобы отправить запрос с помощью Swagger UI, перейдите по https://{APPLICATION_HOST}/swagger-ui и укажите сообщение клиента в теле запроса. Нажмите кнопку «Выполнить», когда будете готовы отправить запрос в Google.

Получите ответ
В случае успешного выполнения запроса к API компания Google предоставит следующий ответ.
{
"responseHeader":{
"responseTimestamp":"1606710026723"
},
"clientMessage":"Hello from Bank Little Bear!",
"serverMessage":"Server message."
}
Шаг за шагом
Теперь, когда ваш сервер успешно отправил запрос, давайте рассмотрим, как это произошло.
Сформировать запрос
createEchoRequestWithMessage в OutboundEchoService формирует echo запрос, отправляемый в API Google.
String jsonEchoRequestMessage = objectMapper.writeValueAsString(createEchoRequestWithMessage(message));
Сгенерированный запрос включает в себя объект clientMessage , а также несколько полей со значениями по умолчанию.
{
"requestHeader":{
"protocolVersion":{
"major":1,
"minor":0,
"revision":0
},
"requestId":"ddfe0fd0-ffdc-4fcf-991a-f0611ec83970",
"requestTimestamp":"1606715389040"
},
"clientMessage":"Hello from Bank Little Bear!"
}
Кодирование и шифрование запроса с помощью Base64url.
Все запросы шифруются и кодируются в формате base64url. В этом примере файл PgpEncryptor.java содержит вспомогательные методы, которые выполняют шифрование и расшифровку, а также кодирование base64url. Приведенный ниже метод кодирует запрос и выполняет шифрование с использованием открытого ключа Google.
String encryptedMessage = pgpEncryptor.encrypt(jsonEchoRequestMessage);
Отправьте POST-запрос
Зашифрованное сообщение отправляется посредством POST-запроса.
postStandardPaymentsEchoApi(encryptedMessage)
Decrypt и base64url декодируют ответ и возвращают его.
Успешный ответ Google закодирован и зашифрован с помощью base64url, поэтому его необходимо также декодировать и расшифровать, прежде чем он будет возвращен в открытом виде. Метод decrypt base64url декодирует и расшифровывает ответ.
String decryptedData =
pgpEncryptor.decrypt(postStandardPaymentsEchoApi(encryptedMessage).getBody());
Верните ответ.
В ответ возвращается код состояния HTTP-ответа 202.
return new ResponseEntity<>(decryptedData, HttpStatus.ACCEPTED);
8. Проверка подключения входящего API
Для проверки входящего подключения к API echo, Google отправит запрос к размещенному на партнерском сервере API echo. Когда вы будете готовы, пожалуйста, свяжитесь со своим контактным лицом в Google, чтобы инициировать этот запрос от Google.
Проверка эхо-сигнала считается завершенной, когда вы можете прочитать входящий эхо-запрос от Google и ответить действительным эхо-ответом.
Шаг за шагом
Теперь, когда ваш сервер успешно получил и обработал запрос, давайте рассмотрим, как это происходило.
Расшифровка и декодирование запроса с помощью Base64url.
При получении запроса PgpEncryptor.java вызовет функцию decrypt , которая выполнит декодирование и расшифровку запроса с помощью base64url.
String decryptedRequest = pgpEncryptor.decrypt(echoRequest);
Получен запрос
После расшифровки и дешифрования Google отправил сообщение, содержащее данные, похожие на приведенные ниже.
{
"requestHeader": {
"protocolVersion": {
"major": 1
},
"requestId": "G1MQ0YERJ0Q7LPM",
"requestTimestamp": {
"epochMillis":1481899949606
},
"paymentIntegratorAccountId": "abcdef123456"
},
"clientMessage": "echo Me"
}
Сформируйте ответ
После успешного прочтения входящего эхо-запроса вы готовы сформировать ответ.
private EchoResponse convertEchoRequestStringToEchoResponse(String decryptedRequest);
В ответе содержится сообщение от Google, а также метка времени и сообщение от сервера.
{
"responseHeader": {
"responseTimestamp": {
"epochMillis":1481899950236
}
},
"clientMessage": "echo Me",
"serverMessage": "Debug ID 12345"
}
Кодирование и шифрование ответа с помощью Base64url.
Поскольку все запросы зашифрованы и закодированы в base64url, PgpEncryptor.java вызывает encrypt для кодирования запроса в base64url.
pgpEncryptor.encrypt(echoResponseString)
Верните ответ.
В ответ возвращается код состояния HTTP-ответа 202.
return new ResponseEntity<>(pgpEncryptor.encrypt(echoResponseString), HttpStatus.ACCEPTED);
9. Поздравляем!
В этом практическом задании вы успешно установили соединение с API платежей!