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.
- Vai al file
server.js
nella directory del progetto. - 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.
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.