Cómo establecer la conectividad con las APIs de Payments en Node.js

1. Antes de comenzar

Este es un codelab autoguiado en el que se explicará cómo establecer la conectividad con las APIs de Stanadard Payments.

Requisitos previos

  • Completó los pasos 1 y 2 del Proceso de implementación.
  • Puedes alojar el servidor Node.js proporcionado con finalización de TLS mediante Google App Engine o tu propia solución en el dominio configurado con Google.
  • Debe tener instalado Node.js en su entorno.

Qué aprenderá

  • Cómo verificar la conectividad mediante una solicitud válida a la API de Echo 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 necesarias. Si usas App Engine, puedes omitir este paso.

npm 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 al archivo server.js en el directorio del proyecto.
  2. Configura la variable PIAID con el PIAID que te emitió Google.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';

4. Agregar claves de PGP

Crea los siguientes archivos en la estructura del proyecto y agrega tus claves de PGP para habilitar la encriptación de PGP.

  • Crea un archivo llamado public.key y agrégale la clave pública protegida por ASCII.
  • Crea un archivo llamado private.key y agrégale la clave privada protegida por ASCII.
  • Crea un archivo llamado passphrase.txt y agrégale la frase de contraseña secreta.

Agrega claves de PGP

¡Genial! Ya está todo listo para que ejecutes 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 en su lugar.

$ 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 echo de Google Standard Payments.

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 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.

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

Una solicitud a la API exitosa dará como resultado 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 compila la solicitud echo enviada a la API de Google.

const message = bodyHelpers.buildEchoRequestBody(req.body);

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 Little Bear"
}

Encripta la solicitud

Todas las solicitudes están encriptadas y codificadas en base64url. En esta muestra, crypto.js contiene métodos auxiliares que realizan la encriptación y la 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 mediante una solicitud POST con axios.

const response = await axios.post(ECHO_URL, base64url(encrypted), AXIOS_CONFIG);

Cómo desencriptar y mostrar la respuesta

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.

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 del socio

Para probar la conectividad de la API de Echo del socio, 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 la solicitud

Cuando recibas la solicitud, primero deberás decodificarla en base64url.

const encryptedRequest = base64url.toBuffer(req.body);

Desencripta la solicitud

Una vez que base64url decodifique la solicitud, deberás desencriptarla.

const decryptedRequest = await crypto.decrypt(encryptedRequest);

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.

clientMessage = JSON.parse(decryptedRequest).clientMessage;
responseBody = bodyHelpers.buildEchoResponseBody(clientMessage);

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"
}

Encripta y codifica en Base64 la respuesta

Una vez que hayas formado el mensaje de respuesta, estarás listo para encriptarlo y codificarlo en base64url.

encryptedResponse = await crypto.encrypt(responseBody);
const encodedResponse = base64url(encryptedResponse);

Devuelve la respuesta

Y, por último, ya estás listo para enviar la respuesta POST.

res.send(encodedResponse);

8. ¡Felicitaciones!

En este codelab, estableciste con éxito la conectividad con la API de Echo.