轮换条形码

简介

轮播条形码看起来和常规条形码类似,但会定期更改, 通常每分钟发送一次,并且终端/读卡器只接受接收 最新的一个。这项安全措施可降低 条形码截图,特别是门票盗窃或未经授权的门票 转售。旋转条形码也可以作为一种替代方法,供无法 由于不支持 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 <ph type="x-smartling-placeholder">
      </ph>
    • 请注意,用户可以通过点击“显示代码”来覆盖此设置, 会强制显示旋转的条形码/静态条形码。
  2. 轮换条形码:如果指定了轮换的条形码有效负载
  3. 静态条形码:如果指定了条形码载荷

指定多个兑换载荷可确保所有用户均受支持,但 可能存在安全隐患具体来说,将静态条形码用作 轮换条形码的替代功能会抵消使用 旋转条形码。静态条形码后备仅在网页视图中显示 或在不支持旋转条形码的客户端上。截至今天,我们预计 所有 Google 电子钱包客户端都支持旋转条形码。

保存流

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

  • 及时或提前创建公交课程
  • 发送 JWT 中的完整对象,或先保存对象, 然后在 JWT 中按 ID 引用它们
  • 在保存对象后对其进行更新

提议的 rotationBarcode 字段与所有这些流兼容, 不过,为了提高安全性,我们建议:

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

以下序列图展示了不同操作者之间的流程 对于典型集成:

使用旋转条形码的序列图