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

如何在Flutter应用中生成基于UPI信息的支付二维码?

实现方案

1. 先搞懂UPI付款链接的标准格式

二维码的本质就是编码后的UPI付款链接,所以第一步要把你存在数据库里的UPI信息拼成符合规范的URI。UPI通用格式是这样的:

upi://pay?pa=收款方UPI_ID&pn=收款方名称&am=付款金额&cu=INR&tn=付款备注(可选)

关键参数解释:

  • pa:必填,就是你收集到的收款方UPI账号(比如xxx@ybl)
  • pn:必填,收款方的名称
  • am:必填,付款金额(支持小数点,比如150.75)
  • cu:必填,货币代码,印度卢比固定填INR
  • tn:可选,付款备注,比如“订单编号:20240501001”

从数据库取出对应的UPI字段后,直接按上面的格式拼接成字符串就行。如果要让用户自定义付款金额,就在生成链接时动态替换am的值。

2. Flutter端生成付款二维码

用Flutter的第三方包qr_flutter就能快速生成二维码,步骤很简单:

操作步骤:

  1. 在pubspec.yaml里加依赖:
dependencies:
  qr_flutter: ^4.1.0
  1. 导入包并在页面中渲染二维码:
import 'package:qr_flutter/qr_flutter.dart';

// 从数据库拉取UPI信息,拼接成付款链接
String upiLink = 'upi://pay?pa=shop@paytm&pn=My Store&am=300.00&cu=INR';

// 把二维码放到页面里
QrImageView(
  data: upiLink,
  version: QrVersions.auto,
  size: 220.0,
  backgroundColor: Colors.white,
  foregroundColor: Colors.black,
)

如果需要把二维码保存成图片,用QrPainter绘制后转成文件就行,比如:

final painter = QrPainter(
  data: upiLink,
  version: QrVersions.auto,
  color: Colors.black,
  emptyColor: Colors.white,
);
final image = await painter.toImage(300);
// 之后把image转成png/jpg文件保存

3. 管理端展示二维码

分两种情况处理:

  • 如果管理端也是Flutter应用:直接复用上面的QrImageView组件,从数据库拿到对应商家的UPI链接传进去就好。
  • 如果管理端是Web/后端系统:
    • Web端:用JS的二维码生成库,把UPI链接丢进去就能生成二维码。
    • 后端:用服务器端工具生成二维码图片(比如Python的qrcode库),生成后返回图片给管理端展示,或者直接返回UPI链接让前端自己生成。

4. 数据库存储的注意事项

  • 要存的核心字段:upi_id(对应pa参数)、merchant_name(对应pn参数),如果有固定收款金额可以加个default_amount字段。
  • 金额建议用Decimal类型存储,避免浮点数精度问题。
  • 如果UPI信息涉及敏感内容,记得加密存储。

额外优化建议

  • 生成链接后可以做个校验:用UPI应用扫一下测试能不能正常唤起付款。
  • 支持动态金额:让用户在扫码前输入金额,实时更新UPI链接和二维码。
  • 加个提示文字:在二维码下方说明“使用Google Pay/Paytm等UPI应用扫码付款”。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:29:51