You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter电商应用集成Razorpay/Stripe支付网关后端实现咨询

Flutter电商集成Razorpay/Stripe支付网关后端实现指南

一、核心逻辑说明

不管是Razorpay还是Stripe,前端(Flutter)都不能直接生成支付令牌/订单ID,必须通过后端调用官方API生成——这是为了避免密钥泄露、保障支付安全。后端核心流程:

  1. 接收Flutter端传来的订单金额、商品信息、用户ID等数据
  2. 调用支付服务商的API创建订单/生成令牌
  3. 将生成的订单ID/令牌返回给Flutter端,前端用该值发起支付
  4. 支付完成后,接收服务商的异步回调,更新订单状态并处理后续业务(比如库存扣减)

二、Razorpay后端实现示例(Node.js)

1. 依赖安装

npm install razorpay express cors

2. 核心代码

const express = require('express');
const Razorpay = require('razorpay');
const cors = require('cors');

const app = express();
app.use(cors());
app.use(express.json());

// 初始化Razorpay实例(替换为你的密钥)
const razorpay = new Razorpay({
  key_id: 'YOUR_RAZORPAY_KEY_ID',
  key_secret: 'YOUR_RAZORPAY_KEY_SECRET'
});

// 创建订单接口
app.post('/create-razorpay-order', async (req, res) => {
  try {
    const { amount, currency = 'INR', receipt, notes } = req.body;
    // Razorpay要求金额以最小单位(如派萨)传入,所以乘以100
    const order = await razorpay.orders.create({
      amount: amount * 100,
      currency,
      receipt,
      notes
    });
    res.json({ success: true, orderId: order.id });
  } catch (error) {
    res.status(500).json({ success: false, message: error.message });
  }
});

// 支付回调验证接口
app.post('/verify-razorpay-payment', async (req, res) => {
  const { razorpay_order_id, razorpay_payment_id, razorpay_signature } = req.body;
  const crypto = require('crypto');
  const hmac = crypto.createHmac('sha256', 'YOUR_RAZORPAY_KEY_SECRET');
  hmac.update(`${razorpay_order_id}|${razorpay_payment_id}`);
  const generatedSignature = hmac.digest('hex');
  
  if (generatedSignature === razorpay_signature) {
    // 验证成功,更新订单状态为已支付
    res.json({ success: true, message: '支付验证成功' });
  } else {
    res.status(400).json({ success: false, message: '支付验证失败' });
  }
});

app.listen(3000, () => console.log('后端服务运行在3000端口'));

三、Stripe后端实现示例(Node.js)

1. 依赖安装

npm install stripe express cors

2. 核心代码

const express = require('express');
const Stripe = require('stripe');
const cors = require('cors');

const app = express();
app.use(cors());
app.use(express.json());

// 初始化Stripe实例(替换为你的密钥)
const stripe = new Stripe('YOUR_STRIPE_SECRET_KEY');

// 创建支付意图(生成令牌)接口
app.post('/create-stripe-payment-intent', async (req, res) => {
  try {
    const { amount, currency = 'usd', metadata } = req.body;
    // Stripe要求金额以最小单位(如美分)传入,所以乘以100
    const paymentIntent = await stripe.paymentIntents.create({
      amount: amount * 100,
      currency,
      metadata // 可传入订单ID、用户信息等自定义数据
    });
    res.json({ success: true, clientSecret: paymentIntent.client_secret });
  } catch (error) {
    res.status(500).json({ success: false, message: error.message });
  }
});

// Stripe webhook回调处理(验证支付状态)
app.post('/stripe-webhook', express.raw({type: 'application/json'}), async (req, res) => {
  const sig = req.headers['stripe-signature'];
  const webhookSecret = 'YOUR_STRIPE_WEBHOOK_SECRET';
  
  let event;
  try {
    event = stripe.webhooks.constructEvent(req.body, sig, webhookSecret);
  } catch (err) {
    return res.status(400).send(`Webhook Error: ${err.message}`);
  }

  // 根据事件类型处理业务
  if (event.type === 'payment_intent.succeeded') {
    const paymentIntent = event.data.object;
    // 更新订单状态为已支付,处理库存、发货通知等
    console.log('支付成功:', paymentIntent.id);
  }
  
  res.json({ received: true });
});

app.listen(3000, () => console.log('后端服务运行在3000端口'));

四、后端部署方式

  • 云平台快速部署:用Heroku、Vercel、AWS Elastic Beanstalk等平台,关联GitHub仓库即可自动部署,无需手动配置环境
  • 服务器自建部署:购买阿里云、腾讯云等云服务器,安装Node.js环境后上传代码,用PM2工具守护进程运行
  • 容器化部署:将代码打包成Docker镜像,部署到Docker容器或Kubernetes集群,适合规模化应用

五、购物车订单处理补充逻辑

  1. 前端提交支付请求前,先调用自己的后端接口创建本地订单(存储购物车商品、金额、用户信息),生成本地订单ID
  2. 后端调用支付服务商API时,将本地订单ID作为receipt(Razorpay)或metadata(Stripe)传入,便于后续关联
  3. 支付回调验证成功后,根据本地订单ID更新订单状态为已支付,同时执行库存扣减、用户积分发放等业务

你已查阅文档的中文翻译

1. pub.dev上的razorpay_flutter包文档

该文档主要介绍Flutter端的SDK集成步骤:包括依赖安装、初始化Razorpay实例、添加支付按钮、处理支付回调等,未涉及后端逻辑。

2. Razorpay官方Flutter标准集成文档的「1.6 在服务器创建订单」部分

在服务器端创建订单是强制要求的,直接在客户端生成订单会导致密钥泄露风险。你需要调用Razorpay的订单创建API,传入订单金额、货币类型、订单收据号等参数。API响应会返回订单ID,将这个ID传给Flutter客户端,客户端用它来发起支付请求。

内容的提问来源于stack exchange,提问作者X1000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:45:40