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

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

Dodawanie kluczy PGP

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