Verbindung mit Google APIs in Java herstellen

1. Hinweis

Voraussetzungen

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

Lerninhalte

  • Konnektivität durch Senden einer gültigen Anfrage an die Google Echo API prüfen
  • Hier erfahren Sie, wie Sie eine Anfrage von Google an die vom Partner gehostete Echo API empfangen, entschlüsseln und parsen.

2. Einrichtung und Anforderungen

Anwendung herunterladen

Laden Sie den Java-Beispielcode herunter.

Übersicht über die Anwendungsstruktur

Der Java-Beispielcode lässt sich in die Standard-Zahlungs-APIs von Google einbinden. Die Beispielcode-Projektstruktur enthält ein outbound-Verzeichnis und ein inbound-Verzeichnis, um die eingehende Echo-Anfrage von Google an den Partner und die ausgehende Anfrage von der Partnerimplementierung an Google wiederzugeben.

Beide Verzeichnisse enthalten eine ähnliche Hierarchie bei der Paketerstellung 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 mithilfe des Maven-Wrappers zu installieren. Wenn Sie die App Engine verwenden, können Sie diesen Schritt überspringen.

./mvnw install

3. Zahlungsintegrationskonto-ID (PIAID) konfigurieren

Die Zahlungsintegrator-Konto-ID (PIAID) ist eine Kennung zur eindeutigen Identifizierung Ihrer Integrationen. Sie sollten Ihre PIAID von Google erhalten haben, indem Sie vor dem Start dieser Anleitung die Voraussetzungen erfüllt haben.

  1. Rufen Sie src/main/resources/application.properties im Projektverzeichnis auf.
  2. Lege die Property payment.integrator.account.id auf die PIAID fest, 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 URL echo unterscheidet sich je nach der API, die Sie einbinden. Rufen Sie die API-Referenzdokumentation für Ihren spezifischen Integrationstyp auf und kopieren Sie die URL für die Echo-Diagnose-API. Nachdem Sie die URL kopiert haben, fahren Sie mit den nächsten Schritten fort, um sie im Java-Projekt zu aktualisieren.

  1. Rufen Sie src/main/resources/application.properties im Projektverzeichnis auf.
  2. Lege die Property API_SERVICE_NAME so fest, dass sie mit den Informationen 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.

  • Rufen Sie src/resources/publicKey1.gpg auf und fügen Sie der Datei den öffentlichen ASCII-Schlüssel hinzu.
  • Rufen Sie src/resources/privateKey1.gpg auf und fügen Sie der Datei den privaten ASCII-Schlüssel hinzu.
  • Gehen Sie zu src/resources/passphrase1.txt 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 publicKey2.gpg Ihren zweiten öffentlichen Schlüssel hinzu, fügen Sie Ihren 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 Kommentarzeilen 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 URL unten auf, um sich Open API Swagger UI anzusehen.

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 Verbindung zur Google Echo API testen.

Sie können entweder Swagger UI oder die Befehlszeile verwenden, um den folgenden Befehl auszuführen, um von Ihrer Instanz der Beispielanwendung einen Aufruf an die Google-Server zu starten. Die Echo API der Beispielanwendung akzeptiert POST-Anfragen als Klartext. Nach Empfang der Anfrage 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 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 „Execute“ (Ausführen), wenn Sie die Anfrage an Google senden möchten.

Echo-Anfrage für GSPs über Swagger senden

Antwort erhalten

Eine erfolgreiche API-Anfrage hat die folgende Antwort von Google zur Folge.

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

Route

Nachdem eine Anfrage erfolgreich von Ihrem Server gesendet wurde, sehen wir uns nun 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 das clientMessage-Objekt sowie mehrere Standardwertfelder.

{
   "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 eine Ver- und Entschlüsselung durchführen, sowie die base64url-Codierung für Sie. Mit 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 die Antwort und geben die Antwort zurück

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

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

Antwort zurückgeben

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

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

8. Eingehende API-Verbindung testen

Zum Testen der eingehenden Echo-API-Konnektivität sendet Google eine Anfrage an die vom Partner gehostete Echo API. Wenn Sie so weit sind, wenden Sie sich an Ihren Ansprechpartner bei Google, damit diese Anfrage an Google gesendet wird.

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

Route

Nachdem eine Anforderung nun erfolgreich von Ihrem Server empfangen und verarbeitet wurde, erfahren Sie im Folgenden, wie das funktioniert hat.

Anfrage mit base64url decodieren und entschlüsseln

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

String decryptedRequest = pgpEncryptor.decrypt(echoRequest);

Anfrage erhalten

Nach der Decodierung und Entschlüsselung hat Google 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 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 mit base64url zu verschlüsseln und zu verschlüsseln.

pgpEncryptor.encrypt(echoResponseString)

Antwort zurückgeben

Die Antwort wird mit dem Statuscode 202 HTTP-Antwort 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.