Pass configuration

  • Smart Tap enables faster checkout experiences by allowing users to redeem loyalty points and offers by tapping their phones on NFC-enabled terminals.

  • To configure Smart Tap, enable it on the pass class, specify redemption issuers, and set the smartTapRedemptionValue on the pass object.

  • When updating pass classes or objects using the API, prefer PATCH requests for specific property updates to avoid unintended data erasure, or use GET before UPDATE to ensure all existing data is preserved.

  • Before implementing Smart Tap, complete the issuer and merchant configuration prerequisites.

Prerequisites

Make sure you complete the following steps before you proceed:

UPDATE vs. PATCH requests

The UPDATE method completely replaces a pass class or object definition. If you use this, always call the GET method first to retrieve the full class or object definition to use in the UPDATE request. Otherwise, you may erase portions of your pass class or object. Alternatively, use the PATCH method to update specific pass class or object properties.

Pass class configuration

The following properties must be set on the pass class:

  • enableSmartTap set to True
  • redemptionIssuers set to the list of Redemption Issuer(s) that will be using Smart Tap to redeem pass objects associated with this class

A class can be redeemed by various merchants (Redemption Issuers). For example, the same loyalty program, represented by a LoyaltyClass , might be redeemable at different merchants. In this case, the class must be configured to include the IDs of all Redemption Issuers that are eligible.

A pass class can be updated either in the Google Pay & Wallet Console or via the Google Wallet API. The following code sample demonstrates updating a class to enable Smart Tap and add several Redemption Issuers:

Java

 /** 
 * Enable Smart Tap for a pass class. 
 * 
 * @param issuerId The issuer ID being used for this request. 
 * @param classSuffix Developer-defined unique ID for this pass class. 
 * @return The pass class ID: "{issuerId}.{classSuffix}" 
 * @throws IOException 
 */ 
 public 
  
 String 
  
 EnableSmartTap 
 ( 
 String 
  
 issuerId 
 , 
  
 String 
  
 classSuffix 
 ) 
  
 throws 
  
 IOException 
  
 { 
  
 // Check if the class exists 
  
 try 
  
 { 
  
 service 
 . 
 genericclass 
 (). 
 get 
 ( 
 String 
 . 
 format 
 ( 
 "%s.%s" 
 , 
  
 issuerId 
 , 
  
 classSuffix 
 )). 
 execute 
 (); 
  
 } 
  
 catch 
  
 ( 
 GoogleJsonResponseException 
  
 ex 
 ) 
  
 { 
  
 if 
  
 ( 
 ex 
 . 
 getStatusCode 
 () 
  
 == 
  
 404 
 ) 
  
 { 
  
 // Class does not exist 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 String 
 . 
 format 
 ( 
 "Class %s.%s not found!" 
 , 
  
 issuerId 
 , 
  
 classSuffix 
 )); 
  
 return 
  
 String 
 . 
 format 
 ( 
 "%s.%s" 
 , 
  
 issuerId 
 , 
  
 classSuffix 
 ); 
  
 } 
  
 else 
  
 { 
  
 // Something else went wrong... 
  
 ex 
 . 
 printStackTrace 
 (); 
  
 return 
  
 String 
 . 
 format 
 ( 
 "%s.%s" 
 , 
  
 issuerId 
 , 
  
 classSuffix 
 ); 
  
 } 
  
 } 
  
 // Patch the class by enabling Smart Tap and adding Redemption Issuers 
  
 GenericClass 
  
 patchBody 
  
 = 
  
 new 
  
 GenericClass 
 () 
  
 . 
 setEnableSmartTap 
 ( 
 true 
 ) 
  
 . 
 setRedemptionIssuers 
 ( 
  
 new 
  
 ArrayList<Long> 
 ( 
  
 Arrays 
 . 
 asList 
 ( 
  
 // Add any Redemption Issuer IDs 
  
 1234000000087654321L 
 , 
  
 1234000000012345678L 
 ))); 
  
 GenericClass 
  
 response 
  
 = 
  
 service 
  
 . 
 genericclass 
 () 
  
 . 
 patch 
 ( 
 String 
 . 
 format 
 ( 
 "%s.%s" 
 , 
  
 issuerId 
 , 
  
 classSuffix 
 ), 
  
 patchBody 
 ) 
  
 . 
 execute 
 (); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Class patch response" 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 response 
 . 
 toPrettyString 
 ()); 
  
 return 
  
 response 
 . 
 getId 
 (); 
 } 

PHP

 /** 
 * Enable Smart Tap for a pass class. 
 * 
 * @param string $issuerId The issuer ID being used for this request. 
 * @param string $classSuffix Developer-defined unique ID for this pass class. 
 * 
 * @return string The pass class ID: "{$issuerId}.{$classSuffix}" 
 */ 
 public function enableSmartTap(string $issuerId, string $classSuffix) 
 { 
 // Check if the class exists 
 try { 
 $this->service->genericclass->get("{$issuerId}.{$classSuffix}"); 
 } catch (Google\Service\Exception $ex) { 
 if (!empty($ex->getErrors()) && $ex->getErrors()[0]['reason'] == 'classNotFound') { 
 // Class does not exist 
 print("Class {$issuerId}.{$classSuffix} not found!"); 
 return "{$issuerId}.{$classSuffix}"; 
 } else { 
 // Something else went wrong... 
 print_r($ex); 
 return "{$issuerId}.{$classSuffix}"; 
 } 
 } 
 // Patch the class by enabling Smart Tap and adding Redemption Issuers 
 $patchBody = new Google_Service_Walletobjects_GenericClass([ 
 'enableSmartTap' => true, 
 'redemptionIssuers' => [ 
 // Add any Redemption Issuer IDs 
 '1234000000087654321', 
 '1234000000012345678' 
 ] 
 ]); 
 $response = $this->service->genericclass->patch("{$issuerId}.{$classSuffix}", $patchBody); 
 print "Class patch response\n"; 
 print_r($response); 
 return $response->id; 
 } 

Python

 def 
  
 enable_smart_tap 
 ( 
 self 
 , 
 issuer_id 
 : 
 str 
 , 
 class_suffix 
 : 
 str 
 ) 
 - 
> str 
 : 
  
 """Enable Smart Tap for a pass class. 
 Args: 
 issuer_id (str): The issuer ID being used for this request. 
 class_suffix (str): Developer-defined unique ID for this pass class. 
 Returns: 
 The pass class ID: f"{issuer_id}.{class_suffix}" 
 """ 
 # Check if the class exists 
 response 
 = 
 self 
 . 
 http_client 
 . 
 get 
 ( 
 url 
 = 
 f 
 ' 
 { 
 self 
 . 
 class_url 
 } 
 / 
 { 
 issuer_id 
 } 
 . 
 { 
 class_suffix 
 } 
 ' 
 ) 
 if 
 response 
 . 
 status_code 
 == 
 404 
 : 
 print 
 ( 
 f 
 'Class 
 { 
 issuer_id 
 } 
 . 
 { 
 class_suffix 
 } 
 not found!' 
 ) 
 return 
 f 
 ' 
 { 
 issuer_id 
 } 
 . 
 { 
 class_suffix 
 } 
 ' 
 elif 
 response 
 . 
 status_code 
 != 
 200 
 : 
 # Something else went wrong... 
 print 
 ( 
 response 
 . 
 text 
 ) 
 return 
 f 
 ' 
 { 
 issuer_id 
 } 
 . 
 { 
 class_suffix 
 } 
 ' 
 # Patch the class by enabling Smart Tap and adding Redemption Issuers 
 patch_body 
 = 
 { 
 'enableSmartTap' 
 : 
 True 
 , 
 'redemptionIssuers' 
 : 
 [ 
 # Add any Redemption Issuer IDs 
 '1234000000087654321' 
 , 
 '1234000000012345678' 
 ] 
 } 
 response 
 = 
 self 
 . 
 http_client 
 . 
 patch 
 ( 
 url 
 = 
 f 
 ' 
 { 
 self 
 . 
 class_url 
 } 
 / 
 { 
 issuer_id 
 } 
 . 
 { 
 class_suffix 
 } 
 ' 
 , 
 json 
 = 
 patch_body 
 ) 
 print 
 ( 
 'Class patch response' 
 ) 
 print 
 ( 
 response 
 . 
 text 
 ) 
 return 
 f 
 ' 
 { 
 issuer_id 
 } 
 . 
 { 
 class_suffix 
 } 
 ' 

C#

 /// <summary> 
 /// Enable Smart Tap for a pass class. 
 /// </summary> 
 /// <param name="issuerId">The issuer ID being used for this request.</param> 
 /// <param name="classSuffix">Developer-defined unique ID for this pass class.</param> 
 /// <returns>The pass class ID: "{issuerId}.{classSuffix}"</returns> 
 public 
  
 string 
  
 EnableSmartTap 
 ( 
 string 
  
 issuerId 
 , 
  
 string 
  
 classSuffix 
 ) 
 { 
  
 // Check if the class exists 
  
 Stream 
  
 responseStream 
  
 = 
  
 service 
 . 
 Genericclass 
  
 . 
 Get 
 ( 
 $"{issuerId}.{classSuffix}" 
 ) 
  
 . 
 ExecuteAsStream 
 (); 
  
 StreamReader 
  
 responseReader 
  
 = 
  
 new 
  
 StreamReader 
 ( 
 responseStream 
 ); 
  
 JObject 
  
 jsonResponse 
  
 = 
  
 JObject 
 . 
 Parse 
 ( 
 responseReader 
 . 
 ReadToEnd 
 ()); 
  
 if 
  
 ( 
 jsonResponse 
 . 
 ContainsKey 
 ( 
 "error" 
 )) 
  
 { 
  
 if 
  
 ( 
 jsonResponse 
 [ 
 "error" 
 ]. 
 Value<int> 
 ( 
 "code" 
 ) 
  
 == 
  
 404 
 ) 
  
 { 
  
 // Class does not exist 
  
 Console 
 . 
 WriteLine 
 ( 
 $"Class {issuerId}.{classSuffix} not found!" 
 ); 
  
 return 
  
 $"{issuerId}.{classSuffix}" 
 ; 
  
 } 
  
 else 
  
 { 
  
 // Something else went wrong... 
  
 Console 
 . 
 WriteLine 
 ( 
 jsonResponse 
 . 
 ToString 
 ()); 
  
 return 
  
 $"{issuerId}.{classSuffix}" 
 ; 
  
 } 
  
 } 
  
 // Patch the class by enabling Smart Tap and adding Redemption Issuers 
  
 GenericClass 
  
 patchClass 
  
 = 
  
 new 
  
 GenericClass 
  
 { 
  
 EnableSmartTap 
  
 = 
  
 true 
 , 
  
 RedemptionIssuers 
  
 = 
  
 new 
  
 List<Int64 
 ? 
>  
 { 
  
 // Add any Redemption Issuer IDs 
  
 1234000000087654321 
 , 
  
 1234000000012345678 
  
 } 
  
 }; 
  
 responseStream 
  
 = 
  
 service 
 . 
 Genericclass 
  
 . 
 Patch 
 ( 
 patchClass 
 , 
  
 $"{issuerId}.{classSuffix}" 
 ) 
  
 . 
 ExecuteAsStream 
 (); 
  
 responseReader 
  
 = 
  
 new 
  
 StreamReader 
 ( 
 responseStream 
 ); 
  
 jsonResponse 
  
 = 
  
 JObject 
 . 
 Parse 
 ( 
 responseReader 
 . 
 ReadToEnd 
 ()); 
  
 Console 
 . 
 WriteLine 
 ( 
 "Class patch response" 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 jsonResponse 
 . 
 ToString 
 ()); 
  
 return 
  
 $"{issuerId}.{classSuffix}" 
 ; 
 } 

Node.js

 /** 
 * Enable Smart Tap for a pass class. 
 * 
 * @param {string} issuerId The issuer ID being used for this request. 
 * @param {string} classSuffix Developer-defined unique ID for this pass class. 
 * 
 * @returns {string} The pass class ID: `${issuerId}.${classSuffix}` 
 */ 
 async 
  
 enableSmartTap 
 ( 
 issuerId 
 , 
  
 classSuffix 
 ) 
  
 { 
  
 // Check if the class exists 
  
 try 
  
 { 
  
 await 
  
 this 
 . 
 httpClient 
 . 
 request 
 ({ 
  
 url 
 : 
  
 ` 
 ${ 
 this 
 . 
 classUrl 
 } 
 / 
 ${ 
 issuerId 
 } 
 . 
 ${ 
 classSuffix 
 } 
 ` 
 , 
  
 method 
 : 
  
 'GET' 
  
 }); 
  
 } 
  
 catch 
  
 ( 
 err 
 ) 
  
 { 
  
 if 
  
 ( 
 err 
 . 
 response 
 && 
 err 
 . 
 response 
 . 
 status 
  
 === 
  
 404 
 ) 
  
 { 
  
 console 
 . 
 log 
 ( 
 `Class 
 ${ 
 issuerId 
 } 
 . 
 ${ 
 classSuffix 
 } 
 not found!` 
 ); 
  
 return 
  
 ` 
 ${ 
 issuerId 
 } 
 . 
 ${ 
 classSuffix 
 } 
 ` 
 ; 
  
 } 
  
 else 
  
 { 
  
 // Something else went wrong... 
  
 console 
 . 
 log 
 ( 
 err 
 ); 
  
 return 
  
 ` 
 ${ 
 issuerId 
 } 
 . 
 ${ 
 classSuffix 
 } 
 ` 
 ; 
  
 } 
  
 } 
  
 // Patch the class by enabling Smart Tap and adding Redemption Issuers 
  
 let 
  
 patchBody 
  
 = 
  
 { 
  
 'enableSmartTap' 
 : 
  
 true 
 , 
  
 'redemptionIssuers' 
 : 
  
 [ 
  
 // Add any Redemption Issuer IDs 
  
 '1234000000087654321' 
 , 
  
 '1234000000012345678' 
  
 ] 
  
 }; 
  
 response 
  
 = 
  
 await 
  
 this 
 . 
 httpClient 
 . 
 request 
 ({ 
  
 url 
 : 
  
 ` 
 ${ 
 this 
 . 
 classUrl 
 } 
 / 
 ${ 
 issuerId 
 } 
 . 
 ${ 
 classSuffix 
 } 
 ` 
 , 
  
 method 
 : 
  
 'PATCH' 
 , 
  
 data 
 : 
  
 patchBody 
  
 }); 
  
 console 
 . 
 log 
 ( 
 'Class patch response' 
 ); 
  
 console 
 . 
 log 
 ( 
 response 
 ); 
  
 return 
  
 ` 
 ${ 
 issuerId 
 } 
 . 
 ${ 
 classSuffix 
 } 
 ` 
 ; 
 } 

Pass object configuration

On the pass object, the smartTapRedemptionValue must be set. The following code sample demonstrates updating a pass object to include the data that will be sent to the merchant terminal during an NFC tap:

Java

 /** 
 * Enable Smart Tap for a pass object. 
 * 
 * @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}" 
 * @throws IOException 
 */ 
 public 
  
 String 
  
 EnableSmartTap 
 ( 
 String 
  
 issuerId 
 , 
  
 String 
  
 objectSuffix 
 ) 
  
 throws 
  
 IOException 
  
 { 
  
 // Check if the object exists 
  
 try 
  
 { 
  
 service 
 . 
 genericobject 
 (). 
 get 
 ( 
 String 
 . 
 format 
 ( 
 "%s.%s" 
 , 
  
 issuerId 
 , 
  
 objectSuffix 
 )). 
 execute 
 (); 
  
 } 
  
 catch 
  
 ( 
 GoogleJsonResponseException 
  
 ex 
 ) 
  
 { 
  
 if 
  
 ( 
 ex 
 . 
 getStatusCode 
 () 
  
 == 
  
 404 
 ) 
  
 { 
  
 // Object does not exist 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 String 
 . 
 format 
 ( 
 "Object %s.%s not found!" 
 , 
  
 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 by setting the Smart Tap redemption value 
  
 GenericObject 
  
 patchBody 
  
 = 
  
 new 
  
 GenericObject 
 (). 
 setSmartTapRedemptionValue 
 ( 
 "Value to be sent to merchant terminals" 
 ); 
  
 GenericObject 
  
 response 
  
 = 
  
 service 
  
 . 
 genericobject 
 () 
  
 . 
 patch 
 ( 
 String 
 . 
 format 
 ( 
 "%s.%s" 
 , 
  
 issuerId 
 , 
  
 objectSuffix 
 ), 
  
 patchBody 
 ) 
  
 . 
 execute 
 (); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Object patch response" 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 response 
 . 
 toPrettyString 
 ()); 
  
 return 
  
 String 
 . 
 format 
 ( 
 "%s.%s" 
 , 
  
 issuerId 
 , 
  
 objectSuffix 
 ); 
 } 

PHP

 /** 
 * Enable Smart Tap for a pass object. 
 * 
 * @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 enableSmartTap(string $issuerId, string $objectSuffix) 
 { 
 // Check if the object exists 
 try { 
 $this->service->genericobject->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 by setting the Smart Tap redemption value 
 $patchBody = new Google_Service_Walletobjects_GenericObject([ 
 'smartTapRedemptionValue' => 'Value to be sent to merchant terminals' 
 ]); 
 $response = $this->service->genericobject->patch("{$issuerId}.{$objectSuffix}", $patchBody); 
 print "Object patch response\n"; 
 print_r($response); 
 return $response->id; 
 } 

Python

 def 
  
 enable_smart_tap 
 ( 
 self 
 , 
 issuer_id 
 : 
 str 
 , 
 object_suffix 
 : 
 str 
 ) 
 - 
> str 
 : 
  
 """Enable Smart Tap for a pass object. 
 Args: 
 issuer_id (str): The issuer ID being used for this request. 
 object_suffix (str): Developer-defined unique ID for this pass object. 
 Returns: 
 The pass object ID: f"{issuer_id}.{object_suffix}" 
 """ 
 # Check if the object exists 
 response 
 = 
 self 
 . 
 http_client 
 . 
 get 
 ( 
 url 
 = 
 f 
 ' 
 { 
 self 
 . 
 object_url 
 } 
 / 
 { 
 issuer_id 
 } 
 . 
 { 
 object_suffix 
 } 
 ' 
 ) 
 if 
 response 
 . 
 status_code 
 == 
 404 
 : 
 print 
 ( 
 f 
 'Object 
 { 
 issuer_id 
 } 
 . 
 { 
 object_suffix 
 } 
 not found!' 
 ) 
 return 
 f 
 ' 
 { 
 issuer_id 
 } 
 . 
 { 
 object_suffix 
 } 
 ' 
 elif 
 response 
 . 
 status_code 
 != 
 200 
 : 
 # Something else went wrong... 
 print 
 ( 
 response 
 . 
 text 
 ) 
 return 
 f 
 ' 
 { 
 issuer_id 
 } 
 . 
 { 
 object_suffix 
 } 
 ' 
 # Patch the object by setting the Smart Tap redemption value 
 patch_body 
 = 
 { 
 'smartTapRedemptionValue' 
 : 
 'Value to be sent to merchant terminals' 
 } 
 response 
 = 
 self 
 . 
 http_client 
 . 
 patch 
 ( 
 url 
 = 
 f 
 ' 
 { 
 self 
 . 
 object_url 
 } 
 / 
 { 
 issuer_id 
 } 
 . 
 { 
 object_suffix 
 } 
 ' 
 , 
 json 
 = 
 patch_body 
 ) 
 print 
 ( 
 'Object patch response' 
 ) 
 print 
 ( 
 response 
 . 
 text 
 ) 
 return 
 f 
 ' 
 { 
 issuer_id 
 } 
 . 
 { 
 object_suffix 
 } 
 ' 

C#

 /// <summary> 
 /// Enable Smart Tap for a pass object. 
 /// </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 
  
 EnableSmartTap 
 ( 
 string 
  
 issuerId 
 , 
  
 string 
  
 objectSuffix 
 ) 
 { 
  
 // Check if the object exists 
  
 Stream 
  
 responseStream 
  
 = 
  
 service 
 . 
 Genericobject 
  
 . 
 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 by setting the Smart Tap redemption value 
  
 GenericObject 
  
 patchObject 
  
 = 
  
 new 
  
 GenericObject 
  
 { 
  
 SmartTapRedemptionValue 
  
 = 
  
 "Value to be sent to merchant terminals" 
  
 }; 
  
 responseStream 
  
 = 
  
 service 
 . 
 Genericobject 
  
 . 
 Patch 
 ( 
 patchObject 
 , 
  
 $"{issuerId}.{objectSuffix}" 
 ) 
  
 . 
 ExecuteAsStream 
 (); 
  
 responseReader 
  
 = 
  
 new 
  
 StreamReader 
 ( 
 responseStream 
 ); 
  
 jsonResponse 
  
 = 
  
 JObject 
 . 
 Parse 
 ( 
 responseReader 
 . 
 ReadToEnd 
 ()); 
  
 Console 
 . 
 WriteLine 
 ( 
 "Object patch response" 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 jsonResponse 
 . 
 ToString 
 ()); 
  
 return 
  
 $"{issuerId}.{objectSuffix}" 
 ; 
 } 

Node.js

 /** 
 * Enable Smart Tap for a pass object. 
 * 
 * @param {string} issuerId The issuer ID being used for this request. 
 * @param {string} objectSuffix Developer-defined unique ID for this pass object. 
 * 
 * @returns {string} The pass object ID: `${issuerId}.${objectSuffix}` 
 */ 
 async 
  
 enableSmartTap 
 ( 
 issuerId 
 , 
  
 objectSuffix 
 ) 
  
 { 
  
 // Check if the object exists 
  
 try 
  
 { 
  
 await 
  
 this 
 . 
 httpClient 
 . 
 request 
 ({ 
  
 url 
 : 
  
 ` 
 ${ 
 this 
 . 
 objectUrl 
 } 
 / 
 ${ 
 issuerId 
 } 
 . 
 ${ 
 objectSuffix 
 } 
 ` 
 , 
  
 method 
 : 
  
 'GET' 
  
 }); 
  
 } 
  
 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 by setting the Smart Tap redemption value 
  
 let 
  
 patchBody 
  
 = 
  
 { 
  
 'smartTapRedemptionValue' 
 : 
  
 'Value to be sent to merchant terminals' 
  
 }; 
  
 response 
  
 = 
  
 await 
  
 this 
 . 
 httpClient 
 . 
 request 
 ({ 
  
 url 
 : 
  
 ` 
 ${ 
 this 
 . 
 objectUrl 
 } 
 / 
 ${ 
 issuerId 
 } 
 . 
 ${ 
 objectSuffix 
 } 
 ` 
 , 
  
 method 
 : 
  
 'PATCH' 
 , 
  
 data 
 : 
  
 patchBody 
  
 }); 
  
 console 
 . 
 log 
 ( 
 'Object patch response' 
 ); 
  
 console 
 . 
 log 
 ( 
 response 
 ); 
  
 return 
  
 ` 
 ${ 
 issuerId 
 } 
 . 
 ${ 
 objectSuffix 
 } 
 ` 
 ; 
 } 
Create a Mobile Website
View Site in Mobile | Classic
Share by: