票證類別和物件總覽

讓使用者儲存至 Google 錢包的票證幾乎全都是由「票證類別」和「票證物件」這兩個元件定義。每次向使用者核發票證時,您都必須同時擁有票證類別和票證物件的例項,用於向 Google Wallet API 說明要建立哪種類型的票證,以及要顯示在票證上的詳細資料,例如禮物卡值或票券持有人的姓名。

Google Wallet API 提供了一組預先定義的票證類別和票證物件,可讓您建立這些例項,然後用來建立核發給使用者的票證,例如 GiftCardClassGiftCardObjectGenericClassGenericObject 等。

每個票證類別和票證物件執行個體都定義為 JSON 物件,其中包含一組必要屬性和選用屬性,對應到該票證類型的特定用途。

票證類別

您可以將「票證類別」當成共用範本,用於建立要向使用者發布的一或多張票證。票證類別可定義一組通用屬性,這些屬性會包含在參照該票證的所有票證中。

舉例來說,下列 EventTicketClass 執行個體定義了即將發生的活動(地點、活動名稱、核發機構、日期/時間) 所有核發票券通用的欄位。

{
  "id": "ISSUER_ID.EVENT_CLASS_ID",
  "issuerName": "[TEST ONLY] Heraldic Event",
  "localizedIssuerName": {
    "defaultValue": {
      "language": "en-US",
      "value": "[TEST ONLY] Heraldic Event"
    }
  },
  "eventName": {
    "defaultValue": {
      "language": "en-US",
      "value": "Google Live"
    }
  },
  "venue": {
    "name": {
      "defaultValue": {
        "language": "en-US",
        "value": "Shoreline Amphitheater"
      }
    },
    "address": {
      "defaultValue": {
        "language": "en-US",
        "value": "ADDRESS_OF_THE_VENUE"
      }
    }
  },
  "dateTime": {
    "start": "2023-04-12T11:30"
  },
  "reviewStatus": "UNDER_REVIEW"
}
  

票證類別的每個例項都需要指定的 id 屬性。這個類別 ID 是一組專屬 ID,每次使用這組 ID 建立新的票證物件例項時,都可以參照這組 ID。

傳票物件

票證類別的例項可以指定用於一或多張票證的共用屬性,票證物件也能指定核發給特定使用者的特定票證專屬詳細資料。

舉例來說,如果您透過 Google Wallet API 建立活動票券票證,EventTicketObject 執行個體會包含指派給該票券的座位屬性,因為核發的每張票券都會有專屬的值。

{
  "id": "ISSUER_ID.OBJECT_ID",
  "classId": "ISSUER_ID.EVENT_CLASS_ID",
  "state": "ACTIVE",
  "seatInfo": {
    "seat": {
      "defaultValue": {
        "language": "en-us",
        "value": "9"
      }
    },
    "row": {
      "defaultValue": {
        "language": "en-us",
        "value": "L"
      }
    },
    "section": {
      "defaultValue": {
        "language": "en-us",
        "value": "45"
      }
    },
    "gate": {
      "defaultValue": {
        "language": "en-us",
        "value": "7C"
      }
    }
  },
  "barcode": {
    "type": "BARCODE_TYPE_UNSPECIFIED",
    "value": "BARCODE_VALUE",
    "alternateText": ""
  }
}
  

票證物件的每個例項都具備指定的 id 屬性。這個物件 ID 是一組不重複的 ID,可在向使用者核發票證時參照。

票證類別如何與票證物件搭配運作

票證物件必須參照票證類別 ID,或加入完整的票證類別定義,藉此擴充票證類別的例項。票證類別和票證物件執行個體之間的關聯意味著,您可以針對透過票證類別執行個體核發的所有票證,設定及更新通用的屬性,以及票證物件執行個體中個別票證的專屬屬性。

舉例來說,下圖中的簡易活動票證圖表展示了在共用 EventTicketClass 中定義的欄位,以及在 EventTicketObject 中定義的特定票證欄位組合,以建構最終發出的票證。請注意,票證物件的 classId 屬性如何參照票證類別 ID。

對票證類別執行個體所做的變更會立即套用到參照該類別的所有票證物件執行個體。使用者下次同步處理票證時,就會在他們的 Google 錢包應用程式中看到您對票證類別執行個體所做的任何變更。

將使用者的票證新增至 Google 錢包

如要將票證新增至使用者的 Google 錢包,請建立 JSON Web Token (JWT),其中包含您 (核發者) 所建立票證物件例項的聲明資訊,這些執行個體將儲存在使用者的 Google 錢包中。最重要的是,您要核發給使用者的票證物件執行個體物件 ID。接著,系統會透過「新增至 Google 錢包」按鈕或「新增至 Google 錢包」連結,將 JWT 傳遞給使用者。

使用者點選按鈕或連結將核發的票證新增至 Google 錢包後,系統會將透過 JWT 編碼的票證物件例項連結至該使用者的 Google 帳戶。也就是說,當使用者再次點選該按鈕,票證物件中就會有一個連結,因此重複的副本不會新增至使用者的錢包。

如果使用者從 Google 錢包應用程式中移除票證,對應的票證物件例項不會遭到刪除,但不會刪除。也就是說,使用者可以再次點選「新增至 Google 錢包」按鈕或連結,這樣就能儲存票證,而無須建立新的票證物件執行個體或 JWT。