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

TapAndPay SDK调用pushTokenize时报错‘Something went wrong, invalid argument’求助

问题:Google Pay沙箱环境下Push Tokenize报错"Invalid argument"

问题场景

  • 使用Visa In-App Provisioning获取Google Pay沙箱测试卡信息及OPC(Opaque Payment Card)
  • 将OPC对象序列化为字符串后做Base64编码,与卡片信息一起放入PushTokenizeRequest
  • 调用tapAndPayClient.pushTokenize()后,在Google Pay确认地址时触发错误:Something went wrong. Invalid argument.

相关信息

OPC对象示例

{
    "paymentAccountReference": "V1234567890124514231274459132",
    "last4": "9132",
    "expirationDate": {"month": "12", "year": "2030"},
    "encAddress": "eyJraWQiOiJiNTFkZmEyMyIsImVuYy.....",
    "opaquePaymentCard": "eyJhdWQiOiIxODk5NzZhNi0yZm......",
    "vCardID": "v-123-c1a347c1-bd85-43e3-88c2-a8070f4d1901"
}

当前Base64编码代码

String encodedResponseBody = Base64.getEncoder().encodeToString(responseBody.getBytes());

排查与解决建议

  1. 修正编码目标字段
    不要对整个OPC JSON对象做Base64编码,根据集成规范,仅需单独编码opaquePaymentCard字段的内容即可。错误编码整个对象会导致Google Pay无法解析有效参数,直接触发"Invalid argument"。

  2. 使用URL安全的Base64编码
    Google Pay接口要求使用RFC 4648标准的URL安全Base64格式,避免使用默认编码器生成的+、/字符,同时去掉末尾的=填充符。修改编码代码:

    // 仅对opaquePaymentCard字段内容编码
    String encodedOpc = Base64.getUrlEncoder().withoutPadding().encodeToString(opcObject.getOpaquePaymentCard().getBytes());
    
  3. 校验PushTokenizeRequest参数结构

    • 卡片有效期需匹配Google Pay要求的格式(如字符串"12/30"或整数类型的月份/年份)
    • encAddress字段本身是加密后的字符串,不要对其做二次编码
    • 确认paymentAccountReference、last4等字段直接传入原始字符串,未被错误编码
  4. 沙箱环境配置检查

    • 确认应用已在Google Pay开发者控制台正确配置沙箱测试权限
    • 验证Visa侧的测试卡信息与Google Pay沙箱环境完全匹配
    • 检查测试设备已加入Google Pay沙箱测试项目
  5. 开启调试日志定位细节
    过滤设备日志中GooglePay相关条目,或通过TapAndPayClient的回调获取更精确的错误参数详情,进一步定位具体的无效参数项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:38:10