您可以为最终用户签发几乎所有卡券,以便他们将其保存在 Google 钱包中。这些卡券由两个组件定义:卡券类和卡券对象。每当您向用户发放卡券时,都需要同时提供 Passes 类和 Passes 对象的实例,以便告知 Google Wallet API 要构建的卡券类型,以及要在卡券上显示的详细信息,例如礼品卡的价值或持票人的姓名。
Google Wallet API 提供了一组预定义的卡券类和卡券对象,您可以创建这些类和对象的实例,然后使用这些实例来创建向用户发放的卡券,例如 GiftCardClass 和 GiftCardObject、GenericClass 和 GenericObject 等。
每个卡券类和卡券对象实例都定义为 JSON 对象,其中包含一组必需属性和可选属性,这些属性与相应卡券类型的预期特定使用情形相对应。
卡券类别
您可以将卡券类视为一个共享模板,用于创建您将向用户发放的一张或多张卡券。Passes 类定义了一组通用属性,所有引用它的 pass 中都会包含这些属性。
例如,以下 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 充当唯一标识符,每当您使用它来创建新的卡券对象实例时,都会引用该标识符。
通行卡对象
卡券类的实例用于指定一组要在多张卡券中使用的共享属性,而卡券对象用于指定向特定用户发放的特定卡券的唯一详细信息。
例如,当使用 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 或包含完整的卡券类定义来扩展卡券类的实例。卡券类与卡券对象实例之间的这种关系意味着,您可以通过卡券类实例设置和更新所有已发行卡券共有的属性,也可以在卡券对象实例中设置和更新单个卡券特有的属性。
例如,以下简单的活动门票卡券图表展示了共享 EventTicketClass 中定义的字段和 EventTicketObject 中定义的特定门票字段如何组合起来,以构建最终发放的卡券。请注意,卡券类的 ID 是如何在卡券对象的 classId 属性中引用的。
对 Passes Class 实例所做的更改会立即传播到引用该实例的所有 Passes Object 实例。用户下次同步时,会在 Google 钱包应用中的卡券上看到您对卡券类实例所做的任何更改。
向用户的 Google 钱包添加卡券
如需将卡券添加到用户的 Google 钱包,您需要创建一个 JSON Web 令牌 (JWT),其中包含您(发行方)针对将保存在用户 Google 钱包中的卡券对象实例提出的声明,最重要的是您向用户发行的卡券对象实例的对象 ID。然后,通过添加到 Google 钱包按钮或添加到 Google 钱包链接将 JWT 交付给用户。
用户点击用于将已签发的卡券添加到其 Google 钱包的按钮或链接后,JWT 中编码的卡券对象实例的链接会与该用户的 Google 账号相关联。这意味着,当用户再次点击该按钮时,系统会发现该卡券对象已存在链接,因此不会向用户的钱包添加重复的副本。
如果用户从 Google 钱包应用中移除卡券,相应的卡券对象实例会自动与用户解除关联,但不会被删除。这意味着,用户可以再次点击添加到 Google 钱包按钮或链接来保存卡券,而无需创建新的 Passes 对象实例或 JWT。