Как установить соединение с API платежей в Node.js

1. Прежде чем начать

Это самостоятельное руководство по написанию кода, в котором рассказывается, как установить соединение с API-интерфейсами Stanadard Payments.

Предварительные условия

  • Вы завершили этапы 1 и 2 процесса внедрения.
  • Вы можете разместить предоставленный сервер Node.js с завершением TLS, используя Google App Engine или собственное решение в домене, настроенном с помощью Google.
  • Node.js установлен в вашей среде.

Что вы узнаете

  • Как проверить подключение, отправив действительный запрос к API echo API стандартных платежей Google.
  • Как получить, расшифровать и проанализировать запрос от Google к API Echo, размещенному на партнерском сервере.

2. Настройка и требования

Загрузите приложение

Загрузите пример кода Node.js.

Установить зависимости

Перейдите в каталог проекта и выполните следующую команду, чтобы установить необходимые зависимости. Если вы используете App Engine, вы можете пропустить этот шаг.

npm install

3. Настройте идентификатор учетной записи платежного интегратора (PIAID).

Идентификатор учетной записи платежного интегратора ( PIAID ) – это идентификатор, используемый для уникальной идентификации ваших интеграций. Вы должны были получить свой PIAID от Google, выполнив предварительные требования перед началом работы с этим руководством.

  1. Перейдите к файлу server.js в каталоге проекта.
  2. Установите для переменной PIAID значение PIAID, предоставленное вам Google.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';

4. Добавьте ключи PGP.

Создайте следующие файлы в структуре проекта и добавьте ключи PGP, чтобы включить шифрование PGP.

  • Создайте файл с именем public.key и добавьте в него бронированный открытый ключ ASCII.
  • Создайте файл с именем private.key и добавьте в него бронированный закрытый ключ ASCII.
  • Создайте файл с именем passphrase.txt и добавьте в него секретную фразу-пароль.

Добавление ключей PGP

Отлично, все готово для запуска приложения!

5. Запустите приложение.

Чтобы запустить приложение, выполните следующую команду.

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

Если вы используете предварительно настроенный экземпляр App Engine, вместо этого запустите эту команду.

$ gcloud app deploy

По умолчанию сервер будет прослушивать порт 8080.

6. Проверьте подключение API стандартных платежей Google.

Теперь, когда приложение запущено, пришло время протестировать возможность подключения к API echo API стандартных платежей Google .

Выполните следующую команду, чтобы инициировать вызов из вашего экземпляра примера приложения на серверы Google. Пример API echo приложения принимает запрос POST в виде открытого текста. После получения запроса последующий запрос отправляется в API, размещенный в Google.

  $ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Little Bear' https://{HOSTNAME}/echo

Успешный запрос API приведет к следующему ответу от Google.

{
   "responseHeader":{
      "responseTimestamp":"1606710026723"
   },
   "clientMessage":"Hello from Little Bear",
   "serverMessage":"Server message."
}

Шаг за шагом

Теперь, когда ваш сервер успешно отправил запрос, давайте посмотрим, как это работает.

Создайте запрос

buildEchoRequestBody в bodyHelpers.js создает echo запрос, отправляемый в API Google.

const message = bodyHelpers.buildEchoRequestBody(req.body);

Сгенерированный запрос включает clientMessage , а также несколько полей значений по умолчанию.

{
   "requestHeader":{
      "protocolVersion":{
         "major":1,
         "minor":0,
         "revision":0
      },
      "requestId":"ddfe0fd0-ffdc-4fcf-991a-f0611ec83970",
      "requestTimestamp":"1606715389040"
   },
   "clientMessage":"Hello from Little Bear"
}

Зашифровать запрос

Все запросы зашифрованы и закодированы в формате Base64url. В этом примере crypto.js содержит вспомогательные методы, которые выполняют за вас шифрование и дешифрование. Метод crypto.encrypt выполняет шифрование с использованием открытого ключа Google.

const encrypted = await crypto.encrypt(message);

Отправьте POST-запрос в кодировке Base64url.

Зашифрованное сообщение представляет собой кодировку base64url с использованием пакета base64url и отправляется через запрос POST с использованием axios.

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

Расшифровать и вернуть ответ

Успешный ответ Google закодирован и зашифрован в формате Base64url, поэтому его также необходимо декодировать и расшифровать, прежде чем его можно будет вернуть в виде открытого текста.

const encryptedMessage = base64url.toBuffer(response.data);
const decryptedResponse = await crypto.decrypt(encryptedMessage);
res.status(200);
res.send(decryptedResponse);

7. Проверьте подключение к партнерскому API.

Чтобы проверить возможность подключения партнерского эхо-API, Google отправит запрос в партнерский эхо-API.

Когда вы будете готовы, обратитесь к своему контактному лицу в Google, чтобы инициировать этот запрос от Google.

Эхо-тест считается завершенным, когда вы можете прочитать входящий эхо-запрос от Google и ответить действительным эхо-ответом.

Шаг за шагом

Теперь, когда запрос был успешно получен и обработан вашим сервером, давайте рассмотрим, как это работает.

Base64url декодирует запрос

Когда вы получите запрос, вам сначала нужно будет его декодировать в base64url.

const encryptedRequest = base64url.toBuffer(req.body);

Расшифровать запрос

После того, как вы раскодировали запрос с помощью base64url, вам необходимо его расшифровать.

const decryptedRequest = await crypto.decrypt(encryptedRequest);

Получить запрос

Google отправил полезную нагрузку сообщения, похожую на следующую, после того, как оно было декодировано и расшифровано.

{
  "requestHeader": {
    "protocolVersion": {
      "major": 1
    },
    "requestId": "G1MQ0YERJ0Q7LPM",
    "requestTimestamp": {
      "epochMillis":1481899949606
    },
    "paymentIntegratorAccountId": "abcdef123456"
  },
  "clientMessage": "echo Me"
}

Создайте ответ

После успешного прочтения входящего эхо-запроса вы готовы создать ответ.

clientMessage = JSON.parse(decryptedRequest).clientMessage;
responseBody = bodyHelpers.buildEchoResponseBody(clientMessage);

Ответ включает в себя сообщение от Google, а также метку времени и сообщение от сервера.

{
  "responseHeader": {
    "responseTimestamp": {
      "epochMillis":1481899950236
    }
  },
  "clientMessage": "echo Me",
  "serverMessage": "Debug ID 12345"
}

Зашифруйте и base64 закодируйте ответ.

После того как вы сформировали ответное сообщение, вы готовы его зашифровать и закодировать в base64url.

encryptedResponse = await crypto.encrypt(responseBody);
const encodedResponse = base64url(encryptedResponse);

Вернуть ответ

И, наконец, вы готовы отправить ответ POST.

res.send(encodedResponse);

8. Поздравляем!

В этой лаборатории кода вы успешно установили соединение с Echo API!