Jak nawiązać połączenie z interfejsami API płatności w Node.js

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ć udostępniony serwer Node.js z zakończeniem TLS, używając Google App Engine lub własnego rozwiązania w domenie skonfigurowanej w Google.
  • Obiekt Node.js jest zainstalowany w Twoim środowisku.

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 obsługującego test echa hostowanego przez partnera.

2. Konfiguracja i wymagania

Pobieranie aplikacji

Pobierz przykładowy kod Node.js.

Instalowanie zależności

Aby zainstalować wymagane zależności, otwórz katalog projektu i uruchom polecenie znajdujące się poniżej. Jeśli korzystasz z App Engine, możesz pominąć ten krok.

npm 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.

  1. Przejdź do pliku server.js w katalogu projektu.
  2. W zmiennej PIAID wpisz identyfikator konta integratora płatności, który został Ci wysłany przez Google.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';

4. Dodawanie kluczy PGP

Utwórz następujące 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.

Dodawanie kluczy PGP

Świetnie, wszystko gotowe do uruchomienia aplikacji.

5. Uruchamianie aplikacji

Aby uruchomić aplikację, wykonaj to polecenie:

$ node server.js
Server listening on port 8080...

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.

6. Testowanie połączenia interfejsu API Google Standard Payments

Gdy aplikacja jest już uruchomiona, czas przetestować połączenie za pomocą interfejsu API obsługującego test echa w Google Standard Payments.

Uruchom znajdujące się poniżej polecenie, aby nawiązać połączenie między Twoją instancją przykładowej aplikacji a serwerami Google. 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.

  $ 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 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 standardzie base64url za pomocą pakietu base64url i wysyłana przez żądanie POST przy użyciu axios.

const response = await axios.post(ECHO_URL, base64url(encrypted), AXIOS_CONFIG);

Odszyfrowywanie i zwracanie odpowiedzi

Prawidłowa odpowiedź od Google jest zakodowana i zaszyfrowana w base64url, więc przed wyświetleniem jako tekst jawny 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ć łączność z interfejsem API obsługującym test echa partnera, 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ż 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 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 echa 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 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);

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.