Flutter中pay包实现Google Pay真机Debug不显示问题排查及测试
Flutter Google Pay 真机不显示按钮问题排查方案
一、可能的原因
- Google Play Services版本不足:Google Pay依赖最新版Google Play Services,真机版本过低会导致按钮无法加载
- 设备/账号区域不匹配:设备系统区域需设置为Google Pay支持的地区(如美国、英国),且需登录对应地区的Google账号
- 支付配置参数错误:
testEnv未设为true、countryCode/currencyCode与设备区域不匹配,或网关配置不符合测试要求 - 未安装Google Pay应用:部分设备需单独安装Google Pay应用才能触发按钮显示
- Release模式签名问题:Release包的签名SHA-1未添加到Google Pay开发者控制台,导致验证失败
二、测试方法
- 检查Google Play Services版本:进入设备「设置-应用-Google Play Services」查看版本,若过低则更新至最新版
- 验证区域与账号:将设备系统区域切换至支持的地区(如美国),登录对应地区的Google账号,并确保账号已绑定测试卡
- 核对配置代码:确认
testEnv设为true,countryCode、currencyCode与设备区域一致,测试网关参数正确 - 多模式测试:先在真机Debug模式下测试,排除Release签名问题;若为Release模式,检查签名证书的SHA-1是否已添加到Google Pay控制台
- 查看日志:通过
adb logcat | grep GooglePay过滤日志,查找按钮不显示的具体错误信息
三、Google Pay测试卡获取途径
Google官方提供了专用测试卡,无需真实银行卡,添加到Google Pay账号即可用于测试,常用卡片信息:
- 卡号:
4111 1111 1111 1111,有效期:任意未来日期,CVV:123 - 卡号:
4242 4242 4242 4242,有效期:任意未来日期,CVV:123 - 卡号:
4000 0566 5566 5556,有效期:任意未来日期,CVV:123
四、核心配置代码示例
import 'package:pay/pay.dart'; // 支付商品信息 const _paymentItems = [ PaymentItem( label: '订单总额', amount: '10.00', status: PaymentItemStatus.final_price, ) ]; // Google Pay 测试配置 final _googlePayTestConfig = { 'provider': 'google_pay', 'data': { 'apiVersion': 2, 'apiVersionMinor': 0, 'allowedPaymentMethods': [ { 'type': 'CARD', 'parameters': { 'allowedAuthMethods': ['PAN_ONLY', 'CRYPTOGRAM_3DS'], 'allowedCardNetworks': ['MASTERCARD', 'VISA'], }, 'tokenizationSpecification': { 'type': 'PAYMENT_GATEWAY', 'parameters': { 'gateway': 'example', // 测试网关标识,实际替换为你的支付网关 'gatewayMerchantId': 'test_merchant_id', // 测试商户ID }, }, } ], 'merchantInfo': { 'merchantId': '12345678901234567890', // 测试商户ID,可从Google Pay控制台获取 'merchantName': '测试商户', }, 'transactionInfo': { 'totalPriceStatus': 'FINAL', 'totalPrice': '10.00', 'currencyCode': 'USD', // 需与设备区域匹配 'countryCode': 'US', // 需与设备区域匹配 }, 'testEnv': true, // 必须开启测试环境,否则真机测试不显示按钮 } }; class GooglePayButton extends StatelessWidget { @override Widget build(BuildContext context) { return PayButton( paymentConfiguration: PaymentConfiguration.fromJsonString(_googlePayTestConfig), paymentItems: _paymentItems, onPaymentResult: (Map<String, dynamic> result) { // 处理支付回调结果 print('支付结果:$result'); }, width: double.infinity, height: 50, style: PayButtonStyle.gold, type: PayButtonType.pay, ); } }
内容的提问来源于stack exchange,提问作者kushal
相关产品推荐
相关产品推荐

