Verbindung mit Payments APIs in Node.js herstellen

1. Hinweis

In diesem Codelab erfahren Sie, wie Sie eine Verbindung zu Standard 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 entweder mit Google App Engine oder mit Ihrer eigenen Lösung in der mit Google konfigurierten Domain hosten.
  • Node.js ist in Ihrer Umgebung installiert.

Lerninhalte

  • So prüfen Sie die Verbindung, indem Sie eine gültige Anfrage an die Google Standard Payments Echo API senden.
  • So empfangen, entschlüsseln und parsen Sie eine Anfrage von Google an die Partner Hosted Echo API.

2. Einrichtung und Anforderungen

App herunterladen

Laden Sie den Node.js-Beispielcode herunter.

Abhängigkeiten installieren

Wechseln Sie zum Projektverzeichnis 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. Payment Integrator Account ID (PIAID) konfigurieren

Die Zahlungsintegrator-Konto-ID (PIAID) ist eine Kennung, mit der Ihre Integrationen eindeutig identifiziert werden. Sie sollten Ihre PIAID von Google erhalten haben, nachdem Sie die Voraussetzungen erfüllt haben, bevor Sie mit dieser Anleitung beginnen.

  1. Rufen Sie die Datei server.js im Projektverzeichnis auf.
  2. Legen Sie die Variable PIAID auf die PIAID fest, die Sie von Google erhalten haben.
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 den ASCII-armored-öffentlichen Schlüssel in die Datei ein.
  • Erstellen Sie eine Datei mit dem Namen private.key und fügen Sie den ASCII-armored-privaten Schlüssel in die Datei ein.
  • Erstellen Sie eine Datei mit dem Namen passphrase.txt und fügen Sie die geheime Passphrase in die Datei ein.

PGP-Schlüssel hinzufügen

Sehr gut, Sie können die Anwendung jetzt ausführen.

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. Konnektivität der Google Standard Payments API testen

Nachdem die Anwendung ausgeführt wird, ist es an der Zeit, die Verbindung mit der Google Standard Payments Echo API zu testen.

Führen Sie den folgenden Befehl aus, um einen Aufruf von Ihrer Instanz der Beispielanwendung an die Server von Google zu senden. Die Echo-API der Beispielanwendung akzeptiert eine POST-Anfrage im Klartext. Nachdem die Anfrage eingegangen ist, wird eine nachfolgende Anfrage an die von Google gehostete API gesendet.

  $ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Little Bear' https://{HOSTNAME}/echo

Bei einer erfolgreichen API-Anfrage erhalten Sie die folgende Antwort von Google.

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

Detaillierte Anleitung

Nachdem eine Anfrage erfolgreich von Ihrem Server gesendet wurde, sehen wir uns an, 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 clientMessage sowie mehrere Felder mit Standardwerten.

{
   "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 sind verschlüsselt und base64url-codiert. In diesem Beispiel enthält crypto.js Hilfsmethoden, die die Ver- und Entschlüsselung für Sie ausführen. Die Methode crypto.encrypt führt die Verschlüsselung mit dem öffentlichen Schlüssel von Google durch.

const encrypted = await crypto.encrypt(message);

Senden Sie die Base64URL-codierte POST-Anfrage.

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 base64url-codiert und verschlüsselt. Sie muss also auch decodiert und entschlüsselt werden, bevor sie im 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-Verbindung testen

Um die Konnektivität der Partner-Echo-API zu testen, sendet Google eine Anfrage an die vom Partner gehostete Echo-API.

Wenn Sie bereit sind, wenden Sie sich bitte an Ihren Ansprechpartner bei Google, um diese Anfrage von Google aus zu starten.

Der Echotest ist abgeschlossen, wenn Sie die eingehende Echoanfrage von Google lesen und mit einer gültigen Echoantwort antworten können.

Detaillierte Anleitung

Nachdem eine Anfrage erfolgreich von Ihrem Server empfangen und verarbeitet wurde, sehen wir uns an, wie das funktioniert hat.

Anfrage mit Base64url decodieren

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 base64url-decodiert haben, müssen Sie sie entschlüsseln.

const decryptedRequest = await crypto.decrypt(encryptedRequest);

Anfrage erhalten

Google hat eine Nachrichtennutzlast gesendet, die nach dem Decodieren und Entschlüsseln etwa so aussieht.

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

Antwort erstellen

Nachdem Sie die eingehende Echoanfrage 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 sowie einen Zeitstempel und eine Nachricht vom Server.

{
  "responseHeader": {
    "responseTimestamp": {
      "epochMillis":1481899950236
    }
  },
  "clientMessage": "echo Me",
  "serverMessage": "Debug ID 12345"
}

Antwort verschlüsseln und mit Base64 codieren

Nachdem Sie die Antwortnachricht erstellt haben, können Sie sie verschlüsseln und mit Base64Url codieren.

encryptedResponse = await crypto.encrypt(responseBody);
const encodedResponse = base64url(encryptedResponse);

Antwort zurückgeben

Schließlich können Sie die POST-Antwort senden.

res.send(encodedResponse);

8. Glückwunsch!

In diesem Codelab haben Sie erfolgreich eine Verbindung zur Echo API hergestellt.