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 Standard 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 è installato nel tuo ambiente.

Obiettivi didattici

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

2. Configurazione e requisiti

Scaricare l'applicazione

Scarica il codice campione Node.js.

Installa le dipendenze

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

npm install

3. Configurare l'ID account integratore di pagamento (PIAID)

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

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

4. Aggiungere chiavi PGP

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

  • Crea un file denominato public.key e aggiungi la chiave pubblica ASCII Armored al file.
  • Crea un file denominato private.key e aggiungi la chiave privata ASCII armored al file.
  • Crea un file denominato passphrase.txt e aggiungi la passphrase segreta al file.

Aggiunta di chiavi PGP

Ottimo, ora puoi eseguire l'applicazione.

5. Esegui l'applicazione

Per avviare l'applicazione, esegui questo comando.

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

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

$ gcloud app deploy

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

6. Testare la connettività dell'API Google Standard Payments

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

Esegui questo comando per avviare una chiamata dall'istanza dell'applicazione di esempio ai server di Google. L'API echo dell'applicazione di esempio accetta una richiesta POST in testo non crittografato. Dopo aver ricevuto la richiesta, viene inviata una richiesta 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 riuscita genererà la seguente risposta da Google.

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

Istruzioni dettagliate

Ora che una richiesta è stata inviata correttamente dal tuo server, esaminiamo come ha funzionato.

Crea la richiesta

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

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

La richiesta generata include clientMessage, nonché diversi campi con valori predefiniti.

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

Criptare la richiesta

Tutte le richieste sono criptate e codificate in base64url. In questo esempio, crypto.js contiene metodi helper che eseguono la crittografia e la decrittografia per te. 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 viene 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 restituisce la risposta

La risposta positiva di Google è codificata e criptata in base64url, quindi deve essere decodificata e decriptata prima di poter essere restituita in testo normale.

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

7. Testare la connettività dell'API partner

Per testare la connettività dell'API Partner Echo, 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 tuo server, esaminiamo come ha funzionato.

Decodifica Base64url della richiesta

Quando ricevi la richiesta, devi prima decodificarla in base64url.

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

Decrittografare la richiesta

Una volta decodificata la richiesta in base64url, devi decriptarla.

const decryptedRequest = await crypto.decrypt(encryptedRequest);

Ricevere la richiesta

Google ha inviato un payload del messaggio simile al seguente una volta decodificato e decriptato.

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

Crea la risposta

Una volta letta correttamente la richiesta di 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 in base64 la risposta

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