Verbindung mit Google APIs in Java herstellen

1. Vorbereitung

Vorbereitung

  • Sie haben die Schritte 1 und 2 des Implementierungsprozesses abgeschlossen.
  • Sie können den bereitgestellten Java-Server mit TLS-Beendigung entweder mit der Google App Engine oder mit Ihrer eigenen Lösung in der bei Google konfigurierten Domain hosten.
  • Java ist in Ihrer Umgebung installiert.

Lerninhalte

  • So prüfen Sie die Verbindung, indem Sie eine gültige Anfrage an die Google Echo API senden.
  • 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 Java-Beispielcode herunter.

Anwendungsstruktur – Übersicht

Der Java-Beispielcode kann in die Standard Payments APIs von Google integriert werden. Die Projektstruktur des Beispielcodes enthält ein outbound- und ein inbound-Verzeichnis, um die eingehende Echoanfrage von Google an den Partner und die ausgehende Anfrage von der Implementierung des Partners an Google widerzuspiegeln.

Beide Verzeichnisse enthalten eine ähnliche Hierarchie bei der Verpackung nach Ebene. Die drei Hauptebenen sind controller, service und domain.

  • Das Paket controller enthält die APIs.
  • Das Paket service ist für die Geschäftslogik, die base64url-Codierung und die Verschlüsselung verantwortlich.
  • Das Paket domain enthält POJOs.

Abhängigkeiten installieren

Rufen Sie das Projektverzeichnis auf und führen Sie den folgenden Befehl aus, um die erforderlichen Abhängigkeiten mithilfe des Maven-Wrappers zu installieren. Wenn Sie App Engine verwenden, können Sie diesen Schritt überspringen.

./mvnw install

3. Konto-ID des Zahlungsintegrators (PIAID) 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 zu src/main/resources/application.properties.
  2. Setze die Eigenschaft payment.integrator.account.id auf die PIAID, die dir von Google ausgestellt wurde.
payment.integrator.account.id={YOUR_PAYMENT_INTEGRATOR_ACCOUNT_ID}

4. Von Google gehostete Echo-URL festlegen

Die von Google gehostete echo-URL unterscheidet sich je nachdem, welche API Sie einbinden. Rufen Sie die API-Referenzdokumentation für Ihren spezifischen Integrationstyp auf und kopieren Sie die URL für die Diagnose Echo API. Nachdem Sie die URL kopiert haben, fahren Sie mit den nächsten Schritten fort, um sie im Java-Projekt zu aktualisieren.

  1. Gehen Sie im Projektverzeichnis zu src/main/resources/application.properties.
  2. Legen Sie die Property API_SERVICE_NAME so fest, dass sie mit den Angaben in der Entwicklerdokumentation übereinstimmt.
google.hosted.echo.url=vgw.googleapis.com/gsp/{API_SERVICE_NAME}/echo/

5. PGP-Schlüssel hinzufügen

Fügen Sie wie unten gezeigt Ihre PGP-Schlüssel hinzu, um die PGP-Verschlüsselung zu aktivieren.

  • Gehen Sie zu src/resources/publicKey1.gpg und fügen Sie der Datei den öffentlichen ASCII-Schlüssel hinzu.
  • Gehen Sie zu src/resources/privateKey1.gpg und fügen Sie der Datei den privaten ASCII-Schlüssel hinzu.
  • Rufen Sie src/resources/passphrase1.txt auf und fügen Sie der Datei die geheime Passphrase hinzu.

PGP-Schlüssel hinzufügen

Um die Dual-Key-Verschlüsselung zu aktivieren, fügen Sie Ihren zweiten öffentlichen Schlüssel zu publicKey2.gpg hinzu, fügen Sie den zweiten privaten Schlüssel zu privateKey2.gpg hinzu und fügen Sie Ihre zweite Passphrase zu passphrase.txt hinzu. Nachdem Sie die zweiten Schlüssel hinzugefügt haben, entfernen Sie die Kommentarzeichen aus den auskommentierten Codezeilen, die für das Laden des zweiten Schlüsselpaars in KeyConfig.addPrivateKeyAndPassphrase(...) und KeyConfig.addPublicKeys(...) verantwortlich sind.

Die Anwendung kann jetzt ausgeführt werden.

6. Anwendung ausführen

Führen Sie den folgenden Befehl aus, um die Anwendung zu starten.

  $ ./mvnw spring-boot:run

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. Die Swagger-UI der Open API rufen Sie über die folgende URL auf.

https://{APPLICATION_HOST}/swagger-ui.html

7. Verbindung zur Google Standard Payments Outbound API testen

Nachdem die Anwendung nun ausgeführt wird, können Sie die Konnektivität mit der Google Echo API testen.

Mit der Swagger-Benutzeroberfläche oder der Befehlszeile können Sie den folgenden Befehl ausführen, 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.

Anfrage über die Befehlszeile senden

Ersetzen Sie HOSTNAME durch den Namen Ihres Serverhosts, bevor Sie den Befehl ausführen.

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

Anfrage in Swagger UI senden

Wenn du eine Anfrage mit der Swagger-Benutzeroberfläche senden möchtest, rufe https://{APPLICATION_HOST}/swagger-ui auf und lege die Clientnachricht im Anfragetext fest. Klicken Sie auf die Schaltfläche „Ausführen“, wenn Sie die Anfrage an Google senden möchten.

GSP-Echo-Anfrage über Swagger senden

Antwort erhalten

Bei einer erfolgreichen API-Anfrage erhältst du die folgende Antwort von Google.

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

Route

Nachdem eine Anfrage vom Server gesendet wurde, können Sie sich ansehen, wie das funktioniert hat.

Anfrage erstellen

createEchoRequestWithMessage in OutboundEchoService erstellt die echo-Anfrage, die an die API von Google gesendet wird.

String jsonEchoRequestMessage = objectMapper.writeValueAsString(createEchoRequestWithMessage(message));

Die generierte Anfrage enthält clientMessage sowie mehrere Felder für Standardwerte.

{
   "requestHeader":{
      "protocolVersion":{
         "major":1,
         "minor":0,
         "revision":0
      },
      "requestId":"ddfe0fd0-ffdc-4fcf-991a-f0611ec83970",
      "requestTimestamp":"1606715389040"
   },
   "clientMessage":"Hello from Bank Little Bear!"
}

Anfrage mit Base64url codieren und verschlüsseln

Alle Anfragen werden verschlüsselt und base64url-codiert. In diesem Beispiel enthält PgpEncryptor.java Hilfsmethoden, die die Verschlüsselung und Entschlüsselung sowie die Base64url-Codierung für Sie ausführen. Bei der folgenden Methode wird die Anfrage codiert und mit dem öffentlichen Schlüssel von Google verschlüsselt.

String encryptedMessage = pgpEncryptor.encrypt(jsonEchoRequestMessage);

POST-Anfrage senden

Die verschlüsselte Nachricht wird über eine POST-Anfrage gesendet.

postStandardPaymentsEchoApi(encryptedMessage)

Entschlüsseln und Base64url-Decodieren der Antwort und Rückgabe der Antwort

Die erfolgreiche Antwort von Google ist base64url-codiert und verschlüsselt. Sie muss also decodiert und entschlüsselt werden, bevor sie im Klartext zurückgegeben werden kann. Die decrypt-Methode „base64url“ decodiert und entschlüsselt die Antwort.

String decryptedData =
     pgpEncryptor.decrypt(postStandardPaymentsEchoApi(encryptedMessage).getBody());

Antwort zurückgeben

Die Antwort wird mit dem HTTP-Statuscode 202 zurückgegeben.

return new ResponseEntity<>(decryptedData, HttpStatus.ACCEPTED);

8. Eingehende API-Verbindung testen

Um die Eingehenden-Echo-API-Konnektivität zu testen, sendet Google eine Anfrage an die von Partnern gehostete Echo-API. Wenn Sie bereit sind, wenden Sie sich an Ihren Ansprechpartner bei Google, um diese Anfrage von Google zu senden.

Der Echotest ist abgeschlossen, wenn Sie die eingehende Echoanfrage von Google lesen und mit einer gültigen Echoantwort 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 und -Entschlüsselung der Anfrage

Wenn eine Anfrage eingeht, ruft PgpEncryptor.java decrypt auf, wodurch die Anfrage base64url-decodiert und entschlüsselt wird.

String decryptedRequest = pgpEncryptor.decrypt(echoRequest);

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.

private EchoResponse convertEchoRequestStringToEchoResponse(String decryptedRequest);

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 mit base64url codieren und verschlüsseln

Da alle Anfragen verschlüsselt und base64url-codiert sind, ruft PgpEncryptor.java encrypt auf, um die Anfrage base64url-codiert und verschlüsselt zu übertragen.

pgpEncryptor.encrypt(echoResponseString)

Antwort zurückgeben

Die Antwort wird mit dem HTTP-Antwortstatuscode 202 zurückgegeben.

return new ResponseEntity<>(pgpEncryptor.encrypt(echoResponseString), HttpStatus.ACCEPTED);

9. Glückwunsch!

In diesem Codelab haben Sie eine Verbindung zur Payments API hergestellt.