1. Zanim zaczniesz
Wymagania wstępne
- Udało Ci się wykonać kroki 1 i 2 procesu implementacji.
- Możesz hostować serwer Java z zakończeniem TLS, korzystając z Google App Engine lub własnego rozwiązania w domenie skonfigurowanej w Google.
- W Twoim środowisku jest zainstalowana aplikacja Java.
Czego się nauczysz
- Jak weryfikować połączenie, wysyłając prawidłowe żądanie do interfejsu Google Echo API.
- Jak odbierać, odszyfrowywać i analizować żądanie od Google do interfejsu API echa hostowanego przez partnera.
2. Konfiguracja i wymagania
Pobierz aplikację
Pobierz przykładowy kod Java.
Omówienie struktury aplikacji
Przykładowy kod w Javie jest zintegrowany ze standardowymi interfejsami API płatności Google. Przykładowa struktura projektu z kodem zawiera katalog outbound
oraz katalog inbound
odzwierciedlający przychodzące żądanie echa od Google do partnera i żądanie wychodzące z implementacji partnerów do Google.
Oba te katalogi zawierają podobną hierarchię uporządkowania 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 POJO.
Zainstaluj zależności
Przejdź do katalogu projektu i uruchom to polecenie, aby zainstalować wymagane zależności za pomocą opakowania Maven. Jeśli korzystasz z App Engine, możesz pominąć ten krok.
./mvnw install
3. Konfigurowanie identyfikatora konta integratora płatności (PIAID)
Identyfikator konta integratora płatności (PIAID
) to identyfikator używany do jednoznacznej identyfikacji Twoich integracji. Twój identyfikator PIAID powinien być przesłany przez Google. Musisz spełnić wymagania wstępne przed rozpoczęciem tego samouczka.
- Przejdź do
src/main/resources/application.properties
w katalogu projektu. - W polu właściwości
payment.integrator.account.id
ustaw identyfikator PIAID otrzymany od Google.
payment.integrator.account.id={YOUR_PAYMENT_INTEGRATOR_ACCOUNT_ID}
4. Ustaw adres URL echa hostowanego przez Google
Adres URL echo
hostowany przez Google różni się w zależności od interfejsu API, z którym przeprowadzasz integrację. Zapoznaj się z dokumentacją interfejsu API dotyczącą konkretnego typu integracji i skopiuj adres URL interfejsu API diagnostyki echo. Po skopiowaniu adresu URL przejdź do kolejnych kroków, 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. Dodaj klucze PGP
Jak pokazano poniżej, dodaj klucze PGP, aby włączyć szyfrowanie PGP.
- Przejdź do
src/resources/publicKey1.gpg
i dodaj do pliku klucz publiczny w opakowaniu ASCII. - Przejdź do
src/resources/privateKey1.gpg
i dodaj do pliku klucz prywatny w opakowaniu ASCII. - Otwórz
src/resources/passphrase1.txt
i dodaj tajne hasło do pliku.
Aby włączyć szyfrowanie przy użyciu 2 kluczy, dodaj do publicKey2.gpg
drugi klucz publiczny, dodaj drugi klucz prywatny do domeny privateKey2.gpg
i dodaj drugie hasło do konta passphrase.txt
. Po dodaniu drugiego klucza usuń znacznik komentarza z wierszy kodu odpowiedzialnych za wczytywanie drugiej pary kluczy w KeyConfig.addPrivateKeyAndPassphrase(...)
i KeyConfig.addPublicKeys(...)
.
Świetnie, możesz już uruchomić aplikację.
6. Uruchamianie aplikacji
Aby uruchomić aplikację, wykonaj poniższe polecenie.
$ ./mvnw spring-boot:run
Jeśli używasz wstępnie skonfigurowanej instancji App Engine, uruchom to polecenie.
$ gcloud app deploy
Domyślnie serwer nasłuchuje na porcie 8080. Aby wyświetlić interfejs Open API Swagger, przejdź pod adres URL poniżej.
https://{APPLICATION_HOST}/swagger-ui.html
7. Testowanie połączenia wychodzącego interfejsu API Google Standard Payments
Gdy aplikacja jest już uruchomiona, czas przetestować połączenie z interfejsem API Google echo.
Do uruchomienia poniższego polecenia w celu zainicjowania połączenia z Twojej instancji przykładowej aplikacji do serwerów Google możesz użyć interfejsu użytkownika Swagger lub interfejsu wiersza poleceń. Przykładowy interfejs API echo 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
Wyślij żądanie w interfejsie Swagger
Aby wysłać żądanie za pomocą interfejsu Swagger, przejdź do https://{APPLICATION_HOST}/swagger-ui
i ustaw wiadomość klienta w treści żądania. Aby wysłać żądanie do Google, kliknij przycisk „Wykonaj”.
Otrzymywanie 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 z serwera, 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!"
}
kodowanie 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, a także kodowanie base64url. Poniższa metoda koduje żądanie i wykonuje szyfrowanie przy użyciu klucza publicznego Google.
String encryptedMessage = pgpEncryptor.encrypt(jsonEchoRequestMessage);
Wyślij żądanie POST
Zaszyfrowana wiadomość jest wysyłana za pomocą żądania POST.
postStandardPaymentsEchoApi(encryptedMessage)
Odszyfrowanie i dekodowanie odpowiedzi w standardzie base64url oraz zwrócenie odpowiedzi
Pomyślna odpowiedź Google jest zakodowana i zaszyfrowana w standardzie base64url, więc zanim zostanie zwrócona w postaci tekstu jawnego, musi zostać odkodowana i odszyfrowana. Metoda decrypt
base64url dekoduje i odszyfrowuje odpowiedź.
String decryptedData =
pgpEncryptor.decrypt(postStandardPaymentsEchoApi(encryptedMessage).getBody());
Wysyłanie odpowiedzi
Odpowiedź jest zwracana z kodem stanu odpowiedzi HTTP 202.
return new ResponseEntity<>(decryptedData, HttpStatus.ACCEPTED);
8. Testowanie połączeń interfejsu Inbound API
Aby przetestować połączenie przychodzącego echa przez interfejs API, Google wyśle żądanie do tego interfejsu API. 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ługiwane przez serwer, więc teraz sprawdźmy, jak to działa.
Dekodowanie i odszyfrowywanie żądania za pomocą Base64url
Po otrzymaniu żądania PgpEncryptor.java
wywołuje metodę decrypt
, która dekoduje i odszyfrowuje żądanie w standardzie base64url.
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 pomyślnym odczytaniu przychodzącego żądania echo 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 i szyfrowanie odpowiedzi za pomocą Base64url,
Wszystkie żądania są szyfrowane i zakodowane w standardzie base64url, dlatego PgpEncryptor.java
wywołuje metodę encrypt
, aby zakodować i zaszyfrować żądanie w standardzie base64url.
pgpEncryptor.encrypt(echoResponseString)
Wysyłanie odpowiedzi
Odpowiedź jest zwracana z kodem stanu odpowiedzi HTTP 202.
return new ResponseEntity<>(pgpEncryptor.encrypt(echoResponseString), HttpStatus.ACCEPTED);
9. Gratulacje!
Dzięki temu ćwiczeniu z programowania udało Ci się nawiązać połączenie z Payments API.