票證類別和物件總覽

您開放使用者在 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 錢包,請建立 JSON Web Token (JWT),當中包含你 (發卡機構) 針對票證物件執行個體產生的憑證資訊,該物件的相關資訊會儲存於使用者的 Google 錢包中。最重要的是,你傳送給使用者的票證物件執行個體物件 ID。然後,JWT 會透過「新增至 Google 錢包」按鈕或「新增至 Google 錢包」連結傳送給使用者。

使用者點選按鈕或連結,將核發的票證新增至 Google 錢包後,在 JWT 中編碼的票證物件執行個體也會連結至該使用者的 Google 帳戶。這表示當使用者再次點選該按鈕時,系統已有該票證物件的連結,因此重複的票證不會新增至使用者的錢包。

如果使用者從 Google 錢包應用程式中移除票證,對應的票證物件執行個體會自動與使用者取消連結,但不會刪除。也就是說,使用者可以再次按一下「新增至 Google 錢包」按鈕或連結來儲存票證,不必建立新的票證物件或 JWT。