1. Hinweis
In diesem Codelab erfahren Sie, wie Sie eine Verbindung zu den Stanadard Payments APIs herstellen.
Vorbereitung
- Sie haben die Schritte 1 und 2 des Implementierungsprozesses abgeschlossen.
- Sie können den bereitgestellten Node.js-Server mit TLS-Beendigung mithilfe von Google App Engine oder Ihrer eigenen Lösung in der mit Google konfigurierten Domain hosten.
- Node.js ist in Ihrer Umgebung installiert.
Lerninhalte
- Hier erfahren Sie, wie Sie die Verbindung durch eine gültige Anfrage an die Google Standard Payments Echo API überprüfen.
- Hier erfahren Sie, wie Sie eine Anfrage von Google an die Partner Hosted Echo API empfangen, entschlüsseln und parsen.
2. Einrichtung und Anforderungen
Anwendung herunterladen
Laden Sie den Node.js-Beispielcode herunter.
Abhängigkeiten installieren
Rufen Sie das Projektverzeichnis auf und führen Sie den folgenden Befehl aus, um die erforderlichen Abhängigkeiten zu installieren. Wenn Sie App Engine verwenden, können Sie diesen Schritt überspringen.
npm install
3. PIAID (Zahlungsintegrationskonto-ID) konfigurieren
Die Konto-ID des Zahlungsintegrators (PIAID
) ist eine Kennung, mit der deine Integrationen eindeutig identifiziert werden. Sie sollten Ihre PIAID von Google erhalten haben, indem Sie die Voraussetzungen erfüllen, bevor Sie mit dieser Anleitung beginnen.
- Gehen Sie im Projektverzeichnis zur Datei
server.js
. - Setzen Sie die Variable
PIAID
auf die PIAID, die Ihnen von Google ausgestellt wurde.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';
4. PGP-Schlüssel hinzufügen
Erstellen Sie die folgenden Dateien in der Projektstruktur und fügen Sie Ihre PGP-Schlüssel hinzu, um die PGP-Verschlüsselung zu aktivieren.
- Erstellen Sie eine Datei mit dem Namen
public.key
und fügen Sie der Datei den öffentlichen ASCII-Schlüssel hinzu. - Erstellen Sie eine Datei mit dem Namen
private.key
und fügen Sie der Datei den privaten ASCII-Schlüssel hinzu. - Erstellen Sie eine Datei mit dem Namen
passphrase.txt
und fügen Sie der Datei die geheime Passphrase hinzu.
Die Anwendung kann jetzt ausgeführt werden.
5. Anwendung ausführen
Führen Sie den folgenden Befehl aus, um die Anwendung zu starten.
$ node server.js Server listening on port 8080...
Wenn Sie eine vorkonfigurierte App Engine-Instanz ausführen, führen Sie stattdessen diesen Befehl aus.
$ gcloud app deploy
Standardmäßig überwacht der Server Port 8080.
6. Verbindung zur Google Standard Payments API testen
Nachdem die Anwendung nun ausgeführt wird, testen Sie die Verbindung mit der Google Standard Payments Echo API.
Führen Sie den folgenden Befehl aus, um einen Aufruf von Ihrer Instanz der Beispielanwendung an die Google-Server zu starten. Die Echo API der Beispielanwendung akzeptiert eine POST-Anfrage im Klartext. Nach Erhalt der Anfrage wird eine weitere Anfrage an die von Google gehostete API gesendet.
$ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Little Bear' https://{HOSTNAME}/echo
Eine erfolgreiche API-Anfrage führt von Google zu der folgenden Antwort.
{ "responseHeader":{ "responseTimestamp":"1606710026723" }, "clientMessage":"Hello from Little Bear", "serverMessage":"Server message." }
Route
Nachdem eine Anfrage vom Server gesendet wurde, können Sie sich ansehen, wie das funktioniert hat.
Anfrage erstellen
buildEchoRequestBody
in bodyHelpers.js
erstellt die echo
-Anfrage, die an die API von Google gesendet wird.
const message = bodyHelpers.buildEchoRequestBody(req.body);
Die generierte Anfrage enthält das clientMessage
sowie mehrere Standardwertefelder.
{
"requestHeader":{
"protocolVersion":{
"major":1,
"minor":0,
"revision":0
},
"requestId":"ddfe0fd0-ffdc-4fcf-991a-f0611ec83970",
"requestTimestamp":"1606715389040"
},
"clientMessage":"Hello from Little Bear"
}
Anfrage verschlüsseln
Alle Anfragen werden verschlüsselt und base64url-codiert. In diesem Beispiel enthält crypto.js
Hilfsmethoden, die die Ver- und Entschlüsselung für Sie durchführen. Die Methode crypto.encrypt
verschlüsselt die Verschlüsselung mit dem öffentlichen Schlüssel von Google.
const encrypted = await crypto.encrypt(message);
base64url-codierte POST-Anfrage senden
Die verschlüsselte Nachricht wird mit dem base64url-Paket base64url-codiert und über eine POST-Anfrage mit Axios gesendet.
const response = await axios.post(ECHO_URL, base64url(encrypted), AXIOS_CONFIG);
Antwort entschlüsseln und zurückgeben
Die erfolgreiche Antwort von Google ist mit base64url codiert und verschlüsselt, d. h. sie muss auch entschlüsselt und entschlüsselt werden, bevor sie als Klartext zurückgegeben werden kann.
const encryptedMessage = base64url.toBuffer(response.data);
const decryptedResponse = await crypto.decrypt(encryptedMessage);
res.status(200);
res.send(decryptedResponse);
7. Partner-API-Konnektivität testen
Zum Testen der Konnektivität der Partner Echo API sendet Google eine Anfrage an die vom Partner gehostete Echo API.
Wenn Sie bereit sind, wenden Sie sich an Ihren Ansprechpartner bei Google, um diese Anfrage von Google zu senden.
Der Echo-Test ist abgeschlossen, wenn Sie die eingehende Echo-Anfrage von Google lesen und mit einer gültigen Echo-Antwort antworten können.
Route
Nachdem eine Anfrage erfolgreich von Ihrem Server empfangen und verarbeitet wurde, sehen wir uns an, wie das funktioniert hat.
Base64url-Decodierung der Anfrage
Wenn Sie die Anfrage erhalten, müssen Sie sie zuerst mit base64url decodieren.
const encryptedRequest = base64url.toBuffer(req.body);
Anfrage entschlüsseln
Nachdem Sie die Anfrage mit base64url entschlüsselt haben, müssen Sie sie entschlüsseln.
const decryptedRequest = await crypto.decrypt(encryptedRequest);
Anfrage erhalten
Google hat nach der Entschlüsselung und Entschlüsselung eine Nachrichtennutzlast gesendet, die der folgenden ähnelt.
{ "requestHeader": { "protocolVersion": { "major": 1 }, "requestId": "G1MQ0YERJ0Q7LPM", "requestTimestamp": { "epochMillis":1481899949606 }, "paymentIntegratorAccountId": "abcdef123456" }, "clientMessage": "echo Me" }
Antwort erstellen
Nachdem Sie die eingehende Echo-Anfrage erfolgreich gelesen haben, können Sie die Antwort erstellen.
clientMessage = JSON.parse(decryptedRequest).clientMessage;
responseBody = bodyHelpers.buildEchoResponseBody(clientMessage);
Die Antwort enthält die Nachricht von Google, einen Zeitstempel und eine Nachricht vom Server.
{ "responseHeader": { "responseTimestamp": { "epochMillis":1481899950236 } }, "clientMessage": "echo Me", "serverMessage": "Debug ID 12345" }
Antwort verschlüsseln und base64-codieren
Nachdem Sie die Antwortnachricht gebildet haben, können Sie sie verschlüsseln und mit base64url codieren.
encryptedResponse = await crypto.encrypt(responseBody);
const encodedResponse = base64url(encryptedResponse);
Antwort zurückgeben
Und schließlich können Sie die POST-Antwort senden.
res.send(encodedResponse);
8. Glückwunsch!
In diesem Codelab haben Sie die Verbindung zur Echo API erfolgreich hergestellt.