Пришло время вознаградить ваших пользователей реальными $$$. Давайте посмотрим, как это сделать с помощью Node.js и API пакетных выплат Paypal!

Допустим, у вас есть какой-то веб-сайт электронной коммерции или любой другой веб-сайт, который вознаграждает вашего пользователя за выполнение определенного вида деятельности, выплачивая ему определенную сумму денег. Быстрый и надежный способ сделать это — через Paypal — крупнейшую платежную платформу в мире (с 53% мирового объема транзакций в 2022 году). Моему проекту недавно нужно было сделать именно это с помощью NodeJS, и я был немного удивлен отсутствием пошаговых инструкций для этого. Разобравшись с этим для себя, я решил, что на эту тему стоит написать небольшую статью.

Постановка задачи и базовая настройка

Веб-сайт, над которым я недавно работал, должен рассчитать сумму денег, которую мы должны заплатить нашим пользователям в конце каждого месяца. Затем мы отправим пакетный запрос в Paypal на выплату определенной суммы денег указанным пользователям.

Базовая установка, которую мы построили, состояла из следующего:

  • Серверная служба NodeJS
  • NestJS для бэкэнд-фреймворка
  • node-cron для запуска запланированных заданий cron

Я не буду вдаваться в подробности, так как это довольно устоявшаяся и популярная комбинация, но, пожалуйста, не стесняйтесь оставлять любые вопросы в разделе комментариев.

Шаги

Теперь перейдем к конкретной реализации обработки выплаты. SDK для конкретного узла существовал и существует до сих пор, но он устарел с 2020 года, поэтому мы не стали этого делать. В настоящее время предпочтительным способом является сделать это через Paypal Rest API, который задокументирован здесь. Давайте посмотрим, как это можно сделать.

Во-первых, вам нужно настроить учетную запись Paypal. Затем, как только вы войдете в панель управления Paypal и создадите приложение, вы сможете увидеть свой идентификатор клиента и секрет, перейдя в раздел Мои приложения и учетные данные. . Пожалуйста, смотрите эту статью для деталей, если это необходимо.

Получив свои учетные данные, вы можете начать использовать API Paypal. Два основных вызова API, которые вам нужны:

  1. Получение токенов авторизации для API Paypal
  2. Выдача запроса на пакетную выплату для оплаты вашим пользователям

1. Получение токена авторизации для API Paypal

Входы:

  • ID клиента
  • Секрет клиента

Выходы:

  • Токен авторизации для подключения к Paypal API

Официальная документация по получению токена авторизации доступна здесь, которая включает в себя образец запроса curl. Предполагая, что вы хотите сначала провести пробы и ошибки в режиме разработчика, URL API Paypal, который вы должны использовать, выглядит следующим образом:

https://api-m.sandbox.paypal.com/v1/oauth2/токен

Если вы хотите сначала попробовать этот запрос с Postman, вот скриншот моих конфигураций Postman:

Обратите внимание, что для получения токенов аутентификации вам необходимо предоставить идентификатор клиента и секрет, которые мы упоминали в разделе выше. После того, как вы заполнили необходимые поля, как показано на скриншоте, просто нажмите «Получить новый токен доступа», и вы должны увидеть всплывающее диалоговое окно с отображаемым токеном доступа:

В NodeJS это можно реализовать следующим образом с помощью axios или любого другого http-клиента (для которого запрос будет выглядеть иначе):

    const response = await axios.post(
      `https://api-m.sandbox.paypal.com/v1/oauth2/token`,
      stringify({
        grant_type: 'client_credentials',
      }),
      {
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
        },
        auth: {
          username: process.env.PAYPAL_CLIENT_ID,
          password: process.env.PAYPAL_CLIENT_SECRET,
        },
      },
    );

    // make Paypal API calls with your access token here!!
    const authToken = response.data.access_token;

Обратите внимание, что если вы используете axios, то параметр данных запроса (с Grant_Type) должен быть преобразован в строку. Посмотрите этот пост, если хотите узнать больше.

С вашим токеном доступа теперь вы можете производить выплаты своим пользователям с помощью API выплат.

2. Отправка запроса на пакетную выплату вашим пользователям.

Входы:

  • Токен аутентификации (из предыдущего шага)
  • Список платежей, которые необходимо произвести, включая адрес электронной почты получателя, сумму, валюту и другие необязательные параметры.

Выходы:

  • Идентификатор пакета выплат
  • Статус выплаты

Это та часть, где ваши пользователи действительно получают деньги. Для этого вам нужно будет использовать API пакетных выплат, который является конечной точкой POST. Согласно официальной документации, за звонок можно отправить до 15 000 платежей. Предполагая, что вы хотите сначала работать в режиме разработчика, вы можете использовать API песочницы по следующему URL-адресу:

https://api-m.sandbox.paypal.com/v1/payments/payouts

В NodeJS этот запрос можно реализовать следующим образом:

      const response = await axios.post(
      `https://api-m.sandbox.paypal.com/v1/payments/payouts`,
      {
        sender_batch_header: {
          recipient_type: 'EMAIL',
          email_subject: 'You have a payout!',
          email_message:
            'You have received a payout! Thanks for using our service!',
        },
        items: [
          {
            receiver: '[email protected]',
            amount: {
              value: 600,
              currency: 'JPY',
            },
          },
          // add more payout items here as you need
        ],
      },
      {
        headers: {
          'Content-Type': 'application/json',
          Authorization: `Bearer ${authToken}`,
        },
      },
    );

Имейте в виду, что я предполагаю, что у одного из ваших получателей платежей есть учетная запись Paypal с адресом электронной почты [email protected]. В качестве альтернативы вы также можете использовать другие средства для уникальной идентификации получателя платежей, например номер телефона. Я также указал здесь простую тему электронного письма и текст сообщения. Пожалуйста, ознакомьтесь с официальной документацией, чтобы узнать, как добавить такие параметры.

После отправки запроса на выплату немедленный ответ будет содержать payout_batch_id, с помощью которого вы сможете отслеживать статус выплаты. Сначала статус будет PENDING, а затем соответственно обновлен.

Проверка статуса выплаты

Вы можете проверить статус своего запроса на пакетную выплату, отправив запрос GET по следующему URL-адресу:

https://api-m.sandbox.paypal.com/v1/payments/payouts/‹ID ПАКЕТА ВЫПЛАТЫ ЗДЕСЬ›

Конечно, как и любой другой запрос API Paypal, вам нужно будет отправить запрос с вашим токеном аутентификации. Ниже приведен снимок экрана с конфигурацией Postman и ответом:

Конечно, вы также можете проверить ту же информацию через панель инструментов Paypal, просмотрев свой идентификатор пакета выплат.

Заключение

Управление платежами вашим пользователям может быть непростой задачей, поскольку ставки выше, чем предоставление им предложений для просмотра их следующих видео с кошками, а исправить ошибки гораздо сложнее. Хотя Paypal Payout API не сможет снизить для нас такие риски, он, по крайней мере, упрощает реализацию и оставляет нам больше времени для тестирования и создания надежного решения. Будучи хорошо зарекомендовавшей себя платежной платформой, статус и популярность Paypal также облегчают привлечение пользователей. Я надеюсь, что эта статья помогла представить обзор того, как это можно сделать относительно безболезненно.

Если вы читаете это, спасибо, что зашли так далеко. Если у вас есть какие-либо вопросы или отзывы после прочтения этого поста, пожалуйста, не стесняйтесь оставлять комментарии и заводить друзей :)

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.