简介
轮播条形码看起来和常规条形码类似,但会定期更改, 通常每分钟发送一次,并且终端/读卡器只接受接收, 最新的一个。此安全措施可降低与条形码屏幕截图相关的风险,尤其是票券盗窃或未经授权的票券转售。旋转条形码也可以作为一种替代方法,供无法 由于不支持 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" } ] } } } |
回退机制
在用户设备上,给定时间内仅使用一种兑换机制, 具体取决于卡券的配置方式以及设备的功能。 系统会按以下优先级顺序使用兑换类型:
-
智能触碰:如果指定了智能触碰负载,并且设备支持
NFC/HCE
<ph type="x-smartling-placeholder">
- </ph>
- 请注意,用户可以通过点击“显示代码”来覆盖此设置,这将强制显示旋转条形码/静态条形码。
- 轮播条形码:如果指定了轮替条形码有效负载
- 静态条形码:如果指定了条形码载荷
指定多个兑换载荷可以确保支持所有用户,但可能会产生安全影响。具体而言,将静态条形码用作旋转条形码的后备会使使用旋转条形码带来的大部分安全优势化为乌有。静态条形码后备只会显示在网页视图中 或在不支持旋转条形码的客户端上。截至今天,我们预计 所有 Google 电子钱包客户端都支持轮播条形码。
保存流程
Google Wallet API 提供了多种流程,包括:
- 在节省时间时或提前创建礼品卡类
- 在 JWT 中发送完整对象,或预先保存对象,然后在 JWT 中按 ID 引用它们
- 更新已保存的对象
提议的 rotationBarcode 字段与所有这些流兼容, 不过,为了提高安全性,我们建议:
-
调用
object:insert
API 将卡券插入 Google 钱包服务器,并配置“添加到 Google 钱包”按钮,以便按 JWT 中的 ID 引用特定对象。这样可以确保 生成的 JWT 不包含轮替条形码的密钥。 - 使用范围限定为单次通行密钥的 OTP 密钥
- 除非更新,否则该密钥应在卡券的生命周期内有效。我们预计此密钥在正常运行期间不会以任何频率更新。
以下序列图说明了不同操作者之间的流程 对于典型集成:
