1. Introduzione
Panoramica
L'API Google Wallet ti consente di interagire con gli utenti tramite vari tipi di tessere: carte fedeltà, offerte, carte regalo, biglietti per eventi, biglietti del trasporto pubblico, carte d'imbarco e altro ancora. Ogni tipo di tessera o classe di superamento include funzionalità e campi specifici per i casi d'uso che migliorano l'esperienza utente.
Tuttavia, potrebbero non essere adatti a tutti i casi d'uso. Per creare un'esperienza più personalizzata, puoi utilizzare il tipo di tessera generica. Ecco alcuni casi d'uso di esempio per il tipo di tessera generica:
- Tessere per il parcheggio
- Tessere della biblioteca
- Coupon con valore memorizzato
- Tessere della palestra
- Prenotazioni
Puoi utilizzare tessere generiche per qualsiasi caso d'uso che possa essere presentato con:
- Fino a tre righe di informazioni
- (Facoltativo) Immagine del codice a barre
- (Facoltativo) Sezione dei dettagli
Per ulteriori informazioni sull'API Google Wallet o sull'aggiunta di un pulsante Aggiungi a Google Wallet a una pagina web, consulta la documentazione per gli sviluppatori di Google Wallet.
Classi e oggetti di superamento
L'API Google Wallet espone i metodi per creare quanto segue:
Tipo | Descrizione |
Classe pass | Un modello per un singolo oggetto pass. Contiene informazioni comuni a tutti gli oggetti pass che appartengono a questa classe. |
Oggetto pass | Un'istanza di una classe pass univoca per un ID utente. |
Informazioni su questo codelab
In questo codelab, completerai le attività seguenti.
- Crea un nuovo account emittente in modalità demo
- Crea un account di servizio per l'emissione delle tessere
- Crea una nuova classe pass generica
- Crea un nuovo oggetto pass
- Crea un pulsante Aggiungi a Google Wallet per salvare una tessera
- Visualizza il pulsante nella pagina web
- Gestire il risultato del salvataggio della tessera
Prerequisiti
- Git
- Un Account Google con accesso alla console Google Cloud.
- Node.js versione 10 o successive
Obiettivi
Dopo aver completato questo codelab, sarai in grado di:
- Creare oggetti tessere utilizzando Google Wallet
- Crea un pulsante Aggiungi a Google Wallet
Assistenza
Se ti blocchi in qualsiasi momento del codelab, il repository GitHub di google-pay/wallet-web-codelab contiene una soluzione completa come riferimento.
2. Configurazione
In questo passaggio, creerai un account emittente in modalità demo. In questo modo potrai creare classi di tessere e oggetti che possono essere aggiunti ai portafogli degli utenti. Ora creerai un progetto Google Cloud e un account di servizio. Verranno utilizzati per creare in modo programmatico classi di passaggio e oggetti, come per un server di backend. Infine, autorizzerai l'account di servizio Google Cloud a gestire le tessere nel tuo account emittente Google Wallet.
Creare un account emittente Google Wallet
Per creare e distribuire le tessere per Google Wallet è necessario un account emittente. Puoi registrarti utilizzando la funzionalità Google Pay & Console Wallet. Inizialmente, potrai creare tessere in modalità demo. Ciò significa che solo specifici utenti di test potranno aggiungere le tessere che crei. Gli utenti di prova possono essere gestiti in Google Pay e Console Wallet.
Per ulteriori informazioni sulla modalità demo, consulta i prerequisiti per il superamento generico.
- Apri l'app Google Pay e Console di Wallet
- Segui le istruzioni sullo schermo per creare un account emittente
- Seleziona API Google Wallet
- Conferma di aver compreso i Termini di servizio e le Norme sulla privacy
- Copia il valore Issuer ID (ID emittente) in un editor di testo o in un'altra posizione.
- Nella scheda Gestisci, seleziona Configura account di prova.
- Aggiungi gli indirizzi email che utilizzerai in questo codelab
Abilitare l'API Google Wallet
- Accedi alla console Google Cloud.
- Se non hai ancora un progetto Google Cloud, creane uno ora. Per saperne di più, consulta Creazione e gestione dei progetti.
- Attiva l'API Google Wallet (nota anche come API Google Pay for Passes) per il tuo progetto
Crea un account di servizio e una chiave
Per chiamare l'API Google Wallet sono necessari un account di servizio e una chiave dell'account di servizio. L'account di servizio è l'identità che chiama l'API Google Wallet. La chiave dell'account di servizio contiene una chiave privata che identifica l'applicazione come account di servizio. Questa chiave è sensibile, quindi mantienila riservata.
Crea un account di servizio
- Nella console Google Cloud, apri Account di servizio
- Inserisci un nome, un ID e una descrizione per il tuo account di servizio
- Seleziona CREA E CONTINUA.
- Seleziona FINE
Crea una chiave dell'account di servizio
- Seleziona il tuo account di servizio
- Seleziona il menu KEYS.
- Seleziona AGGIUNGI CHIAVE, quindi Crea nuova chiave.
- Seleziona il tipo di chiave JSON
- Seleziona CREA
Ti verrà chiesto di salvare il file della chiave sulla workstation locale. Assicurati di memorizzarne la posizione.
Imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS
La variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS
viene utilizzata dagli SDK Google per eseguire l'autenticazione come account di servizio e accedere a diverse API per un progetto Google Cloud.
- Segui le istruzioni nella documentazione relativa alle chiavi dell'account di servizio Google Cloud per impostare la variabile di ambiente
GOOGLE_APPLICATION_CREDENTIALS
. - Verifica che la variabile di ambiente sia impostata in una nuova sessione di terminale (MacOS/Linux) o della riga di comando (Windows) (potrebbe essere necessario avviare una nuova sessione se ne hai già aperta una)
echo $GOOGLE_APPLICATION_CREDENTIALS
Autorizza l'account di servizio
Infine, dovrai autorizzare l'account di servizio a gestire le tessere di Google Wallet.
- Apri l'app Google Pay e Console di Wallet
- Seleziona Utenti.
- Seleziona Invita un utente.
- Inserisci l'indirizzo email dell'account di servizio (ad es.
test-svc@myproject.iam.gserviceaccount.com
) - Seleziona Sviluppatore o Amministratore dal menu a discesa Livello di accesso.
- Seleziona Invita
3. avvia l'app Node.js di esempio
Durata 10:00
In questo passaggio, eseguirai un'applicazione Node.js di esempio che funge da sito web per gli acquisti e server di backend.
clona il repository di esempio
Il repository google-pay/wallet-web-codelab contiene un progetto di esempio basato su Node.js e diversi file di script che imitano un server di backend utilizzato per il provisioning di classi delle tessere e oggetti. Li modificherai in modo da includere un pulsante Aggiungi a Google Wallet nella schermata dei dettagli del prodotto.
- Clona il repository sulla workstation locale
git clone https://github.com/google-pay/wallet-web-codelab.git
Installa le dipendenze del progetto
- Apri il repository clonato nel terminale o nel prompt della riga di comando.
- Vai alla directory
web
(questa è l'app che modificherai nel resto di questo codelab)cd web
- Installa le dipendenze Node.js
npm install .
- Avvia l'app
node app.js
- Apri l'app in esecuzione su http://localhost:3000
Se inserisci il tuo indirizzo email e selezioni Crea tessera, non succederà nulla. Nei passaggi successivi, configurerai l'app per creare una nuova classe pass e un nuovo oggetto.
4. Creare una classe pass generica
In questo passaggio creerai la classe base per la tua tessera. Ogni volta che viene creata una nuova tessera per un utente, quest'ultima erediterà le proprietà definite nella classe della tessera.
La classe della tessera che creerai durante questo codelab utilizza la flessibilità delle tessere generiche per creare un oggetto che funge sia da badge d'identità sia da tracker dei punti sfida. Quando viene creato un oggetto pass da questa classe, l'oggetto avrà l'aspetto seguente.
Le classi di pass possono essere create direttamente in Google Pay e Console Wallet o utilizzando l'API Google Wallet. In questo codelab, creerai la classe pass generico utilizzando l'API. Questa operazione segue il processo che un server di backend privato utilizzerebbe per creare classi di accesso.
- Apri il file
web/app.js
- Sostituisci il valore
issuerId
con il tuo ID emittente indicato in Google Pay e Console di Wallet// TODO: Define Issuer ID const issuerId = 'ISSUER_ID';
- Individuare la funzione
createPassClass
- Nella funzione, crea un client HTTP autenticato e utilizza l'API Google Wallet per creare una nuova classe di tessera
// TODO: Create a Generic pass class let genericClass = { 'id': `${classId}`, 'classTemplateInfo': { 'cardTemplateOverride': { 'cardRowTemplateInfos': [ { 'twoItems': { 'startItem': { 'firstValue': { 'fields': [ { 'fieldPath': 'object.textModulesData["points"]' } ] } }, 'endItem': { 'firstValue': { 'fields': [ { 'fieldPath': 'object.textModulesData["contacts"]' } ] } } } } ] }, 'detailsTemplateOverride': { 'detailsItemInfos': [ { 'item': { 'firstValue': { 'fields': [ { 'fieldPath': 'class.imageModulesData["event_banner"]' } ] } } }, { 'item': { 'firstValue': { 'fields': [ { 'fieldPath': 'class.textModulesData["game_overview"]' } ] } } }, { 'item': { 'firstValue': { 'fields': [ { 'fieldPath': 'class.linksModuleData.uris["official_site"]' } ] } } } ] } }, 'imageModulesData': [ { 'mainImage': { 'sourceUri': { 'uri': 'https://storage.googleapis.com/wallet-lab-tools-codelab-artifacts-public/google-io-2021-card.png' }, 'contentDescription': { 'defaultValue': { 'language': 'en-US', 'value': 'Google I/O 2022 Banner' } } }, 'id': 'event_banner' } ], 'textModulesData': [ { 'header': 'Gather points meeting new people at Google I/O', 'body': 'Join the game and accumulate points in this badge by meeting other attendees in the event.', 'id': 'game_overview' } ], 'linksModuleData': { 'uris': [ { 'uri': 'https://io.google/2022/', 'description': 'Official I/O \'22 Site', 'id': 'official_site' } ] } }; let response; try { // Check if the class exists already response = await httpClient.request({ url: `${baseUrl}/genericClass/${classId}`, method: 'GET' }); console.log('Class already exists'); console.log(response); } catch (err) { if (err.response && err.response.status === 404) { // Class does not exist // Create it now response = await httpClient.request({ url: `${baseUrl}/genericClass`, method: 'POST', data: genericClass }); console.log('Class insert response'); console.log(response); } else { // Something else went wrong console.log(err); res.send('Something went wrong...check the console logs!'); } }
Quando viene eseguito, il codice crea una nuova classe pass e restituisce l'ID classe. L'ID classe è composto dall'ID emittente seguito da un suffisso definito dallo sviluppatore. In questo caso, il suffisso è impostato su codelab_class
(l'ID classe sarà simile a 1234123412341234123.codelab_class
). I log di output includeranno anche la risposta dell'API Google Wallet.
5. Creare un oggetto pass generico
In questo passaggio configurerai l'app Node.js per creare un oggetto pass generico utilizzando la classe creata in precedenza. Esistono due flussi per la creazione di oggetti pass per gli utenti.
Crea l'oggetto pass sul server di backend
In questo approccio, l'oggetto pass viene creato su un server di backend e restituito all'app client come un JWT firmato. Questa opzione è più adatta nei casi in cui l'adozione da parte dell'utente è elevata, in quanto garantisce l'esistenza dell'oggetto prima che l'utente provi ad aggiungerlo al proprio portafoglio.
Crea l'oggetto pass quando l'utente lo aggiunge al proprio Wallet
In questo approccio, l'oggetto pass viene definito e codificato in un JWT firmato sul server di backend. Nell'app client viene visualizzato un pulsante Aggiungi a Google Wallet che fa riferimento al JWT. Quando l'utente seleziona il pulsante, il JWT viene utilizzato per creare l'oggetto pass. Questa opzione è più adatta nei casi in cui l'adozione da parte dell'utente è variabile o sconosciuta, in quanto impedisce la creazione e il mancato utilizzo di oggetti Trasmetti. Questo approccio verrà utilizzato nel codelab.
- Apri il file
web/app.js
- Individuare la funzione
createPassObject
- Nella funzione, definisci un nuovo oggetto pass per l'utente
// TODO: Create a new Generic pass for the user let objectSuffix = `${req.body.email.replace(/[^\w.-]/g, '_')}`; let objectId = `${issuerId}.${objectSuffix}`; let genericObject = { 'id': `${objectId}`, 'classId': classId, 'genericType': 'GENERIC_TYPE_UNSPECIFIED', 'hexBackgroundColor': '#4285f4', 'logo': { 'sourceUri': { 'uri': 'https://storage.googleapis.com/wallet-lab-tools-codelab-artifacts-public/pass_google_logo.jpg' } }, 'cardTitle': { 'defaultValue': { 'language': 'en', 'value': 'Google I/O \'22' } }, 'subheader': { 'defaultValue': { 'language': 'en', 'value': 'Attendee' } }, 'header': { 'defaultValue': { 'language': 'en', 'value': 'Alex McJacobs' } }, 'barcode': { 'type': 'QR_CODE', 'value': `${objectId}` }, 'heroImage': { 'sourceUri': { 'uri': 'https://storage.googleapis.com/wallet-lab-tools-codelab-artifacts-public/google-io-hero-demo-only.jpg' } }, 'textModulesData': [ { 'header': 'POINTS', 'body': '1234', 'id': 'points' }, { 'header': 'CONTACTS', 'body': '20', 'id': 'contacts' } ] }; // TODO: Create the signed JWT and link res.send("Form submitted!");
Se ricarichi l'app, inserisci il tuo indirizzo email e invii il modulo, non verrà visualizzato alcun output. L'oggetto pass è in fase di definizione dall'applicazione di backend, ma non viene restituito alcun output. Successivamente, trasforma la tessera in un link Aggiungi a Google Wallet.
6. Crea un Pulsante Aggiungi a Google Wallet
Per il passaggio finale, dovrai creare un JWT firmato e restituire un link che può essere utilizzato nel pulsante Aggiungi a Google Wallet. Quando l'utente seleziona il pulsante, gli verrà chiesto di salvare la tessera nel portafoglio.
- Creare le rivendicazioni JWT, codificarle utilizzando la chiave privata dell'account di servizio e restituire un pulsante Aggiungi a Google Wallet con il link incorporato
.// TODO: Create the signed JWT and link const claims = { iss: credentials.client_email, aud: 'google', origins: [], typ: 'savetowallet', payload: { genericObjects: [ genericObject ] } }; const token = jwt.sign(claims, credentials.private_key, { algorithm: 'RS256' }); const saveUrl = `https://pay.google.com/gp/v/save/${token}`; res.send(`<a href='${saveUrl}'><img src='wallet-button.png'></a>`);
- Ricarica l'app in esecuzione nel browser
- Inserisci il tuo indirizzo email nel modulo e seleziona Crea tessera
- Quando viene visualizzato, seleziona il pulsante Aggiungi a Google Wallet.
7. Complimenti
Congratulazioni, hai completato l'integrazione dell'API Google Wallet sul Web.
Scopri di più
Dai un'occhiata a un'integrazione completa nel repository GitHub google-pay/wallet-web-codelab.
Crea tessere e richiedi l'accesso in produzione
Quando è tutto pronto per emettere i tuoi pass in produzione, vai alla sezione Google Pay e Console Wallet per richiedere l'accesso in produzione.
Per scoprire di più, consulta la pagina Prerequisiti delle API web.