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.
- Vai al file
server.jsnella directory del progetto. - Imposta la variabile
PIAIDsull'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.keye aggiungi la chiave pubblica ASCII Armored al file. - Crea un file denominato
private.keye aggiungi la chiave privata ASCII armored al file. - Crea un file denominato
passphrase.txte aggiungi la passphrase segreta al file.

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.