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
controller
zawiera interfejsy API. - Pakiet
service
odpowiada za logikę biznesową, kodowanie base64url i szyfrowanie. - Pakiet
domain
zawiera 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.id
wpisz 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.properties
w katalogu projektu. - Ustaw właściwość
API_SERVICE_NAME
zgodnie 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.gpg
i dodaj do niego klucz publiczny w opakowaniu ASCII. - Przejdź do
src/resources/privateKey1.gpg
i dodaj do pliku klucz prywatny w osłonie ASCII. - Przejdź do
src/resources/passphrase1.txt
i 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.