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

Flutter中pay:^1.1.0包的Google Pay真机不显示问题排查与测试

Flutter Google Pay 真机不显示问题解决方案

问题概述

使用pay: ^1.1.0包在Flutter应用中集成Google Pay国际支付,调试模式下模拟器能正常显示“使用Google支付”按钮,但真机中无法显示。用户身处尼泊尔(当地不支持Google Pay),尝试通过VPN切换地区未解决问题。

相关代码片段

String os = Platform.operatingSystem;

const Center(
    child: Text(
  "or Pay with ",
  style: TextStyle(
    fontSize: CgFontSize.headerThree,
    color: CgColor.ghostWhite,
  ),
)),
Center(
  child: Row(
    mainAxisAlignment: MainAxisAlignment.center,
    children: [
      Platform.isIOS
          ? ApplePayButton(
              paymentConfiguration:
                  PaymentConfiguration.fromJsonString(
                      defaultApplePay),
              paymentItems: _paymentItems,
              style: ApplePayButtonStyle.black,
              type: ApplePayButtonType.buy,
              margin: const EdgeInsets.only(top: 15.0),
              onPaymentResult: ((result) {
                debugPrint("Payment Result $result");
                log(result.toString());
                BaseRequest().applePay(
                  packageId: "",
                  amount: "",
                  paymentMethod: "",
                  token: "",
                );
              }),
              loadingIndicator: const Center(
                child: LoadingProgressIndicator(),
              ),
            )
          : GooglePayButton(
              paymentConfiguration:
                  PaymentConfiguration.fromJsonString(
                      defaultGooglePay),
              paymentItems: _paymentItems,
              type: GooglePayButtonType.pay,
              margin: const EdgeInsets.only(top: 15.0),
              onPaymentResult: ((result) {
                debugPrint("Payment Result $result");
                log(result.toString());
                BaseRequest().goglePay(
                    packageId: "",
                    amount: "",
                    paymentMethod: "",
                    token: "",
                    productId: "");
              }),
              loadingIndicator: const Center(
                child: LoadingProgressIndicator(),
              ),
            ),
    ],
  ),
),

核心原因

  1. 多维度地区校验:Google Pay的支持判定不仅看网络位置,还会校验Google账号注册地区、设备系统区域设置、SIM卡归属地。仅VPN无法修改这些本地配置,因此仍会被判定为不支持地区。
  2. 真机与模拟器环境差异:模拟器为测试优化,不会严格校验地区支持性;真机的Google Pay服务会读取设备真实配置,不符合条件则隐藏按钮。
  3. pay包自动隐藏逻辑:GooglePayButton组件内置环境检测,当不符合Google Pay支持条件时会自动隐藏按钮。

有效测试方法

  • 修改设备系统配置:将设备系统区域设置为Google Pay支持地区(如美国、英国),语言切换为对应地区语言,重启设备生效。
  • 更换支持地区的Google账号:登录注册地区为支持区域的Google账号,并完成Google Pay服务绑定。
  • 移除本地SIM卡:取出尼泊尔归属的SIM卡,避免被检测到地区信息;条件允许可使用支持地区的虚拟SIM。
  • 启用测试环境:在defaultGooglePay配置中添加"environment": "TEST",强制进入测试模式,绕过地区校验:
    {
      "apiVersion": 2,
      "apiVersionMinor": 0,
      "allowedPaymentMethods": [
        {
          "type": "CARD",
          "parameters": {
            "allowedAuthMethods": ["PAN_ONLY", "CRYPTOGRAM_3DS"],
            "allowedCardNetworks": ["AMEX", "DISCOVER", "MASTERCARD", "VISA"]
          },
          "tokenizationSpecification": {
            "type": "PAYMENT_GATEWAY",
            "parameters": {
              "gateway": "your-gateway",
              "gatewayMerchantId": "your-merchant-id"
            }
          }
        }
      ],
      "merchantInfo": {
        "merchantId": "your-test-merchant-id",
        "merchantName": "Test Merchant"
      },
      "environment": "TEST"
    }
    

Google Pay测试卡获取

官方提供的测试卡号,仅用于测试环境,无真实交易:

  • Visa:4111 1111 1111 1111,有效期填未来日期(如12/30),CVV123
  • Mastercard:5555 5555 5555 4444,有效期12/30,CVV123
  • Amex:3782 8224 6310 005,有效期12/30,CVV1234

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:26:09