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.js
w katalogu projektu. - W zmiennej
PIAID
wpisz 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.key
i dodaj do niego klucz publiczny w opakowaniu ASCII. - Utwórz plik o nazwie
private.key
i dodaj do niego klucz prywatny w opakowaniu ASCII. - Utwórz plik o nazwie
passphrase.txt
i 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.