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

  1. Przejdź do pliku server.js w katalogu projektu.
  2. 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.

Dodawanie kluczy PGP

Ś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

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