1. Antes de comenzar
Este es un codelab autoguiado que te mostrará cómo establecer la conectividad con las APIs de Standard Payments.
Requisitos previos
- Completaste los pasos 1 y 2 del proceso de implementación.
- Puedes alojar el servidor de Node.js proporcionado con finalización de TLS usando Google App Engine o tu propia solución en el dominio configurado con Google.
- Node.js está instalado en tu entorno.
Lo que aprenderá
- Cómo verificar la conectividad realizando una solicitud válida a la API de eco de Google Standard Payments
- Cómo recibir, desencriptar y analizar una solicitud de Google a la API de Partner Hosted Echo
2. Configuración y requisitos
Descarga la aplicación
Descarga el código de muestra de Node.js.
Instala las dependencias
Navega al directorio del proyecto y ejecuta el siguiente comando para instalar las dependencias requeridas. Si usas App Engine, puedes omitir este paso.
npm install
3. Configura el ID de cuenta del integrador de pagos (PIAID)
El ID de la cuenta del integrador de pagos (PIAID) es un identificador que se usa para identificar de forma única tus integraciones. Para comenzar este instructivo, debes haber completado los requisitos previos y haber recibido tu PIAID de Google.
- Navega al archivo
server.jsen el directorio del proyecto. - Establece la variable
PIAIDen el PIAID que Google te proporcionó.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';
4. Cómo agregar claves de PGP
Crea los siguientes archivos en la estructura del proyecto y agrega tus claves de PGP para habilitar la encriptación con PGP.
- Crea un archivo llamado
public.keyy agrégale la clave pública con protección ASCII. - Crea un archivo llamado
private.keyy agrégale la clave privada con codificación ASCII. - Crea un archivo llamado
passphrase.txty agrégale la frase de contraseña secreta.

Excelente. Ya puedes ejecutar la aplicación.
5. Cómo ejecutar la aplicación
Para iniciar la aplicación, ejecuta el siguiente comando.
$ node server.js Server listening on port 8080...
Si ejecutas una instancia de App Engine preconfigurada, ejecuta este comando.
$ gcloud app deploy
De forma predeterminada, el servidor escuchará en el puerto 8080.
6. Prueba la conectividad de la API de Google Standard Payments
Ahora que la aplicación se está ejecutando, es momento de probar la conectividad con la API de eco de pagos estándar de Google.
Ejecuta el siguiente comando para iniciar una llamada desde tu instancia de la aplicación de ejemplo a los servidores de Google. La API de eco de la aplicación de ejemplo acepta una solicitud POST en texto sin formato. Después de recibir la solicitud, se envía una solicitud posterior a la API alojada en Google.
$ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Little Bear' https://{HOSTNAME}/echo
Una solicitud a la API correcta generará la siguiente respuesta de Google.
{
"responseHeader":{
"responseTimestamp":"1606710026723"
},
"clientMessage":"Hello from Little Bear",
"serverMessage":"Server message."
}
Paso a paso
Ahora que tu servidor envió correctamente una solicitud, revisemos cómo funcionó.
Crea la solicitud
buildEchoRequestBody en bodyHelpers.js crea la solicitud echo que se envía a la API de Google.
const message = bodyHelpers.buildEchoRequestBody(req.body);
La solicitud generada incluye el 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 Little Bear"
}
Encripta la solicitud
Todas las solicitudes están encriptadas y codificadas en base64url. En este ejemplo, crypto.js contiene métodos auxiliares que realizan la encriptación y desencriptación por ti. El método crypto.encrypt realiza la encriptación con la clave pública de Google.
const encrypted = await crypto.encrypt(message);
Envía la solicitud POST codificada en base64url
El mensaje encriptado se codifica en base64url con el paquete base64url y se envía a través de una solicitud POST con Axios.
const response = await axios.post(ECHO_URL, base64url(encrypted), AXIOS_CONFIG);
Desencripta y devuelve la respuesta
La respuesta exitosa de Google está codificada y encriptada en base64url, por lo que también debe decodificarse y desencriptarse antes de que se pueda devolver en texto sin formato.
const encryptedMessage = base64url.toBuffer(response.data);
const decryptedResponse = await crypto.decrypt(encryptedMessage);
res.status(200);
res.send(decryptedResponse);
7. Prueba la conectividad de la API de socio
Para probar la conectividad de la API de eco del socio, Google enviará una solicitud a la API de eco alojada por el socio.
Cuando esté todo listo, comunícate con tu punto de contacto de Google para que se envíe la solicitud desde 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 procesó correctamente una solicitud, revisemos cómo funcionó.
Decodifica la solicitud en Base64url
Cuando recibas la solicitud, primero deberás decodificarla en base64url.
const encryptedRequest = base64url.toBuffer(req.body);
Descifrar la solicitud
Una vez que hayas decodificado la solicitud en base64url, deberás desencriptarla.
const decryptedRequest = await crypto.decrypt(encryptedRequest);
Recibe la solicitud
Google envió una carga útil de mensaje similar a la siguiente una vez que se decodificó y desencriptó.
{
"requestHeader": {
"protocolVersion": {
"major": 1
},
"requestId": "G1MQ0YERJ0Q7LPM",
"requestTimestamp": {
"epochMillis":1481899949606
},
"paymentIntegratorAccountId": "abcdef123456"
},
"clientMessage": "echo Me"
}
Cómo crear la respuesta
Una vez que hayas leído correctamente la solicitud de eco entrante, podrás compilar la respuesta.
clientMessage = JSON.parse(decryptedRequest).clientMessage;
responseBody = bodyHelpers.buildEchoResponseBody(clientMessage);
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"
}
Encripta y codifica en Base64 la respuesta
Una vez que hayas formado el mensaje de respuesta, podrás encriptarlo y codificarlo en base64url.
encryptedResponse = await crypto.encrypt(responseBody);
const encodedResponse = base64url(encryptedResponse);
Devuelve la respuesta
Por último, ya puedes enviar la respuesta POST.
res.send(encodedResponse);
8. ¡Felicitaciones!
En este codelab, estableciste correctamente la conectividad con la API de Echo.