1. Antes de começar
Este é um codelab autoguiado que mostra como estabelecer a conectividade com as APIs Stanadard Payments.
Pré-requisitos
- Você concluiu as etapas 1 e 2 do processo de implementação.
- Você pode hospedar o servidor Node.js fornecido com terminação TLS usando o Google App Engine ou sua própria solução no domínio configurado com o Google.
- O Node.js está instalado no seu ambiente.
O que você vai aprender
- Como verificar a conectividade fazendo uma solicitação válida para a API Google Standard Payments echo.
- Como receber, descriptografar e analisar uma solicitação do Google para a API Partner Hosted Echo.
2. Configuração e requisitos
Faça o download do aplicativo
Faça o download do exemplo de código do Node.js.
Instalar dependências
Navegue até o diretório do projeto e execute o seguinte comando para instalar as dependências necessárias. Se estiver usando o App Engine, pule esta etapa.
npm install
3. Configurar o ID da conta do integrador de pagamentos (PIAID, na sigla em inglês)
O ID da conta do integrador de pagamentos (PIAID
) é um identificador usado para identificar suas integrações de maneira exclusiva. Você deve ter recebido seu PIAID do Google ao concluir os pré-requisitos antes de iniciar este tutorial.
- Navegue até o arquivo
server.js
no diretório do projeto. - Defina a variável
PIAID
como o PIAID que foi emitido pelo Google.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';
4. Adicionar chaves PGP
Crie os arquivos a seguir na estrutura do projeto e adicione suas chaves PGP para ativar a criptografia PGP.
- Crie um arquivo com o nome
public.key
e adicione a chave pública blindada ASCII ao arquivo. - Crie um arquivo com o nome
private.key
e adicione a chave privada blindada ASCII ao arquivo. - Crie um arquivo chamado
passphrase.txt
e adicione a ele a senha longa secreta.
Ótimo! Você já pode executar o aplicativo.
5. Execute o aplicativo
Para iniciar o aplicativo, execute o comando a seguir.
$ node server.js Server listening on port 8080...
Se você estiver executando uma instância pré-configurada do App Engine, execute este comando.
$ gcloud app deploy
Por padrão, o servidor escuta a porta 8080.
6. Testar a conectividade da API Google Standard Payments
Agora que o aplicativo está em execução, é hora de testar a conectividade com a API Google Standard Payments echo.
Execute o comando a seguir para iniciar uma chamada da sua instância do aplicativo de exemplo para os servidores do Google. A API echo do aplicativo de exemplo aceita uma solicitação POST em texto simples. Depois de receber a solicitação, uma solicitação subsequente é enviada para a API hospedada pelo Google.
$ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Little Bear' https://{HOSTNAME}/echo
Uma solicitação de API bem-sucedida resultará na seguinte resposta do Google.
{ "responseHeader":{ "responseTimestamp":"1606710026723" }, "clientMessage":"Hello from Little Bear", "serverMessage":"Server message." }
Instruções detalhadas
Agora que uma solicitação foi enviada pelo servidor, vamos analisar como isso funcionou.
Criar a solicitação
buildEchoRequestBody
em bodyHelpers.js
cria a solicitação echo
enviada à API do Google.
const message = bodyHelpers.buildEchoRequestBody(req.body);
A solicitação gerada inclui o clientMessage
e vários campos de valor padrão.
{
"requestHeader":{
"protocolVersion":{
"major":1,
"minor":0,
"revision":0
},
"requestId":"ddfe0fd0-ffdc-4fcf-991a-f0611ec83970",
"requestTimestamp":"1606715389040"
},
"clientMessage":"Hello from Little Bear"
}
Criptografar a solicitação
Todas as solicitações são criptografadas e codificadas em base64url. Neste exemplo, crypto.js
contém métodos auxiliares que realizam criptografia e descriptografia para você. O método crypto.encrypt
executa a criptografia usando a chave pública do Google.
const encrypted = await crypto.encrypt(message);
Enviar a solicitação POST codificada em base64url
A mensagem criptografada é codificada em base64url com o pacote base64url e enviada por uma solicitação POST usando axios.
const response = await axios.post(ECHO_URL, base64url(encrypted), AXIOS_CONFIG);
Descriptografar e retornar a resposta
A resposta bem-sucedida do Google é codificada e criptografada em base64url. Portanto, ela também precisa ser decodificada e descriptografada antes de ser retornada em texto simples.
const encryptedMessage = base64url.toBuffer(response.data);
const decryptedResponse = await crypto.decrypt(encryptedMessage);
res.status(200);
res.send(decryptedResponse);
7. Testar a conectividade da API Partner
Para testar a conectividade da API Partner Hosted echo, o Google enviará uma solicitação à API Partner Hosted echo.
Quando estiver tudo pronto, fale com seu ponto de contato do Google para acionar essa solicitação.
O teste echo será concluído quando você conseguir ler a solicitação echo de entrada do Google e responder com uma resposta echo válida.
Instruções detalhadas
Agora que uma solicitação foi recebida e processada pelo servidor, vamos analisar como isso funcionou.
Decodificar a solicitação em Base64url
Quando você receber a solicitação, primeiro terá que decodificá-la em base64url.
const encryptedRequest = base64url.toBuffer(req.body);
Descriptografar a solicitação
Depois de decodificar a solicitação em base64url, você precisa descriptografá-la.
const decryptedRequest = await crypto.decrypt(encryptedRequest);
Receber a solicitação
O Google enviou um payload de mensagem semelhante ao seguinte depois que ela foi decodificada e descriptografada.
{ "requestHeader": { "protocolVersion": { "major": 1 }, "requestId": "G1MQ0YERJ0Q7LPM", "requestTimestamp": { "epochMillis":1481899949606 }, "paymentIntegratorAccountId": "abcdef123456" }, "clientMessage": "echo Me" }
Criar a resposta
Depois de ler a solicitação echo de entrada, você poderá criar a resposta.
clientMessage = JSON.parse(decryptedRequest).clientMessage;
responseBody = bodyHelpers.buildEchoResponseBody(clientMessage);
A resposta inclui a mensagem do Google, bem como um carimbo de data/hora e uma mensagem do servidor.
{ "responseHeader": { "responseTimestamp": { "epochMillis":1481899950236 } }, "clientMessage": "echo Me", "serverMessage": "Debug ID 12345" }
Criptografar e codificar a resposta em base64
Depois de criar a mensagem de resposta, você poderá criptografá-la e codificá-la em base64url.
encryptedResponse = await crypto.encrypt(responseBody);
const encodedResponse = base64url(encryptedResponse);
Retornar a resposta
Por fim, está tudo pronto para você enviar a resposta POST.
res.send(encodedResponse);
8. Parabéns!
Neste codelab, você estabeleceu a conectividade com a API Echo.