You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

生产环境集成Google Pay与Stripe网关时触发Invalid token id错误

生产环境集成Google Pay与Stripe网关时触发Invalid token id错误

这种测试正常、生产出问题的情况确实挺闹心的,我帮你梳理几个最可能的原因和对应的解决办法:

  • 务必确保前后端密钥环境匹配
    测试模式用的是pk_test_/sk_test_开头的测试密钥,切换到生产环境后,前端的Stripe初始化密钥要换成pk_live_开头的生产公钥,后端处理请求也要用sk_live_开头的生产私钥。很多人容易踩这个坑:后端还在用测试密钥处理生产环境的Google Pay token,这时候Stripe会直接判定token无效——毕竟测试密钥只能处理测试环境生成的token,生产token必须对应生产密钥。

  • 检查Google Pay的前端配置是否切换到生产模式
    前端初始化Google Pay组件时,生产环境和测试环境的配置完全不同:

    • 测试模式下Google Pay返回的是测试用支付凭证,但生产环境需要配置正确的商户ID、目标国家/地区代码、允许的支付网络(比如Visa、Mastercard等,要和Stripe后台配置保持一致),而且你的域名必须已经在Google Pay商户控制台完成验证。如果前端还停留在测试配置,返回的token在Stripe生产环境下自然会被判定无效。
  • 别再用旧的tok_格式token了(重点)
    Stripe现在更推荐使用pm_开头的PaymentMethod来处理支付,尤其是Google Pay这类第三方支付方式。如果你的前端还是返回tok_xxx格式的旧token,在生产环境下很可能不被支持。正确的做法是用Stripe官方组件创建PaymentMethod:

    // 生产环境下的正确示例
    const stripe = Stripe('pk_live_你的生产公钥');
    const elements = stripe.elements();
    const googlePayElement = elements.create('googlePay', {
      countryCode: 'US', // 换成你的目标国家代码
      currency: 'usd',
      // 其他生产环境专属配置
    });
    
    // 用户发起支付时创建PaymentMethod
    const { error, paymentMethod } = await stripe.createPaymentMethod({
      type: 'card',
      card: googlePayElement,
    });
    // 把paymentMethod.id(pm_开头)传给后端使用
    
  • 验证前端传过来的token完整性
    可以在后端打印一下收到的token值,确认它是完整的tok_xxx或者pm_xxx格式,没有被截断、添加多余字符或者在传输过程中被篡改。如果token本身不完整,Stripe肯定会返回无效错误。

  • 检查Stripe生产环境的账户状态
    确保你的Stripe账户已经完成生产环境的激活流程——比如提交了商户信息、验证了银行账户、完成了必要的合规审核。未激活的生产账户无法处理真实支付请求,也会导致token验证失败。另外也要确认Google Pay已经在Stripe后台的支付方式中启用,并且配置了正确的商户ID。

备注:内容来源于stack exchange,提问作者Telexx

火山引擎 最新活动