Como estabelecer conectividade com as APIs Payments no Node.js

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.

  1. Navegue até o arquivo server.js no diretório do projeto.
  2. 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.

Como adicionar chaves PGP

Ó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.