Прием платежей с помощью API Paystack в Node.js и Express.js: реализация и рекомендации

Привет и добро пожаловать!

Если вы читаете это, вас ждет захватывающий урок. Сегодня я проведу вас через процесс использования Paystack API в среде Node.js, чтобы упростить прием и проверку платежей. Но это не все! Мы также погрузимся в область чистой архитектуры, гарантируя, что наш код будет не только функциональным, но и легко читаемым, ремонтопригодным и масштабируемым.

Прежде чем мы перейдем к написанию кода, давайте рассмотрим платежный API Paystack. Чтобы получить платеж с помощью Paystack API, вам нужно будет сделать вызовы API к этим трем конечным точкам:

  1. Инициализировать конечную точку.API ожидает адрес электронной почты клиента, сумму транзакции в Kobo и дополнительные параметры. Он вернет ссылку на транзакцию, код доступа для оплаты SDK и URL-адрес авторизации.
  2. Подтвердить конечную точку. После успешного платежа позвоните в конечную точку, чтобы подтвердить статус платежа. В ответе будет предоставлен код авторизации, позволяющий взимать плату с пользователя в будущих транзакциях.
  3. Авторизация списания средств.Эта конечная точка используется для списания средств с постоянных клиентов в будущем без сбора их платежных реквизитов после их получения в первый раз.

Поскольку это руководство сосредоточено на получении платежей через API Paystack, мы сосредоточимся на отправке запросов к конечной точке инициализации. Кроме того, в целях тестирования мы будем использовать POSTMAN для взаимодействия с нашим приложением на стороне сервера.

Давайте начнем этот путь исследования и реализации!

  1. Для начала создайте учетную запись Paystack, посетив страницу регистрации. Если у вас еще нет учетной записи, просто зарегистрируйтесь, чтобы создать ее.
  2. После того, как вы зарегистрировались и вошли в свою панель управления Paystack, перейдите в раздел «Настройки» и нажмите «Ключи API и веб-перехватчики». Оттуда найдите тестовый секретный ключ и обязательно сохраните его. Этот ключ будет использоваться для аутентификации вашего приложения во время запросов API.
  3. Давайте начнем наш проект, создав новую папку. Откройте командную строку или терминал Git Bash и выполните следующую команду, чтобы создать новый каталог проекта:
mkdir paystack-nodejs-app

Эта команда создаст папку с именем «paystack-nodejs-app», которая будет служить корневым каталогом для нашего приложения. Не стесняйтесь заменить «paystack-nodejs-app» на предпочитаемое вами имя папки.

4. Чтобы инициализировать новый проект Node.js, перейдите в папку проекта и выполните эту команду.

cd paystack-nodejs-app
npm init -y

5. Установите необходимые модули для этого приложения, выполнив следующую команду:

npm install express body-parser dotenv 

6. Далее нам нужно создать файл index.js в корне нашего приложения, затем добавить следующий код.

// index.js file

require('dotenv').config();
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const router = require('./Router/route')



const port = process.env.PORT || 3001;
// Parse incoming requests with JSON payloads
app.use(bodyParser.json());

// Call the routers 
app.use(router);



// Start the server
app.listen(port, () => {
  console.log(`Server running at https://localhost:${port}`);
});

7. Теперь давайте создадим файл контроллера. В корневом каталоге вашего проекта создайте новую папку под названием «controllers». Внутри папки «controllers» создайте файл с именем contollers.js.

// controllers/controllers.js file

require('dotenv').config();
const express = require('express');
const https = require('https');


const payStack = {

  acceptPayment: async(req, res) => {
    try {
      // request body from the clients
      const email = req.body.email;
      const amount = req.body.amount;
      // params
      const params = JSON.stringify({
        "email": email,
        "amount": amount * 100
      })
      // options
      const options = {
        hostname: 'api.paystack.co',
        port: 443,
        path: '/transaction/initialize',
        method: 'POST',
        headers: {
          Authorization: process.env.PUBLIC_KEY, // where you place your secret key copied from your dashboard
          'Content-Type': 'application/json'
        }
      }
      // client request to paystack API
      const clientReq = https.request(options, apiRes => {
        let data = ''
        apiRes.on('data', (chunk) => {
          data += chunk
        });
        apiRes.on('end', () => {
          console.log(JSON.parse(data));
          return res.status(200).json(data);
        })
      }).on('error', error => {
        console.error(error)
      })
      clientReq.write(params)
      clientReq.end()
      
    } catch (error) {
      // Handle any errors that occur during the request
      console.error(error);
      res.status(500).json({ error: 'An error occurred' });
    }
  },
}

const initializePayment = payStack;
module.exports = initializePayment;

Таким образом, функция acceptPayment представляет собой контроллер, который обрабатывает процесс приема платежей с помощью Paystack API. Он извлекает адрес электронной почты и сумму из тела запроса, создает строку JSON с параметрами и инициирует клиентский запрос к API Paystack, используя предоставленные параметры. Данные ответа API собираются и регистрируются, а затем отправляются обратно клиенту с кодом состояния 200.

ПРИМЕЧАНИЕ.Все вызовы Paystack с вашего сервера аутентифицируются путем отправки вашего секретного ключа в заголовке авторизации в следующем формате Авторизация: Bearer sk_live_bl3xyzbl3xyz. Кроме того, не передавайте свои секретные ключи в git и не используйте их в клиентском коде.

8. Далее нам нужно создать обработчики маршрутов. Создайте папку routes в корневом каталоге и внутри этой папки создайте файл routes.js, затем добавьте следующие коды.

// routes/routes.js file

const express = require('express');
const router = express.Router();
const initializePayment = require('../Controllers/controllers'); // import the controller


router.post('/acceptpayment', initializePayment.acceptPayment);

module.exports = router

Вы можете видеть, как мы придерживались фундаментального принципа построения каждой системы в виде отдельного модуля, при этом каждый модуль несет определенную и независимую ответственность. Это лишь один пример из множества хороших практик, которым следует следовать при создании проекта Node.js.

8. Далее, чтобы запустить и протестировать приложение, просто используйте команду индекс узла в терминале. Это запустит сервер и позволит вам протестировать функциональность приложения на этом URL-адресе: https://localhost:3001/acceptpayment

9. Зайдите в свой POSTMAN и сделайте POST-запрос на этот адрес: https://localhost:3001/acceptpayment. ниже пример запроса Json

{
    "email": "[email protected]",
    "amount": 500000
}SAm

Пример ответа

{
  "status": true,
  "message": "Authorization URL created",
  "data": {
    "authorization_url": "https://checkout.paystack.com/0peioxfhpn",
    "access_code": "0peioxfhpn",
    "reference": "7PVGX8MEk85tgeEpVDtD"
  }
}

9. «authorization_url», полученный из ответа, перенаправит пользователей на всплывающую страницу оплаты Paystack, где они смогут безопасно совершить платеж.

Наконец, выполнив эти шаги, вы сможете беспрепятственно интегрировать API Paystack в свое приложение Node.js для приема платежей. Чтобы узнать о более продвинутых и подробных функциях, я рекомендую обратиться к Документации Paystack API, которая предоставляет обширные ресурсы для создания исключительных способов оплаты. Не стесняйтесь исследовать и использовать предоставленный исходный код для дальнейшего улучшения вашего проекта. Удачного кодирования!