Как установить соединение с API Google на Java

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 отвечает за бизнес-логику, кодировку base64url и шифрование.
  • Пакет domain содержит POJO.

Установить зависимости

Перейдите в каталог проекта и выполните следующую команду, чтобы установить необходимые зависимости с помощью Maven Wrapper. Если вы используете App Engine, вы можете пропустить этот шаг.

./mvnw install

3. Настройте идентификатор учетной записи платежного интегратора (PIAID).

Идентификатор учетной записи платежного интегратора ( PIAID ) – это идентификатор, используемый для уникальной идентификации ваших интеграций. Вы должны были получить свой PIAID от Google, выполнив предварительные требования перед началом работы с этим руководством.

  1. Перейдите к src/main/resources/application.properties в каталоге проекта.
  2. Установите для свойства 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.

  1. Перейдите к src/main/resources/application.properties в каталоге проекта.
  2. Установите свойство 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 и добавьте в файл секретную фразу-пароль.

Добавление ключей PGP

Чтобы включить шифрование с двойным ключом, добавьте свой второй открытый ключ в publicKey2.gpg , добавьте второй закрытый ключ в privateKey2.gpg и добавьте вторую парольную фразу в passphrase.txt . После добавления вторых ключей раскомментируйте закомментированные строки кода, которые отвечают за загрузку второй пары ключей в KeyConfig.addPrivateKeyAndPassphrase(...) и KeyConfig.addPublicKeys(...) .

Отлично, все готово для запуска приложения!

6. Запустите приложение.

Чтобы запустить приложение, выполните следующую команду.

  $ ./mvnw spring-boot:run

Если вы используете предварительно настроенный экземпляр App Engine, вместо этого запустите эту команду.

$ gcloud app deploy

По умолчанию сервер будет прослушивать порт 8080. Чтобы просмотреть пользовательский интерфейс Open API Swagger, перейдите по URL-адресу ниже.

https://{APPLICATION_HOST}/swagger-ui.html

7. Проверьте подключение исходящего API Google Standard Payments.

Теперь, когда приложение запущено, пришло время проверить соединение с API Google echo.

Пользовательский интерфейс Swagger или интерфейс командной строки можно использовать для запуска следующей команды, чтобы инициировать вызов из вашего экземпляра примера приложения на серверы Google. Пример 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, перейдите по адресу https://{APPLICATION_HOST}/swagger-ui и установите клиентское сообщение в теле запроса. Нажмите кнопку «Выполнить», когда будете готовы отправить запрос в Google.

Отправка запроса GSP Echo через Swagger

Получить ответ

Успешный запрос 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)

Расшифруйте и base64url декодируйте ответ и верните ответ.

Успешный ответ Google закодирован и зашифрован в формате Base64url, поэтому его также необходимо декодировать и расшифровать, прежде чем его можно будет вернуть в виде открытого текста. Метод decrypt base64url декодирует и расшифровывает ответ.

String decryptedData =
     pgpEncryptor.decrypt(postStandardPaymentsEchoApi(encryptedMessage).getBody());

Вернуть ответ

Ответ возвращается с кодом состояния ответа HTTP 202.

return new ResponseEntity<>(decryptedData, HttpStatus.ACCEPTED);

8. Проверьте подключение к входному API.

Чтобы проверить подключение входящего эхо-API, Google отправит запрос в партнерский эхо-API. Когда вы будете готовы, обратитесь к своему контактному лицу в 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 платежей!