如果您将卡券设置为过期,Google 钱包应用会以逻辑方式将所有过期卡券分组为 卡券标签页。出现“过期卡券”部分(位于 包含所有已归档或无效的卡券的 Google 钱包应用。
一张卡券会移至“过期卡券”部分(如果至少满足以下任一条件) 为 true:
object.validTimeInterval.end.date
到期后,卡券会移至 “过期卡券”。- 对象
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.loyaltyobject().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 LoyaltyObject patchBody = new LoyaltyObject().setState("EXPIRED"); LoyaltyObject response = service .loyaltyobject() .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->loyaltyobject->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 LoyaltyObject([ 'state' => 'EXPIRED' ]); $response = $this->service->loyaltyobject->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.loyaltyobject().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.loyaltyobject().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.Loyaltyobject .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 LoyaltyObject patchBody = new LoyaltyObject { State = "EXPIRED" }; responseStream = service.Loyaltyobject .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.loyaltyobject.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.loyaltyobject.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 *demoLoyalty) expireObject(issuerId, objectSuffix string) { loyaltyObject := &walletobjects.LoyaltyObject{ State: "EXPIRED", } res, err := d.service.Loyaltyobject.Patch(fmt.Sprintf("%s.%s", issuerId, objectSuffix), loyaltyObject).Do() if err != nil { log.Fatalf("Unable to patch object: %v", err) } else { fmt.Printf("Object expiration id:\n%s\n", res.Id) } }