📜  使用 Node.js 的 Razorpay 支付集成(1)

📅  最后修改于: 2023-12-03 15:36:32.323000             🧑  作者: Mango

使用 Node.js 的 Razorpay 支付集成

简介

Razorpay 是一家印度的在线支付公司,提供简单、快捷、便宜的在线支付服务。它支持各种支付方式,如信用卡、借记卡、 Netbanking、UPI 等。在本文中,我们将介绍如何使用 Node.js 集成 Razorpay 支付,以在您的 Web 应用程序中实现安全和可靠的在线支付。

实现步骤
1. 注册并创建 Razorpay 帐户

首先,您需要注册 Razorpay 帐户并使用您的银行帐户向 Razorpay 添加资金。

2. 创建 Razorpay 账户秘钥

使用 Razorpay 帐户凭据,您可以创建一个 Razorpay 账户秘钥以访问 Razorpay API。在您的 Razorpay 仪表板中,导航到 API Keys 部分并创建一个新的秘钥。

3. 创建 Node.js 应用程序

接下来,我们需要创建一个 Node.js 应用程序,以便我们可以使用 Razorpay API 进行交互。我们将使用 Express 框架来创建我们的应用程序。

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('App is listening on port 3000!');
});
4. 安装 Razorpay 包

使用 npm,我们可以轻松地安装 Razorpay Node.js 包。

npm install razorpay
5. 集成 Razorpay 支付

现在,我们将使用 Razorpay 的 Node.js 包将支付集成到我们的应用程序中。我们将在此处实现简单的购物车示例,以便用户可以添加项目到购物车并使用 Razorpay 完成付款。

const Razorpay = require('razorpay');
const bodyParser = require('body-parser');
const crypto = require('crypto');
const shortid = require('shortid');

const razorpay = new Razorpay({
  key_id: 'YOUR_KEY_ID', // Replace with your key_id
  key_secret: 'YOUR_SECRET_KEY', // Replace with your secret_key
});

app.use(bodyParser.json());

app.post('/razorpay/order', async (req, res) => {
  const payment_capture = 1;
  const amount = req.body.amount;
  const currency = 'INR';

  const options = {
    amount: amount,
    currency: currency,
    payment_capture: payment_capture,
  };

  try {
    const response = await razorpay.orders.create(options);
    res.json({
      id: response.id,
      currency: response.currency,
      amount: response.amount,
    });
  } catch (error) {
    console.log(error);
  }
});

app.post('/razorpay/payment', async (req, res) => {
  const secret = 'YOUR_WEBHOOK_SECRET'; // Replace with your webhook secret
  const shasum = crypto.createHmac('sha256', secret);
  shasum.update(JSON.stringify(req.body));

  const digest = shasum.digest('hex');

  if (digest === req.headers['x-razorpay-signature']) {
    console.log('Payment Success');

    const paymentId = req.body.payload.payment.entity.id;

    const response = await razorpay.payments.capture(paymentId, req.body.payload);

    console.log(response);

    res.json({
      message: 'success',
      status: response.status,
    });
  } else {
    console.log('Payment Failed');
    res.json({
      message: 'invalid',
    });
  }
});

在上面的代码片段中,我们首先从 Razorpay 包导入必要的依赖项,例如 Razorpay 对象和密码和身份验证码。然后,我们设置一个全局的 Razorpay 客户端,并使用 Express 中间件解析 JSON 请求体。

接下来,我们创建 /razorpay/order/razorpay/payment 路由,以便客户端使用 Razorpay 进行付款。

/razorpay/order 路由中,我们使用 razorpay.orders.create(options) 方法创建一个新的 Razorpay 订单,并将其作为 JSON 响应发送回客户端。

/razorpay/payment 路由中,我们首先验证请求,以确保它来自 Razorpay。然后,我们使用 razorpay.payments.capture(paymentId, payload) 方法对交易进行支付处理。如果交易被捕获,则我们在服务器日志中将其记录下来,并向客户端发送一个成功响应。否则,我们向客户端发送一个无效响应。

6. 实现前端

最后,我们需要为我们的购物车应用程序实现一个前端。为了简化示例,我们将使用 basic HTML 和 JavaScript。

<!DOCTYPE html>
<html>
  <body>
    <h1>My Shopping Cart</h1>
    <ul id="cart"></ul>
    <button onclick="checkout()">Checkout</button>

    <script src="https://checkout.razorpay.com/v1/checkout.js"></script>
    <script>
      function addItemToCart(item) {
        const cart = document.getElementById('cart');
        const li = document.createElement('li');
        li.innerText = `${item.name}: ${item.price}`;
        cart.appendChild(li);
      }

      const items = [
        {
          name: 'Item 1',
          price: 1000,
        },
        {
          name: 'Item 2',
          price: 2000,
        },
      ];

      items.forEach((item) => {
        addItemToCart(item);
      });

      async function checkout() {
        const response = await fetch('/razorpay/order', {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
          },
          body: JSON.stringify({
            amount: items.reduce((total, item) => {
              return (total += item.price);
            }, 0),
          }),
        });

        const { id, amount, currency } = await response.json();

        const options = {
          key: 'YOUR_KEY_ID', // Replace with your key_id
          amount: amount,
          name: 'My Shopping Cart',
          description: 'A Simple Shopping Cart',
          image: 'https://via.placeholder.com/150',
          order_id: id,
          handler: function (response) {
            console.log(response);
            fetch('/razorpay/payment', {
              method: 'POST',
              headers: {
                'Content-Type': 'application/json',
                'x-razorpay-signature': response.razorpay_signature,
              },
              body: JSON.stringify({
                payload: response,
              }),
            });
          },
          prefill: {
            name: 'John Doe',
            email: 'johndoe@example.com',
            contact: '9999999999',
          },
          notes: {
            address: 'Razorpay Corporate Office',
          },
          theme: {
            color: '#F37254',
          },
        };

        const razorpay = new Razorpay(options);
        razorpay.open();
      }
    </script>
  </body>
</html>

在上面的代码片段中,我们首先创建一个用于存储购物车项目的 HTML 列表。接下来,我们使用 checkout() 函数进行 Razorpay 支付。在函数中,我们使用 fetch() 方法向服务器发送订单请求,然后将响应中的订单 ID、金额和货币代码作为 Razorpay 支付参数进行设置。最后,我们在 Razorpay 窗体中显示交易标识符和提交按钮。如果客户端成功完成交易,则 handler() 函数将被调用,并向 /razorpay/payment 路由发送一个付款请求。

总结

以上是如何使用 Node.js 集成 Razorpay 支付的完整指南。使用 Razorpay,您可以在 Web 应用程序中实现可靠和安全的在线付款处理。让我们留下您对本文的想法和评论。