1. Zanim zaczniesz
To ćwiczenia z programowania do samodzielnego wykonania, które przeprowadzą Cię przez proces nawiązywania połączenia z interfejsami API płatności firmy Stanadard.
Wymagania wstępne
- Udało Ci się wykonać kroki 1 i 2 procesu implementacji.
- Możesz hostować udostępniony serwer Node.js z zakończeniem TLS, korzystając z Google App Engine lub własnego rozwiązania w domenie skonfigurowanej w Google.
- W Twoim środowisku jest zainstalowany język Node.js.
Czego się nauczysz
- Jak weryfikować 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 interfejsu API Echo hostowanego przez partnera.
2. Konfiguracja i wymagania
Pobierz aplikację
Pobierz przykładowy kod Node.js.
Zainstaluj zależności
Przejdź do katalogu projektu i uruchom to polecenie, aby zainstalować wymagane zależności. Jeśli korzystasz z 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 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 pliku
server.js
w katalogu projektu. - W zmiennej
PIAID
wpisz identyfikator PIAID otrzymany od Google.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';
4. Dodaj klucze PGP
Aby włączyć szyfrowanie PGP, utwórz następujące pliki w strukturze projektu i dodaj klucze 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.
Świetnie, możesz już uruchomić aplikację.
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łączeń 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 nawiązać połączenie między Twoją instancją przykładowej aplikacji a serwerami Google. 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.
$ 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 z serwera, 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 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"
}
Zaszyfrowanie żądania
Wszystkie żądania są zaszyfrowane i zakodowane w base64url. W tym przykładzie crypto.js
zawiera metody pomocnicze, które wykonują szyfrowanie i odszyfrowywanie za Ciebie. Metoda crypto.encrypt
szyfruje przy użyciu 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 za pomocą żądania POST za pomocą axios.
const response = await axios.post(ECHO_URL, base64url(encrypted), AXIOS_CONFIG);
Odszyfrowywanie i zwracanie 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.
const encryptedMessage = base64url.toBuffer(response.data);
const decryptedResponse = await crypto.decrypt(encryptedMessage);
res.status(200);
res.send(decryptedResponse);
7. Testowanie połączeń z interfejsem API partnera
Aby przetestować połączenie z interfejsem API echa partnera, 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 żądania za pomocą base64url
Po otrzymaniu żądania musisz najpierw je zdekodować za pomocą base64url.
const encryptedRequest = base64url.toBuffer(req.body);
Odszyfrowywanie żądania
Po zdekodowaniu żądania za pomocą 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 pomyślnym 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 wiadomość z serwera.
{ "responseHeader": { "responseTimestamp": { "epochMillis":1481899950236 } }, "clientMessage": "echo Me", "serverMessage": "Debug ID 12345" }
Szyfrowanie i kodowanie odpowiedzi 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);
Wysyłanie 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.