1. Zanim zaczniesz
To ćwiczenia z programowania do samodzielnego wykonania, które przeprowadzą Cię przez proces nawiązywania połączenia z interfejsami API Standard Payments.
Wymagania wstępne
- Masz ukończone kroki 1 i 2 procesu implementacji.
- Możesz hostować serwer Node.js z zakończeniem protokołu TLS, używając Google App Engine lub własnego rozwiązania w domenie skonfigurowanej w Google.
- Node.js jest zainstalowany w Twoim środowisku.
Czego się nauczysz
- Jak zweryfikować połączenie, wysyłając prawidłowe żądanie do interfejsu API obsługującego test echa w Google Standard Payments.
- Jak odbierać, odszyfrowywać i analizować żądanie od Google do hostowanego przez partnera interfejsu API obsługującego test echa.
2. Konfiguracja i wymagania
Pobieranie aplikacji
Pobierz przykładowy kod Node.js.
Zainstaluj zależności
Aby zainstalować wymagane zależności, otwórz katalog projektu i uruchom polecenie znajdujące się poniżej. Jeśli używasz App Engine, możesz pominąć ten krok.
npm install
3. Konfigurowanie identyfikatora konta integratora płatności (PIAID)
Identyfikator konta integratora płatności (PIAID) to identyfikator używany do jednoznacznego oznaczania integracji. Zanim rozpoczniesz ten samouczek, Twój identyfikator PIAID od Google powinien być do Ciebie spełniony, gdy spełniasz wymagania wstępne.
- Przejdź do pliku
server.jsw katalogu projektu. - W zmiennej
PIAIDwpisz identyfikator PIAID otrzymany od Google.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';
4. Dodawanie kluczy PGP
Utwórz te pliki w strukturze projektu i dodaj klucze PGP, aby włączyć szyfrowanie PGP.
- Utwórz plik o nazwie
public.keyi dodaj do niego klucz publiczny w opakowaniu ASCII. - Utwórz plik o nazwie
private.keyi dodaj do niego klucz prywatny w opakowaniu ASCII. - Utwórz plik o nazwie
passphrase.txti dodaj do niego tajne hasło wielowyrazowe.

Świetnie, wszystko gotowe do uruchomienia aplikacji.
5. Uruchamianie aplikacji
Aby uruchomić aplikację, wykonaj poniższe polecenie.
$ node server.js Server listening on port 8080...
Jeśli używasz wstępnie skonfigurowanej instancji App Engine, uruchom to polecenie.
$ gcloud app deploy
Domyślnie serwer nasłuchuje na porcie 8080.
6. Testowanie połączenia z interfejsem Google Standard Payments API
Gdy aplikacja jest już uruchomiona, czas przetestować połączenie za pomocą interfejsu API obsługującego test echa w Google Standard Payments.
Uruchom poniższe polecenie, aby zainicjować wywołanie Twojej instancji przykładowej aplikacji na serwerach Google. Przykładowa aplikacja echo API akceptuje żądanie POST w postaci zwykłego tekstu. Po otrzymaniu żądania kolejne żądanie jest wysyłane do interfejsu API hostowanego przez Google.
$ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Little Bear' https://{HOSTNAME}/echo
Pomyślne żądanie do interfejsu API spowoduje wyświetlenie takiej odpowiedzi od Google.
{
"responseHeader":{
"responseTimestamp":"1606710026723"
},
"clientMessage":"Hello from 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
buildEchoRequestBody w bodyHelpers.js tworzy żądanie echo wysłane do interfejsu API Google.
const message = bodyHelpers.buildEchoRequestBody(req.body);
Wygenerowane żądanie zawiera pole 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 Little Bear"
}
Szyfrowanie żądania
Wszystkie żądania są zaszyfrowane i zakodowane w base64url. W tym przykładzie crypto.js zawiera metody pomocnicze, które wykonują szyfrowanie i odszyfrowywanie danych za Ciebie. Metoda crypto.encrypt szyfruje za pomocą klucza publicznego Google.
const encrypted = await crypto.encrypt(message);
Wysyłanie żądania POST zakodowanego w base64url
Zaszyfrowana wiadomość jest zakodowana w base64url za pomocą pakietu base64url i wysyłana przez żądanie POST za pomocą axios.
const response = await axios.post(ECHO_URL, base64url(encrypted), AXIOS_CONFIG);
Odszyfrowywanie i zwracanie 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.
const encryptedMessage = base64url.toBuffer(response.data);
const decryptedResponse = await crypto.decrypt(encryptedMessage);
res.status(200);
res.send(decryptedResponse);
7. Testowanie połączenia z interfejsem Partner API
Aby przetestować połączenie z interfejsem API echo partnera, Google wyśle żądanie do interfejsu API obsługującego test echa hostowanego przez partnera.
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ż otrzymane i obsłużone przez serwer, więc teraz sprawdźmy, jak to działa.
Dekodowanie żądania za pomocą base64url
Po otrzymaniu żądania musisz je najpierw zdekodować za pomocą base64url.
const encryptedRequest = base64url.toBuffer(req.body);
Odszyfrowanie żądania
Po zdekodowaniu żądania w base64url musisz je odszyfrować.
const decryptedRequest = await crypto.decrypt(encryptedRequest);
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 udanym odczytaniu przychodzącego żądania echo możesz utworzyć odpowiedź.
clientMessage = JSON.parse(decryptedRequest).clientMessage;
responseBody = bodyHelpers.buildEchoResponseBody(clientMessage);
Odpowiedź zawiera wiadomość od Google, a także sygnaturę czasową i komunikat z serwera.
{
"responseHeader": {
"responseTimestamp": {
"epochMillis":1481899950236
}
},
"clientMessage": "echo Me",
"serverMessage": "Debug ID 12345"
}
Szyfrowanie wiadomości i kodowanie jej w base64
Po utworzeniu wiadomości z odpowiedzią możesz ją zaszyfrować i zakodować w base64url.
encryptedResponse = await crypto.encrypt(responseBody);
const encodedResponse = base64url(encryptedResponse);
Zwracanie odpowiedzi
Możesz już wysłać odpowiedź POST.
res.send(encodedResponse);
8. Gratulacje!
Dzięki temu ćwiczeniu z programowania udało Ci się nawiązać połączenie z interfejsem Echo API.