1. Zanim zaczniesz
Wymagania wstępne
- Masz ukończone kroki 1 i 2 procesu implementacji.
- Możesz hostować serwer Java z zakończeniem protokołu TLS, używając Google App Engine lub własnego rozwiązania w domenie skonfigurowanej w Google.
- W środowisku jest zainstalowana aplikacja Java.
Czego się nauczysz
- Jak weryfikować połączenie, wysyłając prawidłowe żądanie do interfejsu API obsługującego test echa w Google.
- Jak odbierać, odszyfrowywać i analizować żądanie od Google do interfejsu API echo hostowanego przez partnera.
2. Konfiguracja i wymagania
Pobierz aplikację
Pobierz przykładowy kod w Javie.
Omówienie struktury aplikacji
Przykładowy kod w Javie integruje się z interfejsami API Google Standard Payments. Przykładowa struktura projektu kodu zawiera katalog outbound oraz katalog inbound odzwierciedlający przychodzące żądanie echo wysyłane przez Google do partnera i żądanie wychodzące z implementacji partnera do Google.
Oba te katalogi zawierają podobną hierarchię pakowania według warstwy. Trzy główne warstwy to controller, service i domain.
- Pakiet
controllerzawiera interfejsy API. - Pakiet
serviceodpowiada za logikę biznesową, kodowanie base64url i szyfrowanie. - Pakiet
domainzawiera obiekty POJO.
Zainstaluj zależności
Aby zainstalować wymagane zależności za pomocą oprogramowania Maven Wrapper, otwórz katalog projektu i uruchom podane niżej polecenie. Jeśli korzystasz z App Engine, możesz pominąć ten krok.
./mvnw install
3. Konfigurowanie identyfikatora konta integratora płatności
Identyfikator konta integratora płatności (PIAID) to identyfikator używany do jednoznacznego oznaczania integracji. Przed rozpoczęciem tego samouczka powinien dotrzeć do Ciebie ten identyfikator od Google, jeśli udało Ci się spełnić wymagania wstępne.
- W katalogu projektu przejdź do folderu
src/main/resources/application.properties. - W usługi
payment.integrator.account.idwpisz identyfikator konta integratora płatności, który został Ci wysłany przez Google.
payment.integrator.account.id={YOUR_PAYMENT_INTEGRATOR_ACCOUNT_ID}
4. Ustaw adres URL echa hostowanego przez Google
Adres URL interfejsu API hostowanego przez Google echo różni się w zależności od tego, z którym interfejsem API chcesz się integrować. Otwórz dokumentację interfejsu API dla konkretnego typu integracji i skopiuj adres URL interfejsu API echo diagnostycznego. Po skopiowaniu adresu URL wykonaj dalsze czynności, aby zaktualizować go w projekcie Java.
- Przejdź do
src/main/resources/application.propertiesw katalogu projektu. - Ustaw właściwość
API_SERVICE_NAMEzgodnie z dokumentacją dla deweloperów.
google.hosted.echo.url=vgw.googleapis.com/gsp/{API_SERVICE_NAME}/echo/
5. Dodawanie kluczy PGP
Aby włączyć szyfrowanie PGP, dodaj klucze PGP, jak pokazano poniżej.
- Otwórz plik
src/resources/publicKey1.gpgi dodaj do niego klucz publiczny w opakowaniu ASCII. - Przejdź do
src/resources/privateKey1.gpgi dodaj do pliku klucz prywatny w osłonie ASCII. - Przejdź do
src/resources/passphrase1.txti dodaj do pliku tajne hasło.

Aby włączyć szyfrowanie przy użyciu 2 kluczy, dodaj drugi klucz publiczny do publicKey2.gpg dodaj drugi klucz prywatny do privateKey2.gpg, a drugie hasło do passphrase.txt. Po dodaniu drugich kluczy odkomentuj odkomentowane wiersze kodu, które są odpowiedzialne za wczytywanie drugiej pary kluczy w funkcjach KeyConfig.addPrivateKeyAndPassphrase(...) i KeyConfig.addPublicKeys(...).
Świetnie, wszystko gotowe do uruchomienia aplikacji.
6. Uruchamianie aplikacji
Aby uruchomić aplikację, wykonaj poniższe polecenie.
$ ./mvnw spring-boot:run
Jeśli używasz domyślnie skonfigurowanej instancji App Engine, zamiast tego uruchom to polecenie:
$ gcloud app deploy
Domyślnie serwer nasłuchuje na porcie 8080. Aby wyświetlić interfejs Swagger interfejsu Open API, otwórz adres URL poniżej.
https://{APPLICATION_HOST}/swagger-ui.html
7. Testowanie połączenia wychodzącego interfejsu API płatności Google Standard
Po uruchomieniu aplikacji czas przetestować połączenie z interfejsem API Google echo.
Aby nawiązać połączenie między Twoją instancją przykładowej aplikacji a serwerami Google, możesz użyć Swagger UI lub interfejsu wiersza poleceń. Interfejs API obsługujący test echa przykładowej aplikacji akceptuje żądanie POST w formie tekstu jawnego. Po otrzymaniu żądania kolejne żądanie jest wysyłane do interfejsu API hostowanego przez Google.
Wysyłanie żądania za pomocą wiersza poleceń
Przed wykonaniem polecenia zastąp HOSTNAME nazwą hosta serwera.
$ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Partner Bank!' https://{HOSTNAME}/echo
Wysyłanie żądania w interfejsie Swagger UI
Aby wysłać żądanie za pomocą interfejsu Swagger UI, otwórz stronę https://{APPLICATION_HOST}/swagger-ui i ustaw wiadomość klienta w treści żądania. Kliknij przycisk „Wykonaj”, , gdy wszystko będzie gotowe do wysłania żądania do Google.

Otrzymanie odpowiedzi
Pomyślne żądanie do interfejsu API spowoduje wyświetlenie takiej odpowiedzi od Google.
{
"responseHeader":{
"responseTimestamp":"1606710026723"
},
"clientMessage":"Hello from Bank Little Bear!",
"serverMessage":"Server message."
}
Krok po kroku
Żądanie zostało już wysłane przez serwer, więc teraz sprawdźmy, jak to działa.
Tworzenie żądania
createEchoRequestWithMessage w OutboundEchoService tworzy żądanie echo wysłane do interfejsu API Google.
String jsonEchoRequestMessage = objectMapper.writeValueAsString(createEchoRequestWithMessage(message));
Wygenerowane żądanie zawiera clientMessage oraz kilka domyślnych pól wartości.
{
"requestHeader":{
"protocolVersion":{
"major":1,
"minor":0,
"revision":0
},
"requestId":"ddfe0fd0-ffdc-4fcf-991a-f0611ec83970",
"requestTimestamp":"1606715389040"
},
"clientMessage":"Hello from Bank Little Bear!"
}
Szyfrowanie i szyfrowanie żądania w Base64url
Wszystkie żądania są zaszyfrowane i zakodowane w base64url. W tym przykładzie PgpEncryptor.java zawiera metody pomocnicze, które wykonują szyfrowanie i odszyfrowywanie oraz kodowanie base64url. Poniższa metoda koduje żądanie i szyfruje za pomocą klucza publicznego Google.
String encryptedMessage = pgpEncryptor.encrypt(jsonEchoRequestMessage);
Wysyłanie żądania POST
Zaszyfrowana wiadomość jest wysyłana za pomocą żądania POST.
postStandardPaymentsEchoApi(encryptedMessage)
Odszyfrowanie i dekodowanie odpowiedzi za pomocą base64url oraz zwrócenie odpowiedzi
Prawidłowa odpowiedź Google jest zakodowana i zaszyfrowana w base64url, więc przed zwróceniem w postaci zwykłego tekstu musi zostać odkodowana i odszyfrowana. Metoda decrypt base64url dekoduje i odszyfrowuje odpowiedź.
String decryptedData =
pgpEncryptor.decrypt(postStandardPaymentsEchoApi(encryptedMessage).getBody());
Zwracanie odpowiedzi
Odpowiedź jest zwracana z kodem stanu odpowiedzi HTTP 202.
return new ResponseEntity<>(decryptedData, HttpStatus.ACCEPTED);
8. Testowanie połączenia z interfejsem Inbound API
Aby przetestować łączność z interfejsem API obsługującym test echa przychodzącego, Google wyśle żądanie do hostowanego przez partnera interfejsu API obsługującego test echa. Gdy wszystko będzie gotowe, skontaktuj się z osobą kontaktową w Google, aby aktywować to żądanie z Google.
Test echa jest zakończony, gdy możesz odczytać przychodzące żądanie echa od Google i odpowiedzieć za pomocą prawidłowej odpowiedzi echa.
Krok po kroku
Żądanie zostało już odebrane i obsłużone przez serwer, więc teraz sprawdźmy, jak to działa.
Dekodowanie i odszyfrowanie żądania za pomocą base64url
Po otrzymaniu żądania PgpEncryptor.java wywoła decrypt, który zdekoduje je za pomocą base64url i odszyfruje.
String decryptedRequest = pgpEncryptor.decrypt(echoRequest);
Odbieranie żądania
Z Google został wysłany ładunek wiadomości, który po zdekodowaniu i odszyfrowaniu jest podobny do tego:
{
"requestHeader": {
"protocolVersion": {
"major": 1
},
"requestId": "G1MQ0YERJ0Q7LPM",
"requestTimestamp": {
"epochMillis":1481899949606
},
"paymentIntegratorAccountId": "abcdef123456"
},
"clientMessage": "echo Me"
}
Tworzenie odpowiedzi
Po odczytaniu przychodzącego żądania echa możesz utworzyć odpowiedź.
private EchoResponse convertEchoRequestStringToEchoResponse(String decryptedRequest);
Odpowiedź zawiera wiadomość od Google, a także sygnaturę czasową i wiadomość z serwera.
{
"responseHeader": {
"responseTimestamp": {
"epochMillis":1481899950236
}
},
"clientMessage": "echo Me",
"serverMessage": "Debug ID 12345"
}
Kodowanie odpowiedzi w formacie base64url i jej szyfrowanie
Wszystkie żądania są szyfrowane i zakodowane w standardzie base64url, więc funkcja PgpEncryptor.java wywołuje metodę encrypt, aby zakodować i zaszyfrować żądanie.
pgpEncryptor.encrypt(echoResponseString)
Zwracanie odpowiedzi
Odpowiedź jest zwracana z kodem stanu odpowiedzi HTTP 202.
return new ResponseEntity<>(pgpEncryptor.encrypt(echoResponseString), HttpStatus.ACCEPTED);
9. Gratulacje!
Dzięki temu ćwiczeniu w Codelabs udało Ci się nawiązać połączenie z interfejsem Payments API.