轮换条形码

简介

轮替条形码看起来和常规条形码一样,但定期更改,通常每分钟更改一次,而终端/读取器已编程为仅接受最新的条形码。这项安全措施能够降低与条形码屏幕截图(尤其是门票被盗或未经授权的门票转销)相关的风险。对于因不支持 NFC(缺少硬件或软件被停用)而无法使用智能触碰功能的设备,轮替条形码还可以作为后备选项。

API 参考文档

如需了解有关轮替条形码的技术详情,请参阅 RotatingBarcode 类型

示例载荷

JSON
{
  "rotatingBarcode": {
    "type": "QR_CODE",
    "valuePattern": "MyRotatingBarcode-{totp_timestamp_seconds}-{totp_value_0}",
    "alternateText": "Ticket#: 1234567890",
    "totpDetails": {
      "algorithm": "TOTP_SHA1",
      "periodMillis": "3000",
      "parameters": [
        {
          "key": "3132333435363738393031323334353637383930",
          "valueLength": "8"
        }
      ]
    }
  }
}

回退机制

在用户设备上,每次只会使用一种兑换机制,具体取决于卡券的配置方式和设备功能。 按照优先顺序,使用的兑换类型如下:

  1. 智能触碰:如果已指定智能触碰载荷且设备支持 NFC/HCE
    • 请注意,用户可以通过点击“显示代码”覆盖此设置,这将强制显示旋转的条形码/静态条形码。
  2. 旋转条形码:如果指定了旋转的条形码载荷
  3. 静态条形码:如果已指定条形码载荷

指定多个兑换载荷可以确保所有用户均受支持,但这可能会带来安全隐患。特别是,使用静态条形码作为轮替条形码的后备方案,会失去使用轮替条形码的大部分安全优势。静态条形码回退将仅在网页视图或不支持轮替条形码的客户端中显示。从今天起,我们预计所有 Google 钱包客户端都支持轮替条形码。

保存流程

Google Wallet API 提供了多个流程,包括:

  • 在节省时间或提前创建优惠类
  • 发送 JWT 中的完整对象,或提前保存对象,然后在 JWT 中按 ID 引用它们
  • 在保存对象后对其进行更新

所提议的 rotationBarcode 字段与所有这些流程都兼容,但为了提高安全性,我们建议采取以下措施:

  • 调用 object:insert API 将卡券插入 Google 钱包服务器,并将“添加到 Google 钱包”按钮配置为按 JWT 中的 ID 引用特定对象。这样可确保生成的 JWT 不包含轮替条形码的密钥。
  • 使用范围限定为单次卡券的动态密码密钥
  • 除非更新,否则密钥应在卡券的生命周期内有效。我们预计该密钥在正常操作过程中不会以任何频率更新。

以下序列图说明了典型集成的各个操作者之间的流程:

使用轮替条形码的序列图