Come stabilire la connettività con le API Payments in Node.js

1. Prima di iniziare

Questo è un codelab autoguidato che illustra come stabilire la connettività con le API Stanadard Payments.

Prerequisiti

  • Hai completato i passaggi 1 e 2 della procedura di implementazione.
  • Puoi ospitare il server Node.js fornito con terminazione TLS utilizzando Google App Engine o la tua soluzione nel dominio configurato con Google.
  • Node.js sia installato nel tuo ambiente.

Obiettivi didattici

  • Come verificare la connettività inviando una richiesta valida all'API echo Payments Standard di Google.
  • Come ricevere, decriptare e analizzare una richiesta di Google all'API Partner Hosted Echo.

2. Configurazione e requisiti

Scarica l'applicazione

Scarica il codice di esempio Node.js.

Installa le dipendenze

Vai alla directory del progetto ed esegui il seguente comando per installare le dipendenze richieste. Se utilizzi App Engine, puoi saltare questo passaggio.

npm install

3. Configurare l'ID account dell'integratore pagamenti (PIAID)

L'ID account integratore pagamenti (PIAID) è un identificatore utilizzato per identificare in modo univoco le integrazioni. Prima di iniziare questo tutorial, dovresti aver ricevuto il tuo PIAID da Google completando i prerequisiti.

  1. Vai al file server.js nella directory del progetto.
  2. Imposta la variabile PIAID sul PIAID che ti è stato emesso da Google.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';

4. Aggiungi chiavi PGP

Crea i seguenti file nella struttura del progetto e aggiungi le tue chiavi PGP per abilitare la crittografia PGP.

  • Crea un file denominato public.key e aggiungi la chiave pubblica con crittografia ASCII al file.
  • Crea un file denominato private.key e aggiungi al file la chiave privata con protezione ASCII.
  • Crea un file denominato passphrase.txt e aggiungi la passphrase del secret al file.

Aggiunta di chiavi PGP

Ottimo, è tutto pronto per l'esecuzione dell'applicazione.

5. Esegui l'applicazione

Per avviare l'applicazione, esegui questo comando.

$ node server.js
Server listening on port 8080...

Se stai eseguendo un'istanza App Engine preconfigurata, esegui invece questo comando.

$ gcloud app deploy

Per impostazione predefinita, il server rimarrà in ascolto sulla porta 8080.

6. Verificare la connettività dell'API Google Payments standard

Ora che l'applicazione è in esecuzione, è il momento di testare la connettività con l'API echo Google Payments Standard.

Esegui il seguente comando per avviare una chiamata dalla tua istanza dell'applicazione di esempio ai server di Google. L'API echo dell'applicazione di esempio accetta una richiesta POST in testo normale. Dopo aver ricevuto la richiesta, ne viene inviata una successiva all'API ospitata da Google.

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

Una richiesta API andata a buon fine genererà la seguente risposta da parte di Google.

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

Istruzioni dettagliate

Ora che una richiesta è stata inviata correttamente dal server, vediamo come funziona.

Crea la richiesta

buildEchoRequestBody in bodyHelpers.js genera la richiesta echo inviata all'API di Google.

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

La richiesta generata include clientMessage, nonché diversi campi di valore predefinito.

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

Cripta la richiesta

Tutte le richieste sono criptate e sono codificate in base64url. In questo esempio, crypto.js contiene metodi helper che eseguono la crittografia e la decriptazione per tuo conto. Il metodo crypto.encrypt esegue la crittografia utilizzando la chiave pubblica di Google.

const encrypted = await crypto.encrypt(message);

Invia la richiesta POST con codifica base64url

Il messaggio criptato è codificato in base64url utilizzando il pacchetto base64url e inviato tramite una richiesta POST utilizzando axios.

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

Decripta e restituisci la risposta

La risposta di Google andata a buon fine è codificata e criptata in base64url, quindi anche questa deve essere decodificata e decriptata prima di poter essere restituita in testo non crittografato.

const encryptedMessage = base64url.toBuffer(response.data);
const decryptedResponse = await crypto.decrypt(encryptedMessage);
res.status(200);
res.send(decryptedResponse);

7. Testa la connettività dell'API Partner

Per testare la connettività dell'API echo del partner, Google invierà una richiesta all'API Partner Hosted echo.

Quando è tutto pronto, collabora con il tuo punto di contatto Google per attivare questa richiesta da Google.

Il test di eco è completato quando riesci a leggere la richiesta di eco in entrata da Google e a rispondere con una risposta di eco valida.

Istruzioni dettagliate

Ora che una richiesta è stata ricevuta e gestita correttamente dal server, vediamo come funziona.

Base64url decodifica la richiesta

Quando ricevi la richiesta, devi prima decodificarla in base64url.

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

Decripta la richiesta

Dopo che base64url ha decodificato la richiesta, devi decriptarla.

const decryptedRequest = await crypto.decrypt(encryptedRequest);

Ricevi la richiesta

Una volta decodificato e decriptato, Google ha inviato un payload di messaggio simile al seguente.

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

Crea la risposta

Dopo aver letto correttamente la richiesta echo in entrata, puoi creare la risposta.

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

La risposta include il messaggio di Google, nonché un timestamp e un messaggio del server.

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

Cripta e codifica la risposta in base64

Dopo aver formato il messaggio di risposta, puoi criptarlo e codificarlo in base64url.

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

Restituisci la risposta

Infine, puoi inviare la risposta POST.

res.send(encodedResponse);

8. Complimenti!

In questo codelab, hai stabilito correttamente la connettività con l'API Echo.