Verbindung mit Google APIs in Java herstellen

1. Hinweis

Vorbereitung

  • Sie haben die Schritte 1 und 2 des Implementierungsprozesses abgeschlossen.
  • Sie können den bereitgestellten Java-Server mit TLS-Beendigung entweder mit Google App Engine oder mit Ihrer eigenen Lösung in der mit 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.
  • 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 Java-Beispielcode herunter.

Übersicht über die Anwendungsstruktur

Der Java-Beispielcode wird in die Standard-Zahlungs-APIs von Google eingebunden. Die Projektstruktur des Beispielcodes enthält ein outbound-Verzeichnis sowie ein inbound-Verzeichnis, um die eingehende Echo-Anfrage von Google an den Partner und die ausgehende Anfrage von der Implementierung des Partners an Google widerzuspiegeln.

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

  • Das Paket controller enthält die APIs.
  • Das service-Paket 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 mit dem Maven-Wrapper zu installieren. Wenn Sie App Engine verwenden, können Sie diesen Schritt überspringen.

./mvnw 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 im Projektverzeichnis src/main/resources/application.properties auf.
  2. Legen Sie für das Attribut payment.integrator.account.id die PIAID fest, die Sie von Google erhalten haben.
payment.integrator.account.id={YOUR_PAYMENT_INTEGRATOR_ACCOUNT_ID}

4. Von Google gehostete Echo-URL festlegen

Die von Google gehostete echo-URL hängt davon ab, welche API Sie einbinden. Rufen Sie die API-Referenzdokumentation für Ihren spezifischen Integrationstyp auf und kopieren Sie die URL für die Diagnostic Echo API. Fahren Sie nach dem Kopieren der URL mit den nächsten Schritten fort, um sie im Java-Projekt zu aktualisieren.

  1. Rufen Sie im Projektverzeichnis src/main/resources/application.properties auf.
  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 Ihre PGP-Schlüssel hinzu, um die PGP-Verschlüsselung zu aktivieren, wie unten dargestellt.

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

PGP-Schlüssel hinzufügen

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

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

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. Rufen Sie die unten stehende URL auf, um die Swagger-Benutzeroberfläche der Open API aufzurufen.

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

7. Verbindung zur Google Standard Payments Outbound API testen

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

Sie können entweder die Swagger-Benutzeroberfläche oder die CLI verwenden, um den folgenden Befehl auszuführen und 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.

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 Sie eine Anfrage mit der Swagger-UI senden möchten, rufen Sie https://{APPLICATION_HOST}/swagger-ui auf und legen Sie die Clientnachricht im Anfragetext fest. Klicken Sie auf die Schaltfläche „Ausführen“, wenn Sie bereit sind, die Anfrage an Google zu senden.

GSP-Echo-Anfrage über Swagger senden

Antwort erhalten

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

{
   "responseHeader":{
      "responseTimestamp":"1606710026723"
   },
   "clientMessage":"Hello from  Bank 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

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 mit Standardwerten.

{
   "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 sind 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 unten beschriebenen 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 Sie die Antwort, decodieren Sie sie mit base64url und geben Sie sie zurück.

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. Die Methode decrypt decodiert und entschlüsselt die Antwort mit base64url.

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

Antwort zurückgeben

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

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

8. Eingehende API-Verbindung testen

Um die Konnektivität der Inbound 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.

Base64url-Decodierung und Entschlüsselung der Anfrage

Wenn eine Anfrage empfangen wird, ruft PgpEncryptor.java decrypt auf, um die Anfrage mit base64url zu decodieren und zu entschlüsseln.

String decryptedRequest = pgpEncryptor.decrypt(echoRequest);

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.

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-zu codieren und zu verschlüsseln.

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 erfolgreich eine Verbindung zur Payments API hergestellt.