O diagrama a seguir ilustra um fluxo de comunicação típico usado para inserir uma classe, salvar um objeto e atualizar um objeto. Todas as ações entre o servidor, o navegador da Web e a API Google Pay for Passes são de sua responsabilidade. O diagrama a seguir usa Fidelidade como exemplo, mas todos os outros cartões podem usar um fluxo semelhante.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/pay/passes/images/LoyaltyFlows.png?authuser=0000&hl=pt)
Fluxo de API típico para botões JS e links da Web JWT
A descrição a seguir explica o mesmo processo da figura 1 em mais detalhes. Ela abrange o fluxo típico da API para botões JavaScript (JS) e JSON Web Tokens (JWTs):
- O emissor do cartão de fidelidade cria uma
LoyaltyClass
. - Seu servidor define a
LoyaltyClass
. - Seu servidor faz uma solicitação
POST
para inserir aLoyaltyClass
no servidor da API Google Pay for Passes. - Seu servidor tem um serviço que gera um JWT para um
LoyaltyObject
de uma determinadaLoyaltyClass
. Esse objeto representa o cartão de fidelidade do usuário. - Seu servidor usa um JWT para renderizar um botão Salvar no Google Pay (S2GP):
- Para sites, use nosso botão JavaScript.
- Para e-mails, SMS e apps, use o link JWT com um botão S2GP.
- O usuário clica ou toca em Salvar no Google Pay no e-mail, app, SMS ou site do emissor do cartão de fidelidade.
- O usuário é direcionado a uma página de destino para salvar um objeto
LoyaltyClass
. O objeto a ser salvo é renderizado na página de destino com base no JWT. Se o usuário tocar no botão em um app, ele será solicitado a salvar o objeto no app Google Pay. - O usuário clica em Salvar no Google Pay na propriedade do emissor para salvar o
LoyaltyObject
. - O
LoyaltyObject
é inserido no servidor do Google e enviado ao app Google Pay. OLoyaltyObject
é nomeado como "Cartão de fidelidade". - O emissor atualiza os dados do cartão:
- O emissor do cartão de fidelidade faz uma solicitação
GET
doLoyaltyObject
com o uso doObject.id
. - O emissor do cartão de fidelidade atualiza o
LoyaltyObject
. - O emissor do cartão de fidelidade faz uma solicitação
PUT
ouPATCH
para inserir oLoyaltyObject
atualizado no servidor da API Google Pay for Passes. - O
LoyaltyObject
é enviado para o app Google Pay.
Variação JWT "skinny"
Devido ao truncamento dos navegadores, os JWTs usados em links da Web não devem exceder 1.800 caracteres. Se isso se tornar um problema, talvez seja melhor inserir a classe e o objeto antes. Assim, o JWT precisará conter apenas o campo ID do objeto.
O diagrama a seguir mostra um fluxo de API para adicionar o botão Salvar no Google Pay ao seu e-mail ou SMS.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/pay/passes/images/skinny-jwt-variation.png?authuser=0000&hl=pt)
Fluxo da API de solicitação POST do JWT
Geralmente, é difícil implementar o trabalho de back-end necessário para criar e inserir uma classe antes que um objeto seja salvo, mas é provável que os JWTs excedam o limite de 1.800 caracteres. Isso é mais útil para ingressos de eventos e cartões de embarque, em que muitas classes são criadas ao longo do tempo.
Veja o fluxo a seguir, que usa como exemplo uma classe de voo:
- Seu servidor gera um JWT para
FlightObject
eFlightClass
. Ambos são definidos no JSON, e oFlightObject
referencia aFlightClass
. - Esse JWT é enviado do seu servidor para o aplicativo cliente, que exibe um botão Salvar no Google Pay. Use um botão que siga as diretrizes da marca S2GP.
- O usuário clica no botão S2GP em seu aplicativo cliente.
- Uma solicitação
POST
é feita no terminal JWT. Isso insere o ID da classe e o ID do objeto. Se o(s) ID(s) de classe ou de objeto no JWT já existirem no sistema, eles não serão inseridos novamente. Revise nossa documentação de referência da API sobre como atualizar classes e objetos existentes. Se eles já tiverem sido inseridos, nenhum erro será lançado. - A resposta de URI retornada é aberta para o usuário para que ele possa salvar o cartão. Esse URI é válido por uma semana após ser retornado.
- Uma solicitação
Para implementar a API, leia Usar o método de solicitação POST do JWT.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/pay/passes/images/jwt-post-request-flow.png?authuser=0000&hl=pt)
Na figura 3, não há setas entre "Seu servidor" e "Servidor do Google" no fluxo de salvamento. Essa é a diferença fundamental entre uma POST do JWT e o método de link e intent do JWT. No entanto, recomendamos que você implemente a comunicação de servidor para servidor para atualizar os cartões.