簡介
旋轉條碼看起來與一般條碼相似,但通常會每分鐘變更一次,而終端機/讀取器經過設計後只會接受最新的條碼。這項安全措施可降低與條碼螢幕截圖有關的風險,尤其是竊盜票或未經授權的票券轉售。如果裝置不支援 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
- 請注意,使用者只要點選「顯示程式碼」就能覆寫這項設定,強制顯示旋轉的條碼/靜態條碼。
- 輪替條碼:如果指定了輪替的條碼酬載
- 靜態條碼:如果已指定條碼酬載
指定多個兌換酬載可確保系統支援所有使用者,但這可能會帶來安全性影響。具體來說,使用靜態條碼做為旋轉條碼的備用方案,將大幅降低使用輪替條碼的好處,只有網頁檢視畫面或不支援旋轉條碼的用戶端,才會顯示靜態條碼備用項。從今天起,我們希望所有 Google 錢包用戶端都支援輪替條碼。
儲存流程
Google Wallet API 提供以下幾種流程:
- 節省時間或預先建立大眾運輸類別
- 傳送 JWT 中完整的物件,或是預先儲存物件,然後在 JWT 中依 ID 參照這些物件
- 在儲存物件後更新物件
建議的 rotatingBarcode 欄位與這些流程相容,但為了提高安全性,建議您採取下列做法:
-
呼叫
object:insert
API,將票證插入 Google 錢包伺服器並設定「新增至 Google 錢包」按鈕,以便在 JWT 中依據 ID 參照特定物件。這樣可以確保產生的 JWT 不含輪替條碼的密鑰。 - 使用限定為單次票證的動態密碼密鑰
- 金鑰除非更新,否則應在票證的生命週期內有效。我們預計在正常作業期間,這個金鑰應該不會收到任何頻率更新。
下圖說明典型整合作業的各執行者之間的流程:
