Verbindung mit Payments APIs in Node.js herstellen

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.

  1. Gehen Sie im Projektverzeichnis zur Datei server.js.
  2. 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.

PGP-Schlüssel hinzufügen

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.