輪替條碼

簡介

輪替條碼看起來與一般條碼類似,但會定期變更,且通常每分鐘變更,且終端機/讀取工具程式會設定為只接受最新的條碼。這項安全措施可降低與條碼螢幕截圖相關的風險,尤其是竊取票券或未經授權的票券轉售。旋轉條碼也可做為不支援 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
    • 請注意,使用者可以按一下「Show code」(顯示程式碼) 來覆寫這項設定,系統就會強制顯示旋轉的條碼/靜態條碼。
  2. 輪替條碼:如果指定輪替條碼酬載
  3. 靜態條碼:如果已指定條碼酬載

指定多個兌換酬載可以確保所有使用者都能獲得支援,但可能會影響安全性。具體來說,使用靜態條碼做為旋轉條碼的備用方案,可以消除使用旋轉條碼帶來的大部分安全性優勢。靜態條碼備用資訊只會顯示在網頁檢視畫面或不支援旋轉條碼的用戶端中。截至今日,我們期望所有 Google 錢包用戶端都支援旋轉條碼。

儲存流程

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

  • 節省時間或預先建立大眾運輸類別
  • 在 JWT 中傳送完整物件,或是事先儲存物件,然後在 JWT 中依 ID 參照物件
  • 更新儲存的物件

建議的旋轉條碼欄位與所有這些流程相容,但為提高安全性,建議您採取下列做法:

  • 呼叫 object:insert API 將票證插入 Google 錢包伺服器,並設定「新增至 Google 錢包」按鈕,依 JWT 中的 ID 參照特定物件。這樣可確保產生的 JWT 不含輪替條碼的密鑰。
  • 使用範圍限定為單次票證的動態密碼密鑰
  • 除非更新金鑰,否則在票證的效期內都會有效。在正常作業期間,我們並預期此金鑰不會更新到任何頻率。

以下序列圖表說明各種發動者之間進行一般整合的流程:

使用旋轉條碼的序列圖