Google Wallet自定义Smart Tap通用凭证无法读取正确Payload求助
解决Google Wallet自定义通用凭证Smart Tap无法读取Payload的问题
问题背景
我正在集成Google Wallet API和Android SDK,生成启用Smart Tap的通用凭证,目标是通过另一部手机读取凭证并解密Payload。目前已完成以下前置工作:
- 可正常运行官方Smart Tap示例项目,能读取Google提供的NFC演示凭证和第三方生成的随机NFC凭证
- 自定义凭证已通过API设置
smartTapRedemptionValue字段,API查询确认该字段存在(凭证对象JSON如下) - 已将Wallet控制台的CollectorID转换为字节使用,且IssuerID已添加至
redemptionIssuers - 尝试上传第三方生成的公钥至Wallet控制台,但问题仍未解决
- 凭证当前处于Demo Mode,希望在申请发布前验证功能
凭证对象JSON:
{ "cardTitle": { "defaultValue": { "kind": "walletobjects#translatedString", "language": "it", "value": "$TITLE" }, "kind": "walletobjects#localizedString" }, "classId": "$ISSUER_ID.$CLASS_NAME", "genericType": "genericTypeUnspecified", "hasUsers": true, "header": { "defaultValue": { "kind": "walletobjects#translatedString", "language": "it", "value": "$HEADER" }, "kind": "walletobjects#localizedString" }, "hexBackgroundColor": "#ffffff", "id": "$ISSUER_ID.newPassObject3", "smartTapRedemptionValue": "if_you_read_this_it's_great!", "state": "active", "subheader": { "defaultValue": { "kind": "walletobjects#translatedString", "language": "it", "value": "$SUBHEADER" }, "kind": "walletobjects#localizedString" } }
核心问题:自定义凭证的smartTapRedemptionValue未写入NFC标签,导致无法通过Smart Tap读取正确Payload。
解决思路
1. 验证Demo Mode的限制
Google Wallet的Demo Mode可能会限制NFC相关功能(官方文档未明确说明但实际存在限制)。尝试关闭凭证类的Demo Mode,重新生成凭证对象后测试:
- 进入Wallet控制台,找到对应的凭证类
- 关闭「Demo Mode」选项,保存后重新调用API生成凭证
2. 检查凭证类的Smart Tap配置
确保凭证类(Class)的Smart Tap配置完全正确:
- 确认类的
enableSmartTap字段设为true(API创建类时需手动设置,控制台创建默认启用,建议通过API查询验证) redemptionIssuers必须是包含你的IssuerID的字符串数组(例如["1234567890"])- 若涉及商户ID,确认
smartTapMerchantId配置正确(通用凭证通常不需要,但需排查)
3. 确认公钥配置的正确性
上传至Wallet控制台的公钥需严格符合要求:
- 必须是PEM格式的RSA公钥(推荐PKCS#8格式),确保包含完整的头部和尾部标识(
-----BEGIN PUBLIC KEY-----/-----END PUBLIC KEY-----) - 公钥需与你使用的私钥完全匹配,无格式错误(如多余换行、字符缺失)
- 公钥需关联到对应的凭证类,而非仅上传到控制台全局设置
4. 完善凭证对象的字段
检查凭证对象的必填字段是否完整且有效:
- 替换所有占位符(如
$TITLE、$HEADER)为实际字符串(API允许占位符,但NFC写入可能需要实际值) - 确认
state字段为active,classId正确关联已启用Smart Tap的凭证类
5. 排查NFC标签数据
- 使用Google Wallet API Explorer重新生成凭证,调用
get接口查看返回的凭证数据中,smartTapRedemptionValue是否被正确标记为可用于NFC - 使用NFC调试工具读取自定义凭证的NFC标签,对比第三方生成的标签数据,检查是否缺失Smart Tap相关的TLV数据段
6. 调整示例项目的配置
- 确认示例项目中使用的CollectorID与Wallet控制台的ID完全一致,字节转换时注意端序(Big-Endian)
- 查看示例项目的日志输出,检查是否存在解密失败的错误信息,针对性调整解密逻辑
内容的提问来源于stack exchange,提问作者N Dorigatti
相关产品推荐
相关产品推荐

