總覽
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
合作夥伴可透過 Google Wallet Passes API 儲存
旋轉
條碼到 Google 錢包。這些條碼的效期只有短時間
提供額外的安全防護,降低條碼螢幕截圖的風險。
條碼是依
RFC 6238,透過提供
密鑰。不過,如果合作夥伴希望自行產生條碼,Google 會提供
提供 API,可將條碼批次上傳至 Google。這些條碼
可傳遞到使用者的程式碼的運作模式就如同旋轉條碼
顯示一小段時間我們將這項解決方案稱為「合作夥伴產生」
旋轉條碼。
合作夥伴產生的旋轉條碼 API
合作夥伴產生的旋轉條碼會使用相同的 RotatingBarcode 建立
物件。只有類型是必要項目,不過我們建議建立小型的啟動條件。
再傳送一組條碼 (價值約 10 分鐘)
initialRotatingBarcodeValues
。合作夥伴必須負責確保
一律為使用者備妥有效條碼,initialRotatingBarcodeValues
則允許
後續的批次上傳呼叫是以非同步的方式進行
rotatingBarcode {
initialRotatingBarcodeValues: object (RotatingBarcodeValues),
type: enum (BarcodeType),
}
欄位 |
說明 |
initialRotatingBarcodeValues |
object (RotatingBarcodeValues)
要在條碼中編碼的值。至少須輸入一個值。這些初始值
條碼是為了銜接使用者初次取得票證之間的空檔
系統就會傳送快訊通知
|
type |
enum (BarcodeType)
必要欄位。此條碼的類型。
可接受的值為:
|
RotatingBarcodeValues
欄位 |
說明 |
startDateTime |
string
第一個條碼的生效日期/時間。條碼會經過旋轉
使用 periodMillis 。
日期/時間採用 ISO 8601 擴充格式 (含有偏移量)。
|
values[] |
string
要在條碼中編碼的值。至少須輸入一個值。
值數量沒有上限,但請注意,要求主體的大小
不得超過 5 MB。
|
periodMillis |
number
每個條碼的有效時間長度。
|
批次更新條碼值
建立 RotatingBarcode 物件後,建議您上傳一天的
連續計算價值 100 萬元的條碼,直到使用者的票證過期為止方法是使用
連結至後端
方法:transitobject.uploadrotatingbarcodevalues
將條碼值旋轉至指定物件 ID 參照的大眾運輸物件。
HTTP 要求
POST
https://walletobjects.googleapis.com/upload/walletobjects/v1/transitObject/{resourc
eId}/uploadRotatingBarcodeValues
路徑參數
參數 |
說明 |
resourceId |
string
物件的專屬 ID。
|
要求主體
要求主體 (大小不得超過 5 MB) 包含
RotatingBarcodeValues。
方法:transitobject.downloadrotatingbarcodevalues
下載指定物件參照的大眾運輸物件條碼值
編號。如果合作夥伴想驗證最新的批次,這個方法就能派上用場。
HTTP 要求
GET
https://walletobjects.googleapis.com/walletobjects/v1/transitObject/{resourceId}/do
wnloadRotatingBarcodeValues?alt=media
路徑參數
參數 |
說明 |
resourceId |
string
物件的專屬 ID。
|
備用機制
請注意,如果其他有效的 RotatingBarcode 沒有可顯示的有效條碼 (這些
尚未上傳,或已使用所有目前條碼) 時發生錯誤
向使用者顯示的訊息
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-07-25 (世界標準時間)。
[null,null,["上次更新時間:2025-07-25 (世界標準時間)。"],[[["\u003cp\u003eGoogle Wallet now supports Partner-Generated Rotating Barcodes for enhanced security, allowing partners to generate and upload time-limited barcodes directly.\u003c/p\u003e\n"],["\u003cp\u003ePartners can integrate Rotating Barcodes using the \u003ccode\u003erotatingBarcode\u003c/code\u003e object within the Google Wallet Passes API, specifying the barcode type and initial values.\u003c/p\u003e\n"],["\u003cp\u003eThe API provides methods for batch uploading (\u003ccode\u003etransitobject.uploadrotatingbarcodevalues\u003c/code\u003e) and downloading (\u003ccode\u003etransitobject.downloadrotatingbarcodevalues\u003c/code\u003e) barcode values for ongoing updates.\u003c/p\u003e\n"],["\u003cp\u003eTo ensure continuous barcode availability, it is recommended to upload a day's worth of barcodes daily until a user's pass expires, utilizing the \u003ccode\u003einitialRotatingBarcodeValues\u003c/code\u003e for a smooth initial experience.\u003c/p\u003e\n"],["\u003cp\u003eIf a Rotating Barcode lacks valid values, an error message will be displayed to the user, highlighting the importance of timely barcode updates.\u003c/p\u003e\n"]]],["The Google Wallet Passes API enables partners to use Partner-Generated Rotating Barcodes, enhancing security by having barcodes valid for a short time. Partners can define a `RotatingBarcode` object specifying the barcode `type` and `initialRotatingBarcodeValues`. They then batch upload barcode values using the `transitobject.uploadrotatingbarcodevalues` API endpoint and should upload a day's worth of barcodes each day. Barcode values can be downloaded via `transitobject.downloadrotatingbarcodevalues` for verification. If no valid barcodes are available, an error message is shown.\n"],null,["# Overview\n\nThe Google Wallet Passes API provides the ability for partners to save\n[Rotating\nBarcodes](/wallet/tickets/transit-passes/qr-code/resources/rotating-barcodes) to the Google Wallet. These barcodes are only valid for a short period of time,\nproviding additional security to reduce the risk of barcode screenshotting. The\nbarcodes are generated on device in accordance with\n[RFC 6238](https://www.rfc-editor.org/rfc/rfc6238), with the partner providing the\nsecret key. However, if a partner would rather generate the barcodes themselves, Google provides\nan API such that barcodes can be batch uploaded to Google. These barcodes will then\nbe passed through to users' phones, where they will act just like Rotating Barcodes,\ndisplaying for a short period of time. We refer to this solution as Partner-Generated\nRotating Barcodes.\n\nPartner-Generated Rotating Barcode API\n--------------------------------------\n\nPartner-Generated Rotating Barcodes are created using the same RotatingBarcode\nobject. Only the type is required, although we also recommend creating a small, starter\nset of barcodes (\\~10 minutes worth), and sending them in\n`initialRotatingBarcodeValues`. The partner is responsible for ensuring that there is\nalways a valid barcode ready for the user, and `initialRotatingBarcodeValues` allows\nthe subsequent batch upload call to be asynchronous. \n\n```gdscript\n rotatingBarcode {\n initialRotatingBarcodeValues: object (RotatingBarcodeValues),\n type: enum (BarcodeType),\n }\n```\n\n| Field | Description |\n|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `initialRotatingBarcodeValues` | `object (`[RotatingBarcodeValues](#RotatingBarcodeValues)`)` The values to encode in the barcode. At least one value is required. These initial barcodes are meant to bridge the gap between when the user first acquires their pass, and when the subsequent batch upload call is made. |\n| `type` | `enum (`[BarcodeType](/wallet/tickets/transit-passes/qr-code/rest/v1/BarcodeType)`)` Required. The type of this barcode. Acceptable values are: - `QR_CODE` - `PDF_417` \u003cbr /\u003e |\n\nRotatingBarcodeValues\n\n| Field | Description |\n|-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `startDateTime` | `string` The date/time the first barcode is valid from. Barcodes will be rotated through using `periodMillis`. This is an ISO 8601 extended format date/time, with an offset. |\n| `values[]` | `string` The values to encode in the barcode. At least one value is required. There is no maximum number of values, but note that the size of the request body cannot exceed 5MB. |\n| `periodMillis` | `number` The amount of time each barcode is valid for. |\n\nBatch updating barcode values\n-----------------------------\n\nAfter the RotatingBarcode object has been created, we recommend uploading a day's\nworth of barcodes, every day, until the user's pass expires. This can be done with the\nfollowing REST API endpoint.\n\n### Method: transitobject.uploadrotatingbarcodevalues\n\nUploads rotating barcode values to the transit object referenced by the given object ID.\n\n#### HTTP request\n\n`POST\nhttps://walletobjects.googleapis.com/upload/walletobjects/v1/transitObject/{resourc\neId}/uploadRotatingBarcodeValues`\n\n#### Path parameters\n\n| Parameter | Description |\n|--------------|-----------------------------------------------|\n| `resourceId` | `string` The unique identifier for an object. |\n\n#### Request body\n\nThe request body (which cannot exceed 5MB) contains an instance of\n[RotatingBarcodeValues](#RotatingBarcodeValues).\n\n### Method: transitobject.downloadrotatingbarcodevalues\n\nDownloads rotating barcode values for the transit object referenced by the given object\nID. This is useful if partners want to verify the latest batch.\n\n#### HTTP request\n\n`GET\nhttps://walletobjects.googleapis.com/walletobjects/v1/transitObject/{resourceId}/do\nwnloadRotatingBarcodeValues?alt=media`\n\n#### Path parameters\n\n| Parameter | Description |\n|--------------|-----------------------------------------------|\n| `resourceId` | `string` The unique identifier for an object. |\n\nFallback mechanisms\n-------------------\n\nNote that if an otherwise-valid RotatingBarcode has no valid barcodes to display (they haven't been uploaded yet, or all the current barcodes have been used), an error message will be shown to the user."]]