Flutter中upi_payment_qrcode_generator生成的PhonePe UPI二维码无法识别
解决PhonePe无法识别upi_payment_qrcode_generator生成的二维码问题
可能的原因与解决方案
1. 验证插件生成的UPI URI格式
PhonePe对UPI URI的格式要求比其他APP更严格,先确认插件生成的URI是否符合规范:
- 查看插件源码中的URI生成逻辑,或临时添加代码打印出生成的原始URI字符串。
- 手动构造标准UPI URI进行对比测试:
用通用二维码生成工具(如String standardUpiUri = 'upi://pay?pa=73975XXXXX@ybl&pn=Mr%20John&am=10.00&tn=Testing';qr_flutter插件)生成该URI的二维码,若PhonePe能识别,说明插件生成的URI存在格式问题。
2. 调整收款人名称的格式
PhonePe可能不支持收款人名称中的空格或未编码的特殊字符,尝试:
- 将
payeeName改为无空格的字符串,比如MrJohn - 或者传入URL编码后的名称,比如
Mr%20John
修改后的代码示例:UPIDetails upiDetails = UPIDetails( upiID: '73975XXXXX@ybl', payeeName: 'Mr%20John', amount: 10.00, transactionNote: "Testing", );
3. 确认金额字段的格式
确保金额被生成为标准的两位小数格式,部分应用会拒绝识别整数形式的金额(如10而非10.00)。可以手动确认插件生成的am参数值是否为10.00。
4. 添加PhonePe要求的额外字段
部分场景下PhonePe需要特定字段支持,比如mc(商户代码),即使是个人收款也可尝试添加默认值:
// 若插件支持自定义参数,添加mc字段 UPIDetails upiDetails = UPIDetails( upiID: '73975XXXXX@ybl', payeeName: 'Mr John', amount: 10.00, transactionNote: "Testing", customParams: {'mc': '0000'}, // 填入默认商户代码或你的实际商户代码 );
5. 改用通用二维码插件生成
如果以上方法无效,可绕过upi_payment_qrcode_generator,手动构造UPI URI后用通用二维码插件生成:
import 'package:qr_flutter/qr_flutter.dart'; String upiUri = 'upi://pay?pa=73975XXXXX@ybl&pn=Mr%20John&am=10.00&tn=Testing'; @override Widget build(BuildContext context) { return Center( child: QrImageView( data: upiUri, size: 170, errorCorrectionLevel: QrErrorCorrectLevel.H, ), ); }
内容的提问来源于stack exchange,提问作者Venkat Pandi
相关产品推荐
相关产品推荐

