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());
排查与解决建议
修正编码目标字段
不要对整个OPC JSON对象做Base64编码,根据集成规范,仅需单独编码opaquePaymentCard字段的内容即可。错误编码整个对象会导致Google Pay无法解析有效参数,直接触发"Invalid argument"。使用URL安全的Base64编码
Google Pay接口要求使用RFC 4648标准的URL安全Base64格式,避免使用默认编码器生成的+、/字符,同时去掉末尾的=填充符。修改编码代码:// 仅对opaquePaymentCard字段内容编码 String encodedOpc = Base64.getUrlEncoder().withoutPadding().encodeToString(opcObject.getOpaquePaymentCard().getBytes());校验PushTokenizeRequest参数结构
- 卡片有效期需匹配Google Pay要求的格式(如字符串
"12/30"或整数类型的月份/年份) encAddress字段本身是加密后的字符串,不要对其做二次编码- 确认
paymentAccountReference、last4等字段直接传入原始字符串,未被错误编码
- 卡片有效期需匹配Google Pay要求的格式(如字符串
沙箱环境配置检查
- 确认应用已在Google Pay开发者控制台正确配置沙箱测试权限
- 验证Visa侧的测试卡信息与Google Pay沙箱环境完全匹配
- 检查测试设备已加入Google Pay沙箱测试项目
开启调试日志定位细节
过滤设备日志中GooglePay相关条目,或通过TapAndPayClient的回调获取更精确的错误参数详情,进一步定位具体的无效参数项
内容的提问来源于stack exchange,提问作者imad ahddad
相关产品推荐
相关产品推荐

