如何在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:必填,货币代码,印度卢比固定填INRtn:可选,付款备注,比如“订单编号:20240501001”
从数据库取出对应的UPI字段后,直接按上面的格式拼接成字符串就行。如果要让用户自定义付款金额,就在生成链接时动态替换am的值。
2. Flutter端生成付款二维码
用Flutter的第三方包qr_flutter就能快速生成二维码,步骤很简单:
操作步骤:
- 在
pubspec.yaml里加依赖:
dependencies: qr_flutter: ^4.1.0
- 导入包并在页面中渲染二维码:
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
相关产品推荐
相关产品推荐

