Cómo establecer la conectividad con las APIs de Google en Java

1. Antes de comenzar

Requisitos previos

  • Completó los pasos 1 y 2 del Proceso de implementación.
  • Puedes alojar el servidor Java proporcionado con finalización de TLS, ya sea mediante Google App Engine o tu propia solución en el dominio configurado con Google.
  • Está instalado Java en tu entorno.

Qué aprenderá

  • Cómo verificar la conectividad mediante una solicitud válida a la API de Google Echo
  • Cómo recibir, desencriptar y analizar una solicitud de Google a la API de Echo alojada por el socio.

2. Configuración y requisitos

Descarga la aplicación

Descarga el código de muestra de Java.

Descripción general de la estructura de la aplicación

El código de muestra de Java se integra con las APIs de pagos estándar de Google. La estructura del proyecto del código de muestra contiene un directorio outbound y un directorio inbound para reflejar la solicitud de eco entrante de Google al socio y la solicitud saliente de la implementación de socios a Google.

Ambos directorios contienen una jerarquía similar en el empaquetado por capa. Las tres capas principales son controller, service y domain.

  • El paquete controller contiene las APIs.
  • El paquete service es responsable de la lógica empresarial, la codificación en base64url y la encriptación.
  • El paquete domain contiene POJO.

Instala las dependencias

Navega al directorio del proyecto y ejecuta el siguiente comando para instalar las dependencias necesarias con Maven Wrapper. Si usas App Engine, puedes omitir este paso.

./mvnw install

3. Configura el ID de cuenta de Payment Integrator (PIAID)

El ID de cuenta de integrador de pagos (PIAID) es un identificador que se usa para identificar de forma única tus integraciones. Deberías haber recibido tu PIAID de Google. Para ello, completa los requisitos previos antes de comenzar este instructivo.

  1. Navega a src/main/resources/application.properties en el directorio del proyecto.
  2. Configura la propiedad payment.integrator.account.id con el PIAID que te emitió Google.
payment.integrator.account.id={YOUR_PAYMENT_INTEGRATOR_ACCOUNT_ID}

4. Configurar la URL de echo alojada en Google

La URL de echo alojada en Google difiere según la API con la que realices la integración. Visita la documentación de referencia de la API para tu tipo de integración específico y copia la URL para la API de echo de diagnóstico. Después de copiar la URL, continúa con los siguientes pasos para actualizarla en el proyecto de Java.

  1. Navega a src/main/resources/application.properties en el directorio del proyecto.
  2. Configura la propiedad API_SERVICE_NAME para que coincida con lo que se encuentra en la documentación para desarrolladores.
google.hosted.echo.url=vgw.googleapis.com/gsp/{API_SERVICE_NAME}/echo/

5. Agregar claves de PGP

Como se muestra a continuación, agrega tus claves de PGP para habilitar la encriptación de PGP.

  • Navega a src/resources/publicKey1.gpg y agrega la clave pública protegida por ASCII al archivo.
  • Navega a src/resources/privateKey1.gpg y agrega la clave privada protegida por ASCII al archivo.
  • Navega a src/resources/passphrase1.txt y agrega la frase de contraseña secreta al archivo.

Agrega claves de PGP

Para habilitar la encriptación de dos claves, agrega la segunda clave pública a publicKey2.gpg, agrega la segunda clave privada a privateKey2.gpg y la segunda frase de contraseña a passphrase.txt. Después de agregar las segundas claves, quita el comentario de las líneas de código comentadas que son responsables de cargar el segundo par de claves en KeyConfig.addPrivateKeyAndPassphrase(...) y KeyConfig.addPublicKeys(...).

¡Genial! Ya está todo listo para que ejecutes la aplicación.

6. Cómo ejecutar la aplicación

Para iniciar la aplicación, ejecuta el siguiente comando.

  $ ./mvnw spring-boot:run

Si ejecutas una instancia de App Engine preconfigurada, ejecuta este comando en su lugar.

$ gcloud app deploy

De forma predeterminada, el servidor escuchará en el puerto 8080. Para ver la IU de Open API Swagger, navega a la URL a continuación.

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

7. Prueba la conectividad de la API de salida de Google Standard Payments

Ahora que la aplicación se está ejecutando, es momento de probar la conectividad con la API de Google Echo.

Se puede usar la IU de Swagger o la CLI para ejecutar el siguiente comando y, así, iniciar una llamada desde tu instancia de la aplicación de ejemplo a los servidores de Google. La API de echo de la aplicación de muestra acepta una solicitud POST en texto simple. Después de recibir la solicitud, se envía una solicitud posterior a la API alojada en Google.

Cómo enviar una solicitud a través de la línea de comandos

Reemplaza HOSTNAME por el nombre del host de tu servidor antes de ejecutar el comando.

  $ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Partner Bank!' https://{HOSTNAME}/echo

Envía una solicitud en la IU de Swagger

Para enviar una solicitud con la IU de Swagger, ve a https://{APPLICATION_HOST}/swagger-ui y configura el mensaje del cliente en el cuerpo de la solicitud. Haz clic en el botón “Ejecutar” cuando estés listo para enviar la solicitud a Google.

Cómo enviar una solicitud de eco de GSP a través de Swagger

Recibe la respuesta

Una solicitud a la API exitosa dará como resultado la siguiente respuesta de Google.

{
   "responseHeader":{
      "responseTimestamp":"1606710026723"
   },
   "clientMessage":"Hello from  Bank Little Bear!",
   "serverMessage":"Server message."
}

Paso a paso

Ahora que tu servidor envió correctamente una solicitud, revisemos cómo funcionó.

Crea la solicitud

createEchoRequestWithMessage en OutboundEchoService compila la solicitud echo enviada a la API de Google.

String jsonEchoRequestMessage = objectMapper.writeValueAsString(createEchoRequestWithMessage(message));

La solicitud generada incluye clientMessage, así como varios campos de valores predeterminados.

{
   "requestHeader":{
      "protocolVersion":{
         "major":1,
         "minor":0,
         "revision":0
      },
      "requestId":"ddfe0fd0-ffdc-4fcf-991a-f0611ec83970",
      "requestTimestamp":"1606715389040"
   },
   "clientMessage":"Hello from Bank Little Bear!"
}

Codifica y encripta la solicitud en Base64url

Todas las solicitudes están encriptadas y codificadas en base64url. En esta muestra, PgpEncryptor.java contiene métodos auxiliares que realizan la encriptación, la desencriptación y la codificación en base64url por ti. El siguiente método codifica la solicitud y realiza la encriptación con la clave pública de Google.

String encryptedMessage = pgpEncryptor.encrypt(jsonEchoRequestMessage);

Envía la solicitud POST

El mensaje encriptado se envía a través de una solicitud POST.

postStandardPaymentsEchoApi(encryptedMessage)

Desencriptar y base64url decodificar la respuesta y mostrarla

La respuesta correcta de Google está codificada y encriptada en base64url, por lo que debe decodificarse y desencriptarse antes de que se pueda mostrar en texto simple. El método base64url del método decrypt decodifica y desencripta la respuesta.

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

Devuelve la respuesta

La respuesta se muestra con un código de estado de respuesta HTTP 202.

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

8. Prueba la conectividad de API entrante

Para probar la conectividad de la API de Echo entrante, Google enviará una solicitud a la API de Echo alojada por el socio. Cuando tengas todo listo, comunícate con tu punto de contacto de Google para activar esta solicitud.

La prueba echo se completa cuando puedes leer la solicitud echo entrante de Google y responder con una respuesta echo válida.

Paso a paso

Ahora que tu servidor recibió y abordó correctamente una solicitud, revisemos cómo funcionó.

Base64url decodifica y desencripta la solicitud

Cuando se reciba una solicitud, PgpEncryptor.java llamará a decrypt, que decodificará y desencriptará la solicitud en base64url.

String decryptedRequest = pgpEncryptor.decrypt(echoRequest);

Cómo recibir la solicitud

Una vez que se decodificó y desencriptó, Google envió una carga útil de mensaje similar a la siguiente.

{
  "requestHeader": {
    "protocolVersion": {
      "major": 1
    },
    "requestId": "G1MQ0YERJ0Q7LPM",
    "requestTimestamp": {
      "epochMillis":1481899949606
    },
    "paymentIntegratorAccountId": "abcdef123456"
  },
  "clientMessage": "echo Me"
}

Crea la respuesta

Una vez que hayas leído correctamente la solicitud de eco entrante, estarás listo para crear la respuesta.

private EchoResponse convertEchoRequestStringToEchoResponse(String decryptedRequest);

La respuesta incluye el mensaje de Google, así como una marca de tiempo y el mensaje del servidor.

{
  "responseHeader": {
    "responseTimestamp": {
      "epochMillis":1481899950236
    }
  },
  "clientMessage": "echo Me",
  "serverMessage": "Debug ID 12345"
}

Codifica y encripta la respuesta en Base64url

Dado que todas las solicitudes están encriptadas y codificadas en base64url, PgpEncryptor.java llama a encrypt para codificar y encriptar la solicitud en base64url.

pgpEncryptor.encrypt(echoResponseString)

Devuelve la respuesta

La respuesta se muestra con un código de estado de respuesta HTTP 202.

return new ResponseEntity<>(pgpEncryptor.encrypt(echoResponseString), HttpStatus.ACCEPTED);

9. ¡Felicitaciones!

En este codelab, estableciste correctamente la conectividad con la API de Payments.