1. Antes de comenzar
Requisitos previos
- Completaste los pasos 1 y 2 del proceso de implementación.
- Puedes alojar el servidor Java proporcionado con la finalización de TLS mediante Google App Engine o tu propia solución en el dominio configurado con Google.
- Java esté instalado en tu entorno.
Lo que aprenderá
- Cómo verificar la conectividad realizando 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 socios
2. Configuración y requisitos
Descarga la solicitud
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 del socio 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 requeridas con el Wrapper de Maven. Si usas App Engine, puedes omitir este paso.
./mvnw install
3. Configura el ID de cuenta de integrador de pagos (PIAID)
El ID de cuenta de integrador de pagos (PIAID
) es un identificador que se usa para identificar de manera inequívoca tus integraciones. Antes de comenzar este instructivo, deberías haber completado los requisitos previos para recibir tu PIAID de Google.
- Navega a
src/main/resources/application.properties
en el directorio del proyecto. - Configura la propiedad
payment.integrator.account.id
con el PIAID que te emitió Google.
payment.integrator.account.id={YOUR_PAYMENT_INTEGRATOR_ACCOUNT_ID}
4. Configura la URL de eco alojado 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 de tu tipo de integración específico y copia la URL de la API de diagnóstico de Echo. Después de copiar la URL, continúa con los siguientes pasos para actualizarla en el proyecto de Java.
- Navega a
src/main/resources/application.properties
en el directorio del proyecto. - 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 ASCII al archivo. - Navega a
src/resources/privateKey1.gpg
y agrega la clave privada blindada ASCII al archivo. - Navega a
src/resources/passphrase1.txt
y agrega la frase de contraseña secreta al archivo.
Para habilitar la encriptación de clave doble, agrega tu segunda clave pública a publicKey2.gpg
, agrega tu segunda clave privada a privateKey2.gpg
y agrega tu segunda frase de contraseña a passphrase.txt
. Después de agregar las segundas claves, quita los comentarios 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 ejecutar 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.
$ gcloud app deploy
De forma predeterminada, el servidor escuchará en el puerto 8080. Para ver la IU de Swagger de Open API, navega a la siguiente URL.
https://{APPLICATION_HOST}/swagger-ui.html
7. Prueba la conectividad de la API de pagos salientes de Google Standard
Ahora que la aplicación se está ejecutando, es hora de probar la conectividad con la API de Google Echo.
Puedes usar Swagger UI 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 del 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 tengas todo listo para enviar la solicitud a Google.
Cómo recibir la respuesta
Si la solicitud a la API se realiza correctamente, Google mostrará la siguiente respuesta.
{
"responseHeader":{
"responseTimestamp":"1606710026723"
},
"clientMessage":"Hello from Bank Little Bear!",
"serverMessage":"Server message."
}
Paso a paso
Ahora que tu servidor envió correctamente una solicitud, veamos cómo funcionó.
Compila la solicitud
createEchoRequestWithMessage
en OutboundEchoService
compila la solicitud echo
que se envía a la API de Google.
String jsonEchoRequestMessage = objectMapper.writeValueAsString(createEchoRequestWithMessage(message));
La solicitud generada incluye el clientMessage
, así como varios campos de valor 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 este ejemplo, PgpEncryptor.java
contiene métodos auxiliares que realizan la encriptación y desencriptación, así como la codificación 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)
Desencripta y decodifica la respuesta en base64url y muestra la respuesta
La respuesta correcta de Google está codificada y encriptada en base64url, por lo que también se debe decodificar y desencriptar antes de que se pueda mostrar en texto simple. El método base64url de decrypt
decodifica y desencripta la respuesta.
String decryptedData =
pgpEncryptor.decrypt(postStandardPaymentsEchoApi(encryptedMessage).getBody());
Muestra 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 entrante de la API
Para probar la conectividad de la API de Echo entrante, Google enviará una solicitud a la API de Echo alojada por socios. Cuando tengas todo listo, comunícate con tu punto de contacto de Google para activar esta solicitud de Google.
La prueba de eco se completa cuando puedes leer la solicitud de eco entrante de Google y responder con una respuesta de eco válida.
Paso a paso
Ahora que tu servidor recibió y controló correctamente una solicitud, revisemos cómo funcionó.
Decodifica y desencripta la solicitud en Base64url
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
Google envió una carga útil de mensaje similar a la siguiente una vez que se decodificó y desencripta.
{ "requestHeader": { "protocolVersion": { "major": 1 }, "requestId": "G1MQ0YERJ0Q7LPM", "requestTimestamp": { "epochMillis":1481899949606 }, "paymentIntegratorAccountId": "abcdef123456" }, "clientMessage": "echo Me" }
Compila la respuesta
Una vez que hayas leído con éxito la solicitud de eco entrante, tendrás todo listo para crear la respuesta.
private EchoResponse convertEchoRequestStringToEchoResponse(String decryptedRequest);
La respuesta incluye el mensaje de Google, así como una marca de tiempo y un 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.