O Google adota oficialmente a API de solicitação de pagamento, permitindo que você pague com aplicativos de terceiros no Chrome

Previsto para ser anunciado durante o Google I/O, o Google está adotando oficialmente a API de solicitação de pagamento no Chrome, permitindo que você pague com aplicativos de terceiros.

Definido para ser anunciado na próxima conferência de desenvolvedores do Google I/O, a API de solicitação de pagamento revolucionará a maneira como fazemos pagamentos on-line em nossos dispositivos móveis. Os usuários do Google Chrome no Android não terão mais que passar por longos processos de checkout que envolvem a inserção de informações de cartão de crédito ou login no PayPal. Em vez disso, a API permite que os desenvolvedores de sites enviem intenções a aplicativos de pagamento de terceiros compatíveis para efetuar um pagamento. Ao contrário de muitos dos outras surpresas que o Google tem reservado para nós, já existe uma tonelada de informações públicas sobre como exatamente funcionará essa nova forma de pagamento. Mergulhamos em todos esses documentos para trazer algumas informações antes do anúncio oficial do Google esta semana.


Facilitando os pagamentos com a API de solicitação de pagamento

Vamos primeiro recapitular como os pagamentos são tratados atualmente em navegadores da web. Ao acessar a página de checkout de qualquer comerciante on-line, você será solicitado a inserir suas informações de pagamento. Você pode adicionar um cartão de crédito suportado pelo comerciante ou usar um serviço integrado como o PayPal para concluir sua transação. Agora, a menos que você já tenha salvo as informações do seu cartão de crédito no site (o que muitas pessoas relutam em fazer) ou já esteja logado no PayPal, pode ser um incômodo levantar, ir até sua carteira, encontrar seu cartão e inserir o número do cartão, a data de validade e a segurança código. Cada vez que você deseja fazer uma compra em um novo site, é necessário passar por alguma variação desse processo. Para aqueles de nós que gosto de caçar ofertas, isso pode se tornar irritante rapidamente.

Várias páginas de checkout de comerciantes on-line

Muitas instituições bancárias e de cartão de crédito possuem aplicativos disponíveis na Google Play Store. Como já usamos esses aplicativos para monitorar nossas contas financeiras, por que não podemos usá-los para autenticar pagamentos? Esse é exatamente o processo de pensamento por trás do Grupo de Trabalho de Pagamentos pela Web, composto por membros como Google, Mozilla, Samsung, Alibaba, Microsoft e muito mais. Este grupo tem trabalhado nos bastidores para introduzir uma nova API chamada API de solicitação de pagamento e um novo padrão online definido na Proposta de Manifesto de Pagamento para facilitar a comunicação entre navegadores web e comerciantes on-line para que o comerciante on-line possa usar aplicativos existentes no dispositivo do usuário final para lidar com pagamentos.

Como funciona

Para realizar esta tarefa, os navegadores da web deve oferecer suporte à API de solicitação de pagamento, os comerciantes on-line precisam oferecer suporte à API implementando o que é chamado de Identificador do método de pagamentoe aplicativos Android necessidade de implementar novos serviços. Sem entrar em muitos detalhes, explicarei brevemente o que está acontecendo durante o processo de checkout.

Supondo que seu navegador suporte a API de solicitação de pagamento (mais sobre isso mais tarde), ao navegar para a página de pagamento de um comerciante on-line, você terá a opção de pagar com um de seus gerenciadores de pagamento suportados (cartão de crédito/PayPal/etc.) Quando você toca no botão para fazer uma compra (como na página de exemplo abaixo usada pelos Googlers para testar a API de solicitação de pagamento), então a API de solicitação de pagamento envia uma intenção do Android para o aplicativo de pagamento compatível para que esse aplicativo autentique o usuário pagamento.

 Digamos que nosso hipotético aplicativo de cartão de crédito instalado em um hipotético dispositivo Android se chame Bob Pay. Bob Pay adicionará o seguinte ao arquivo AndroidManifest.xml:

"font-weight: 400;"><manifestspan><spanstyle="font-weight: 400;">package=span><spanstyle="font-weight: 400;">"com.bobpay.app"span><spanstyle="font-weight: 400;">>span>
"font-weight: 400;"> </span>span> <spanstyle="font-weight: 400;">android: name=span><spanstyle="font-weight: 400;">".IsReadyToPayService"span>
<spanstyle="font-weight: 400;">span><spanstyle="font-weight: 400;">android: enabled=span><spanstyle="font-weight: 400;">"true"span>
<spanstyle="font-weight: 400;">span><spanstyle="font-weight: 400;">android: exported=span><spanstyle="font-weight: 400;">"true"span><spanstyle="font-weight: 400;">>span>
<spanstyle="font-weight: 400;">span><spanstyle="font-weight: 400;"><intent-filter>span>
"font-weight: 400;"> </span>span> <spanstyle="font-weight: 400;">android: name=span><spanstyle="font-weight: 400;">"org.chromium.intent.action.IS_READY_TO_PAY"span><spanstyle="font-weight: 400;">/></span>
<spanstyle="font-weight: 400;">span><spanstyle="font-weight: 400;">intent-filter>span>
<spanstyle="font-weight: 400;">span><spanstyle="font-weight: 400;">service>span>
"font-weight: 400;"> </span>span> <spanstyle="font-weight: 400;">android: name=span><spanstyle="font-weight: 400;">".PaymentActivity"span>
<spanstyle="font-weight: 400;">span><spanstyle="font-weight: 400;">android: exported=span><spanstyle="font-weight: 400;">"true"span><spanstyle="font-weight: 400;">>span>
<spanstyle="font-weight: 400;">span><spanstyle="font-weight: 400;"><intent-filter>span>
"font-weight: 400;"> </span>span> <spanstyle="font-weight: 400;">android: name=span><spanstyle="font-weight: 400;">"org.chromium.intent.action.PAY"span><spanstyle="font-weight: 400;">/></span>
<spanstyle="font-weight: 400;">span><spanstyle="font-weight: 400;">intent-filter>span>
"font-weight: 400;"> </span>span> <spanstyle="font-weight: 400;">android: name=span><spanstyle="font-weight: 400;">"org.chromium.default_payment_method_name"span>
<spanstyle="font-weight: 400;">span><spanstyle="font-weight: 400;">android: value=span><spanstyle="font-weight: 400;">"https://bobpay.com/put/optional/path/here"span><spanstyle="font-weight: 400;">/>span>
<spanstyle="font-weight: 400;">span><spanstyle="font-weight: 400;">activity>span>
<spanstyle="font-weight: 400;">manifest>span>

Quando uma intenção é enviada visando esse aplicativo hipotético de cartão de crédito, o serviço desse aplicativo é iniciado. Todas as informações necessárias para que nosso hipotético aplicativo Bob Pay entenda o que está sendo comprado, de qual fornecedor e quanto dinheiro está contido nos extras da intenção:

Bundle extras = new Bundle();
extras.putString("key", "value");
intent.putExtras(extras);

Depois que Bob Pay validar o pagamento, a API de solicitação de pagamento receberá essas informações em outra intent enviada por Bob Pay:

Intent result = new Intent();
Bundle extras = new Bundle();
extras.putString("key", "value");
result.putExtras(extras);
setResult(RESULT_OK, result); // Changeto RESULT_CANCELED on failure.
finish(); // Close the payment activity.

Mas como o comerciante on-line que oferece suporte ao Bob Pay sabe que o Bob Pay instalado no seu telefone é o verdadeiro Bob Pay, e não algum malware destinado a cometer fraudes? Isso é feito criando um arquivo JSON do identificador de manifesto do método de pagamento que pode ser lido por máquina pelo navegador.

{
<span ><span >"span>name<span >"span>span><span >:span><span ><span >"span>BobPay - World's Greatest Payment Method<span >"span>span>,
<span ><span >"span>description<span >"span>span><span >:span><span ><span >"span>This payment method changes lives<span >"span>span>,
<span ><span >"span>short_name<span >"span>span><span >:span><span ><span >"span>BobPay<span >"span>span>,
<span ><span >"span>icons<span >"span>span><span >:span> [{
<span ><span >"span>src<span >"span>span><span >:span><span ><span >"span>icon/lowres.webp<span >"span>span>,
<span ><span >"span>sizes<span >"span>span><span >:span><span ><span >"span>64x64<span >"span>span>,
<span ><span >"span>type<span >"span>span><span >:span><span ><span >"span>image/webp<span >"span>span>
},{
<span ><span >"span>src<span >"span>span><span >:span><span ><span >"span>icon/lowres.png<span >"span>span>,
<span ><span >"span>sizes<span >"span>span><span >:span><span ><span >"span>64x64<span >"span>span>
}, {
<span ><span >"span>src<span >"span>span><span >:span><span ><span >"span>icon/hd_hi<span >"span>span>,
<span ><span >"span>sizes<span >"span>span><span >:span><span ><span >"span>128x128<span >"span>span>
}],
<span ><span >"span>serviceworker<span >"span>span><span >:span> {
<span ><span >"span>src<span >"span>span><span >:span><span ><span >"span>payment-sw.js<span >"span>span>,
<span ><span >"span>scope<span >"span>span><span >:span><span ><span >"span>/pay<span >"span>span>,
<span ><span >"span>use_cache<span >"span>span><span >:span><span >falsespan>
}
<span ><span >"span>related_applications<span >"span>span><span >:span> [
{
<span ><span >"span>platform<span >"span>span><span >:span><span ><span >"span>play<span >"span>span>,
<span ><span >"span>url<span >"span>span><span >:span><span ><span >"span>https://play.google.com/store/apps/details? id=com.bobpay<span >"span>span>,
<span ><span >"span>fingerprints<span >"span>span><span >:span> [{
<span ><span >"span>type<span >"span>span><span >:span><span ><span >"span>sha256_cert<span >"span>span>,
<span ><span >"span>value<span >"span>span><span >:span><span ><span >"span>59:5C: 88:65:FF: C4:E8:20:CF: F7:3E: C8...<span >"span>span>
}], <span >//newspan>
<span ><span >"span>min_version<span >"span>span><span >:span><span ><span >"span>1<span >"span>span>, <span >// newspan>
<span ><span >"span>id<span >"span>span><span >:span><span ><span >"span>com.example.app1<span >"span>span>
}, {
<span ><span >"span>platform<span >"span>span><span >:span><span ><span >"span>itunes<span >"span>span>,
<span ><span >"span>url<span >"span>span><span >:span><span ><span >"span>https://itunes.apple.com/app/example-app1/id123456789<span >"span>span>,
}
]
}

Dentro deste arquivo JSON há uma assinatura usada para verificar a integridade do aplicativo instalado em seu dispositivo que afirma ser o real Bob Pay. Se esta verificação de assinatura falhar, Bob Pay não será aceito como manipulador de pagamento.

É claro que estou simplificando enormemente, enormemente, o processo geral envolvido aqui. Os pagamentos são um sistema incrivelmente complexo que requer múltiplas camadas de verificações de segurança para garantir que apenas pagamentos válidos sejam feitos. Os três documentos aos quais vinculei anteriormente descrevem como o navegador implementa totalmente a API de solicitação de pagamento, como um website implementa o arquivo de manifesto JSON e como um aplicativo Android pode lidar com a intenção enviada pela solicitação de pagamento API. Aqui está um fluxograma que descreve o processo geral que resumi acima:

Fluxograma de pagamento. Fonte: Rouslan Solomakhin

Como você pode ver, há muitas etapas envolvidas aqui. Todas essas mudanças serão tratadas por desenvolvedores de sites de comerciantes on-line, bancos/crédito Android aplicativos de cartão e desenvolvedores de navegadores da web, então o usuário final provavelmente não terá ideia do que realmente está acontecendo aqui. Mas saiba que o resultado final é que os seus pagamentos online se tornarão muito mais simples se todas as partes envolvidas implementar essas mudanças, que graças aos esforços de padronização do Grupo de Trabalho de Pagamentos pela Web se tornarão realidade.


A história por trás da API de solicitação de pagamento

O World Wide Web Consortium (abreviado W3C) foi fundado em 1994 para desenvolver plataformas padrões que permitiriam que todos os sites e seus usuários se beneficiassem da intercompatibilidade e consistência. A fim de enfrentar a crescente fragmentação dos pagamentos pela web, o W3C formou o Grupo de Trabalho de Pagamentos pela Web em 2015 a fim de padronizar alguns aspectos do fluxo de pagamento online. Posteriormente, o trabalho começou entre todos os membros do Grupo de Trabalho de Pagamentos pela Web, a fim de encontrar maneiras de melhorar a forma como os sistemas de pagamento online existentes funcionam.

O grupo surgiu com API de solicitação de pagamento, uma coleção de métodos que permitem que sites usem métodos de pagamento sem integrar o método de pagamento ao site. Os navegadores da Web precisam ser atualizados para suportar a API, mas a parte mais difícil decorre de atrair comerciantes on-line. Para isso, os membros do Grupo de Trabalho surgiu com uma proposta sobre como os sites podem criar identificadores para definir quais métodos de pagamento eles suportam. Isso envolve a criação de um arquivo JSON de manifesto de pagamento que pode ser lido por máquina (o identificador do método de pagamento) - ele precisa ser lido pelo navegador para que o A API de solicitação de pagamento pode identificar se o usuário possui um ou mais aplicativos correspondentes aos métodos de pagamento suportados identificados no JSON arquivo. Esta implementação é inspirada no Google Protocolo de links de ativos digitais é assim que os sites redirecionam você do site móvel para o aplicativo, se você já o tiver instalado.

Depois de muitas idas e vindas internas do grupo, finalmente em 25 de novembro de 2016, Zach Koch do Google e Dapeng Liu do Alibaba enviaram uma minuta inicial do Manifesto do Meio de Pagamento para iniciar o processo de padronização dos Identificadores de Métodos de Pagamento com o qual todos os membros concordassem. Eventualmente, membros do Grupo de Trabalho se encontraram pessoalmente em Chicago entre 23 e 24 de março para analisar a API de solicitação de pagamento, a proposta de manifesto de pagamento e muito mais. O Grupo de Trabalho votou para adotar formalmente uma nova versão da Proposta de Manifesto de Pagamento (versão 2), que é onde estamos hoje.


Suporte para API de solicitação de pagamento

Em 10 de maio, o suporte para aplicativos de pagamento Android de terceiros será agora ativado por padrão no Chromium desde que o pré-requisito do manifesto de pagamento da web foi aprovado no branch blink-dev (Blink é o nome do mecanismo de renderização usado pelo Chrome). Observe que esse recurso está em testes no Chrome há meses, mas só recentemente parece que o grupo está pronto para prosseguir com isso. Este recurso será lançado em todas as plataformas/versões do Chromium, exceto Android Webview (que não possui uma UI e, portanto, não pode implementar a API de solicitação de pagamento).

Somente depois de meses de trabalho nos bastidores é que veremos os benefícios daquilo em que o Grupo de Trabalho de Pagamentos pela Web tem trabalhado. No Google I/O, a empresa provavelmente anunciará que o Google Chrome será fornecido com a API de solicitação de pagamento habilitada, e Zach Koch mencionou anteriormente dará sua palestra na quinta-feira sobre como provedores de pagamento terceirizados podem oferecer suporte à API criando JSON de manifesto de pagamento arquivos.

Outros navegadores também estão trabalhando para adicionar suporte à API de solicitação de pagamento. Mozilla e a Samsung expressaram apoio público à adição da API, embora de acordo com o Googler Rouslan Solomakhin ainda não se sabe se o navegador Edge da Microsoft ou o Safari da Apple adicionarão suporte. Devemos observar que a Microsoft está já testando a API de solicitação de pagamento para aplicativos da Plataforma Universal do Windows (UWP) e em pelo menos um banco já implementou apoio (Monzo) em seu aplicativo.

Quanto a outros comerciantes on-line e aplicativos Android que suportarão esta nova especificação de pagamento, de acordo com o Googler Zach Koch:

O número de "provedores de métodos de pagamento" que precisariam implementar esta especificação é muito pequeno (centenas), e no momento estamos trabalhando diretamente apenas com um subconjunto muito pequeno deles (<5) para testar as águas. Se nos depararmos com uma situação em que precisássemos alterar um dos campos, acho que poderíamos fazê-lo facilmente e sem muito (se houver) risco de interoperabilidade. Todos os nossos primeiros parceiros estão cientes de que esta especificação pode mudar e concordam com isso.

Implementar isso é fundamental para permitir que outros jogadores participem do ecossistema de relações públicas, pelo menos no Android. Eu realmente prefiro não seguir o caminho proprietário completo para habilitar aplicativos nativos do Android. Mantivemos a presença intencionalmente pequena para deixar espaço para crescimento e casos de uso mais avançados.

Assim, podemos ver que embora o Google seja pioneiro no suporte à API de solicitação de pagamento, levará algum tempo até que realmente vejamos essa nova forma de pagamento chegar a todos os navegadores, todos os comerciantes on-line e todos os aplicativos. Pessoalmente, estou muito animado em ver a API de solicitação de pagamento ser suportada pelo Google. O ecossistema de comércio eletrônico tem sido desnecessariamente fragmentado com métodos de pagamento há anos, e se esta nova API significa que nunca mais terei que inserir as informações do meu cartão de crédito manualmente em um site, então sou totalmente a favor isto.


O que você acha deste próximo padrão? Fale nos comentários e deixe-nos saber a sua opinião!