Как установить соединение с 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 отвечает за бизнес-логику, кодирование URL-адресов в формате base64 и шифрование.
  • Пакет 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. Чтобы просмотреть пользовательский интерфейс 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.

Отправка запроса 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)

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 платежей!