过期的活动门票
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
Google 钱包中显示“过期卡券”部分,其中包含所有已归档或无效的卡券。
一张卡券会移至“过期卡券”部分:
class.dateTime.end
已过期至少 72 小时。如果未指定 class.dateTime.end
,则系统会使用 class.dateTime.start
。卡券会移至“过期卡券”在 class.dateTime.end
或 class.dateTime.start
到期后的 72-96 小时之间任意时间。
- 当
object.validTimeInterval.end.date expires
时,卡券会移至“过期卡券”。
- 对象
object.state
字段的状态标记为 Expired
、Inactive
或 Completed
。
以下代码示例演示了如何使用 Google
Wallet API。
Java
若要开始使用 Java 进行集成,请参阅
<ph type="x-smartling-placeholder"></ph>
GitHub 上的代码示例。
/**
* Expire an object.
*
* <p>Sets the object's state to Expired. If the valid time interval is already set, the pass will
* expire automatically up to 24 hours after.
*
* @param issuerId The issuer ID being used for this request.
* @param objectSuffix Developer-defined unique ID for this pass object.
* @return The pass object ID: "{issuerId}.{objectSuffix}"
*/
public String expireObject(String issuerId, String objectSuffix) throws IOException {
// Check if the object exists
try {
service.eventticketobject().get(String.format("%s.%s", issuerId, objectSuffix)).execute();
} catch (GoogleJsonResponseException ex) {
if (ex.getStatusCode() == 404) {
// Object does not exist
System.out.printf("Object %s.%s not found!%n", issuerId, objectSuffix);
return String.format("%s.%s", issuerId, objectSuffix);
} else {
// Something else went wrong...
ex.printStackTrace();
return String.format("%s.%s", issuerId, objectSuffix);
}
}
// Patch the object, setting the pass as expired
EventTicketObject patchBody = new EventTicketObject().setState("EXPIRED");
EventTicketObject response =
service
.eventticketobject()
.patch(String.format("%s.%s", issuerId, objectSuffix), patchBody)
.execute();
System.out.println("Object expiration response");
System.out.println(response.toPrettyString());
return response.getId();
}
PHP
要开始使用 PHP 进行集成,请参阅我们的完整
<ph type="x-smartling-placeholder"></ph>
GitHub 上的代码示例。
/**
* Expire an object.
*
* Sets the object's state to Expired. If the valid time interval is
* already set, the pass will expire automatically up to 24 hours after.
*
* @param string $issuerId The issuer ID being used for this request.
* @param string $objectSuffix Developer-defined unique ID for this pass object.
*
* @return string The pass object ID: "{$issuerId}.{$objectSuffix}"
*/
public function expireObject(string $issuerId, string $objectSuffix)
{
// Check if the object exists
try {
$this->service->eventticketobject->get("{$issuerId}.{$objectSuffix}");
} catch (Google\Service\Exception $ex) {
if (!empty($ex->getErrors()) && $ex->getErrors()[0]['reason'] == 'resourceNotFound') {
print("Object {$issuerId}.{$objectSuffix} not found!");
return "{$issuerId}.{$objectSuffix}";
} else {
// Something else went wrong...
print_r($ex);
return "{$issuerId}.{$objectSuffix}";
}
}
// Patch the object, setting the pass as expired
$patchBody = new EventTicketObject([
'state' => 'EXPIRED'
]);
$response = $this->service->eventticketobject->patch("{$issuerId}.{$objectSuffix}", $patchBody);
print "Object expiration response\n";
print_r($response);
return $response->id;
}
Python
要开始在 Python 中进行集成,请参阅我们完整
<ph type="x-smartling-placeholder"></ph>
GitHub 上的代码示例。
def expire_object(self, issuer_id: str, object_suffix: str) -> str:
"""Expire an object.
Sets the object's state to Expired. If the valid time interval is
already set, the pass will expire automatically up to 24 hours after.
Args:
issuer_id (str): The issuer ID being used for this request.
object_suffix (str): Developer-defined unique ID for the pass object.
Returns:
The pass object ID: f"{issuer_id}.{object_suffix}"
"""
# Check if the object exists
try:
response = self.client.eventticketobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()
except HttpError as e:
if e.status_code == 404:
print(f'Object {issuer_id}.{object_suffix} not found!')
return f'{issuer_id}.{object_suffix}'
else:
# Something else went wrong...
print(e.error_details)
return f'{issuer_id}.{object_suffix}'
# Patch the object, setting the pass as expired
patch_body = {'state': 'EXPIRED'}
response = self.client.eventticketobject().patch(
resourceId=f'{issuer_id}.{object_suffix}',
body=patch_body).execute()
print('Object expiration response')
print(response)
return f'{issuer_id}.{object_suffix}'
C#
要开始使用 C# 进行集成,请参阅我们的完整
<ph type="x-smartling-placeholder"></ph>
GitHub 上的代码示例。
/// <summary>
/// Expire an object.
/// <para />
/// Sets the object's state to Expired. If the valid time interval is already
/// set, the pass will expire automatically up to 24 hours after.
/// </summary>
/// <param name="issuerId">The issuer ID being used for this request.</param>
/// <param name="objectSuffix">Developer-defined unique ID for this pass object.</param>
/// <returns>The pass object ID: "{issuerId}.{objectSuffix}"</returns>
public string ExpireObject(string issuerId, string objectSuffix)
{
// Check if the object exists
Stream responseStream = service.Eventticketobject
.Get($"{issuerId}.{objectSuffix}")
.ExecuteAsStream();
StreamReader responseReader = new StreamReader(responseStream);
JObject jsonResponse = JObject.Parse(responseReader.ReadToEnd());
if (jsonResponse.ContainsKey("error"))
{
if (jsonResponse["error"].Value<int>("code") == 404)
{
// Object does not exist
Console.WriteLine($"Object {issuerId}.{objectSuffix} not found!");
return $"{issuerId}.{objectSuffix}";
}
else
{
// Something else went wrong...
Console.WriteLine(jsonResponse.ToString());
return $"{issuerId}.{objectSuffix}";
}
}
// Patch the object, setting the pass as expired
EventTicketObject patchBody = new EventTicketObject
{
State = "EXPIRED"
};
responseStream = service.Eventticketobject
.Patch(patchBody, $"{issuerId}.{objectSuffix}")
.ExecuteAsStream();
responseReader = new StreamReader(responseStream);
jsonResponse = JObject.Parse(responseReader.ReadToEnd());
Console.WriteLine("Object expiration response");
Console.WriteLine(jsonResponse.ToString());
return $"{issuerId}.{objectSuffix}";
}
Node.js
若要开始在 Node 中进行集成,请参阅我们完整
<ph type="x-smartling-placeholder"></ph>
GitHub 上的代码示例。
/**
* Expire an object.
*
* Sets the object's state to Expired. If the valid time interval is
* already set, the pass will expire automatically up to 24 hours after.
*
* @param {string} issuerId The issuer ID being used for this request.
* @param {string} objectSuffix Developer-defined unique ID for the pass object.
*
* @returns {string} The pass object ID: `${issuerId}.${objectSuffix}`
*/
async expireObject(issuerId, objectSuffix) {
let response;
// Check if the object exists
try {
response = await this.client.eventticketobject.get({
resourceId: `${issuerId}.${objectSuffix}`
});
} catch (err) {
if (err.response && err.response.status === 404) {
console.log(`Object ${issuerId}.${objectSuffix} not found!`);
return `${issuerId}.${objectSuffix}`;
} else {
// Something else went wrong...
console.log(err);
return `${issuerId}.${objectSuffix}`;
}
}
// Patch the object, setting the pass as expired
let patchBody = {
'state': 'EXPIRED'
};
response = await this.client.eventticketobject.patch({
resourceId: `${issuerId}.${objectSuffix}`,
requestBody: patchBody
});
console.log('Object expiration response');
console.log(response);
return `${issuerId}.${objectSuffix}`;
}
Go
要开始在 Go 中进行集成,请参阅 GitHub 上的完整代码示例
<ph type="x-smartling-placeholder"></ph>
GitHub 上的代码示例。
// Expire an object.
//
// Sets the object's state to Expired. If the valid time interval is
// already set, the pass will expire automatically up to 24 hours after.
func (d *demoEventticket) expireObject(issuerId, objectSuffix string) {
eventticketObject := &walletobjects.EventTicketObject{
State: "EXPIRED",
}
res, err := d.service.Eventticketobject.Patch(fmt.Sprintf("%s.%s", issuerId, objectSuffix), eventticketObject).Do()
if err != nil {
log.Fatalf("Unable to patch object: %v", err)
} else {
fmt.Printf("Object expiration id:\n%s\n", res.Id)
}
}
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-08-29。
[null,null,["最后更新时间 (UTC):2025-08-29。"],[[["\u003cp\u003eGoogle Wallet's "Expired passes" section archives inactive passes based on time or status.\u003c/p\u003e\n"],["\u003cp\u003ePasses are automatically moved to this section 72-96 hours after their end date/time or up to 24 hours after their validity expires.\u003c/p\u003e\n"],["\u003cp\u003eA pass is also considered expired if its state is marked as \u003ccode\u003eExpired\u003c/code\u003e, \u003ccode\u003eInactive\u003c/code\u003e, or \u003ccode\u003eCompleted\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eThis page provides code samples in various programming languages demonstrating how to expire a pass object using the Google Wallet API.\u003c/p\u003e\n"]]],["Google Wallet moves passes to the \"Expired passes\" section based on specific conditions: 72-96 hours post `class.dateTime.end` or `start` expiration, up to 24 hours after `object.validTimeInterval.end.date` expires, or when `object.state` is `Expired`, `Inactive`, or `Completed`. To manually expire a pass, developers use the Google Wallet API to patch the object's state to \"EXPIRED,\" which triggers automatic expiration within 24 hours if a valid time interval is set. The `expireObject` function is used to update the pass state.\n"],null,["# Expired Event tickets\n\nIn Google Wallet, there's an \"**Expired passes**\" section that contains all archived or inactive passes.\n\nA pass is moved to the \"Expired passes\" section if at least one of the following conditions is true:\n\n- It's been at least 72 hours since `class.dateTime.end` expired. If `class.dateTime.end` isn't specified, `class.dateTime.start` is used instead. The pass moves to \"Expired passes\" anytime between 72-96 hours after `class.dateTime.end` or `class.dateTime.start` expires.\n- When the `object.validTimeInterval.end.date expires` the pass moves to \"Expired passes\" anytime up to 24 hours after.\n- The state of the object `object.state` field is marked as `Expired`, `Inactive`, or `Completed`.\n\nThe following code sample demonstrates expiring a pass object using the Google\nWallet API. \n\n### Java\n\n\nTo start your integration in Java, refer to our complete\n[code samples on GitHub](https://github.com/google-wallet/rest-samples/tree/main/java). \n\n```java\n/**\n * Expire an object.\n *\n * \u003cp\u003eSets the object's state to Expired. If the valid time interval is already set, the pass will\n * expire automatically up to 24 hours after.\n *\n * @param issuerId The issuer ID being used for this request.\n * @param objectSuffix Developer-defined unique ID for this pass object.\n * @return The pass object ID: \"{issuerId}.{objectSuffix}\"\n */\npublic String expireObject(String issuerId, String objectSuffix) throws IOException {\n // Check if the object exists\n try {\n service.eventticketobject().get(String.format(\"%s.%s\", issuerId, objectSuffix)).execute();\n } catch (GoogleJsonResponseException ex) {\n if (ex.getStatusCode() == 404) {\n // Object does not exist\n System.out.printf(\"Object %s.%s not found!%n\", issuerId, objectSuffix);\n return String.format(\"%s.%s\", issuerId, objectSuffix);\n } else {\n // Something else went wrong...\n ex.printStackTrace();\n return String.format(\"%s.%s\", issuerId, objectSuffix);\n }\n }\n\n // Patch the object, setting the pass as expired\n EventTicketObject patchBody = new EventTicketObject().setState(\"EXPIRED\");\n\n EventTicketObject response =\n service\n .eventticketobject()\n .patch(String.format(\"%s.%s\", issuerId, objectSuffix), patchBody)\n .execute();\n\n System.out.println(\"Object expiration response\");\n System.out.println(response.toPrettyString());\n\n return response.getId();\n}\n```\n\n### PHP\n\n\nTo start your integration in PHP, refer to our complete\n[code samples on GitHub](https://github.com/google-wallet/rest-samples/tree/main/php). \n\n```php\n/**\n * Expire an object.\n *\n * Sets the object's state to Expired. If the valid time interval is\n * already set, the pass will expire automatically up to 24 hours after.\n *\n * @param string $issuerId The issuer ID being used for this request.\n * @param string $objectSuffix Developer-defined unique ID for this pass object.\n *\n * @return string The pass object ID: \"{$issuerId}.{$objectSuffix}\"\n */\npublic function expireObject(string $issuerId, string $objectSuffix)\n{\n // Check if the object exists\n try {\n $this-\u003eservice-\u003eeventticketobject-\u003eget(\"{$issuerId}.{$objectSuffix}\");\n } catch (Google\\Service\\Exception $ex) {\n if (!empty($ex-\u003egetErrors()) && $ex-\u003egetErrors()[0]['reason'] == 'resourceNotFound') {\n print(\"Object {$issuerId}.{$objectSuffix} not found!\");\n return \"{$issuerId}.{$objectSuffix}\";\n } else {\n // Something else went wrong...\n print_r($ex);\n return \"{$issuerId}.{$objectSuffix}\";\n }\n }\n\n // Patch the object, setting the pass as expired\n $patchBody = new EventTicketObject([\n 'state' =\u003e 'EXPIRED'\n ]);\n\n $response = $this-\u003eservice-\u003eeventticketobject-\u003epatch(\"{$issuerId}.{$objectSuffix}\", $patchBody);\n\n print \"Object expiration response\\n\";\n print_r($response);\n\n return $response-\u003eid;\n}\n```\n\n### Python\n\n\nTo start your integration in Python, refer to our complete\n[code samples on GitHub](https://github.com/google-wallet/rest-samples/tree/main/python). \n\n```python\ndef expire_object(self, issuer_id: str, object_suffix: str) -\u003e str:\n \"\"\"Expire an object.\n\n Sets the object's state to Expired. If the valid time interval is\n already set, the pass will expire automatically up to 24 hours after.\n\n Args:\n issuer_id (str): The issuer ID being used for this request.\n object_suffix (str): Developer-defined unique ID for the pass object.\n\n Returns:\n The pass object ID: f\"{issuer_id}.{object_suffix}\"\n \"\"\"\n\n # Check if the object exists\n try:\n response = self.client.eventticketobject().get(resourceId=f'{issuer_id}.{object_suffix}').execute()\n except HttpError as e:\n if e.status_code == 404:\n print(f'Object {issuer_id}.{object_suffix} not found!')\n return f'{issuer_id}.{object_suffix}'\n else:\n # Something else went wrong...\n print(e.error_details)\n return f'{issuer_id}.{object_suffix}'\n\n # Patch the object, setting the pass as expired\n patch_body = {'state': 'EXPIRED'}\n\n response = self.client.eventticketobject().patch(\n resourceId=f'{issuer_id}.{object_suffix}',\n body=patch_body).execute()\n\n print('Object expiration response')\n print(response)\n\n return f'{issuer_id}.{object_suffix}'\n```\n\n### C#\n\n\nTo start your integration in C#, refer to our complete\n[code samples on GitHub](https://github.com/google-wallet/rest-samples/tree/main/dotnet). \n\n```c#\n/// \u003csummary\u003e\n/// Expire an object.\n/// \u003cpara /\u003e\n/// Sets the object's state to Expired. If the valid time interval is already\n/// set, the pass will expire automatically up to 24 hours after.\n/// \u003c/summary\u003e\n/// \u003cparam name=\"issuerId\"\u003eThe issuer ID being used for this request.\u003c/param\u003e\n/// \u003cparam name=\"objectSuffix\"\u003eDeveloper-defined unique ID for this pass object.\u003c/param\u003e\n/// \u003creturns\u003eThe pass object ID: \"{issuerId}.{objectSuffix}\"\u003c/returns\u003e\npublic string ExpireObject(string issuerId, string objectSuffix)\n{\n // Check if the object exists\n Stream responseStream = service.Eventticketobject\n .Get($\"{issuerId}.{objectSuffix}\")\n .ExecuteAsStream();\n\n StreamReader responseReader = new StreamReader(responseStream);\n JObject jsonResponse = JObject.Parse(responseReader.ReadToEnd());\n\n if (jsonResponse.ContainsKey(\"error\"))\n {\n if (jsonResponse[\"error\"].Value\u003cint\u003e(\"code\") == 404)\n {\n // Object does not exist\n Console.WriteLine($\"Object {issuerId}.{objectSuffix} not found!\");\n return $\"{issuerId}.{objectSuffix}\";\n }\n else\n {\n // Something else went wrong...\n Console.WriteLine(jsonResponse.ToString());\n return $\"{issuerId}.{objectSuffix}\";\n }\n }\n\n // Patch the object, setting the pass as expired\n EventTicketObject patchBody = new EventTicketObject\n {\n State = \"EXPIRED\"\n };\n\n responseStream = service.Eventticketobject\n .Patch(patchBody, $\"{issuerId}.{objectSuffix}\")\n .ExecuteAsStream();\n\n responseReader = new StreamReader(responseStream);\n jsonResponse = JObject.Parse(responseReader.ReadToEnd());\n\n Console.WriteLine(\"Object expiration response\");\n Console.WriteLine(jsonResponse.ToString());\n\n return $\"{issuerId}.{objectSuffix}\";\n}\n```\n\n### Node.js\n\n\nTo start your integration in Node, refer to our complete\n[code samples on GitHub](https://github.com/google-wallet/rest-samples/tree/main/nodejs). \n\n```javascript\n/**\n * Expire an object.\n *\n * Sets the object's state to Expired. If the valid time interval is\n * already set, the pass will expire automatically up to 24 hours after.\n *\n * @param {string} issuerId The issuer ID being used for this request.\n * @param {string} objectSuffix Developer-defined unique ID for the pass object.\n *\n * @returns {string} The pass object ID: `${issuerId}.${objectSuffix}`\n */\nasync expireObject(issuerId, objectSuffix) {\n let response;\n\n // Check if the object exists\n try {\n response = await this.client.eventticketobject.get({\n resourceId: `${issuerId}.${objectSuffix}`\n });\n } catch (err) {\n if (err.response && err.response.status === 404) {\n console.log(`Object ${issuerId}.${objectSuffix} not found!`);\n return `${issuerId}.${objectSuffix}`;\n } else {\n // Something else went wrong...\n console.log(err);\n return `${issuerId}.${objectSuffix}`;\n }\n }\n\n // Patch the object, setting the pass as expired\n let patchBody = {\n 'state': 'EXPIRED'\n };\n\n response = await this.client.eventticketobject.patch({\n resourceId: `${issuerId}.${objectSuffix}`,\n requestBody: patchBody\n });\n\n console.log('Object expiration response');\n console.log(response);\n\n return `${issuerId}.${objectSuffix}`;\n}\n```\n\n### Go\n\n\nTo start your integration in Go, refer to our complete code samples on GitHub\n[code samples on Github](https://github.com/google-wallet/rest-samples/tree/main/go). \n\n```go\n// Expire an object.\n//\n// Sets the object's state to Expired. If the valid time interval is\n// already set, the pass will expire automatically up to 24 hours after.\nfunc (d *demoEventticket) expireObject(issuerId, objectSuffix string) {\n\teventticketObject := &walletobjects.EventTicketObject{\n\t\tState: \"EXPIRED\",\n\t}\n\tres, err := d.service.Eventticketobject.Patch(fmt.Sprintf(\"%s.%s\", issuerId, objectSuffix), eventticketObject).Do()\n\tif err != nil {\n\t\tlog.Fatalf(\"Unable to patch object: %v\", err)\n\t} else {\n\t\tfmt.Printf(\"Object expiration id:\\n%s\\n\", res.Id)\n\t}\n}\n```"]]