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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:23:24