Como estabelecer conectividade com as APIs do Google em Java

1. Antes de começar

Pré-requisitos

  • Você concluiu as etapas 1 e 2 do processo de implementação.
  • É possível hospedar o servidor Java fornecido com terminação TLS usando o Google App Engine ou sua própria solução no domínio configurado com o Google.
  • O Java está instalado no ambiente.

O que você vai aprender

  • Como verificar a conectividade fazendo uma solicitação válida para a API Google 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 código de amostra Java.

Visão geral da estrutura do aplicativo

O exemplo de código Java integra-se às APIs Standard Payments do Google. O exemplo de estrutura de projeto de código contém um diretório outbound e um diretório inbound para refletir a solicitação de transmissão de entrada do Google para o parceiro e a solicitação de saída da implementação do parceiro para o Google.

Os dois diretórios contêm uma hierarquia semelhante no empacotamento por camada. As três camadas principais são controller, service e domain.

  • O pacote controller contém as APIs.
  • O pacote service é responsável pela lógica de negócios, codificação base64url e criptografia.
  • O pacote domain contém POJOs.

Instalar dependências

Navegue até o diretório do projeto e execute o seguinte comando para instalar as dependências necessárias usando o Maven Wrapper. Se estiver usando o App Engine, pule esta etapa.

./mvnw 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 exclusivamente suas integrações. Você deve ter recebido seu PIAID do Google ao concluir os pré-requisitos antes de iniciar este tutorial.

  1. Navegue até src/main/resources/application.properties no diretório do projeto.
  2. Defina a propriedade payment.integrator.account.id como o PIAID que foi emitido pelo Google.
payment.integrator.account.id={YOUR_PAYMENT_INTEGRATOR_ACCOUNT_ID}

4. Definir o URL echo hospedado pelo Google

O URL echo hospedado pelo Google varia de acordo com a API que está sendo integrada. Consulte a documentação de referência da API para saber seu tipo de integração específico e copie o URL da API diagnostic echo. Depois de copiar o URL, avance para as próximas etapas para atualizá-lo no projeto Java.

  1. Navegue até src/main/resources/application.properties no diretório do projeto.
  2. Defina a propriedade API_SERVICE_NAME para corresponder ao que é encontrado na documentação do desenvolvedor.
google.hosted.echo.url=vgw.googleapis.com/gsp/{API_SERVICE_NAME}/echo/

5. Adicionar chaves PGP

Conforme mostrado abaixo, adicione suas chaves PGP para ativar a criptografia PGP.

  • Acesse src/resources/publicKey1.gpg e adicione a chave pública blindada ASCII ao arquivo.
  • Acesse src/resources/privateKey1.gpg e adicione a chave privada blindada ASCII ao arquivo.
  • Navegue até src/resources/passphrase1.txt e adicione a senha longa do secret ao arquivo.

Como adicionar chaves PGP

Para ativar a criptografia de chave dupla, adicione sua segunda chave pública a publicKey2.gpg, adicione sua segunda chave privada a privateKey2.gpg e sua segunda senha longa a passphrase.txt. Depois de inserir as segundas chaves, remova a marca de comentário das linhas comentadas do código que são responsáveis por carregar o segundo par de chaves em KeyConfig.addPrivateKeyAndPassphrase(...) e KeyConfig.addPublicKeys(...).

Ótimo, está tudo pronto para executar o aplicativo.

6. Execute o aplicativo

Para iniciar o aplicativo, execute o comando a seguir.

  $ ./mvnw spring-boot:run

Se você estiver executando uma instância pré-configurada do App Engine, execute este comando:

$ gcloud app deploy

Por padrão, o servidor escuta na porta 8080. Para visualizar a interface do Swagger de API aberta, navegue até o URL abaixo.

https://{APPLICATION_HOST}/swagger-ui.html

7. Testar a conectividade da API Google Standard Payments Outbound

Agora que o aplicativo está em execução, é hora de testar a conectividade com a API Google echo.

A interface do Swagger ou a CLI podem ser usadas para executar o comando a seguir e iniciar uma chamada da 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, outra é enviada para a API hospedada pelo Google.

Enviar uma solicitação pela linha de comando

Substitua HOSTNAME pelo nome do host do servidor antes de executar o comando.

  $ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Partner Bank!' https://{HOSTNAME}/echo

Enviar uma solicitação na IU do Swagger

Para enviar uma solicitação com a IU Swagger, acesse https://{APPLICATION_HOST}/swagger-ui e defina a mensagem do cliente no corpo da solicitação. Clique no botão "Executar" quando estiver tudo pronto para enviar a solicitação ao Google.

Como enviar uma solicitação de Echo de GSP pelo Swagger

Receber a resposta

Uma solicitação de API bem-sucedida resultará na seguinte resposta do Google.

{
   "responseHeader":{
      "responseTimestamp":"1606710026723"
   },
   "clientMessage":"Hello from  Bank Little Bear!",
   "serverMessage":"Server message."
}

Navegação guiada

Agora que a solicitação foi enviada pelo seu servidor, vejamos como isso funcionou.

Criar a solicitação

O createEchoRequestWithMessage em OutboundEchoService cria a solicitação echo enviada para a API do Google.

String jsonEchoRequestMessage = objectMapper.writeValueAsString(createEchoRequestWithMessage(message));

A solicitação gerada inclui o clientMessage, bem como 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 Bank Little Bear!"
}

Codificar e criptografar a solicitação em Base64url

Todas as solicitações são criptografadas e codificadas em base64url. Neste exemplo, PgpEncryptor.java contém métodos auxiliares que executam criptografia e descriptografia, além da codificação base64url para você. O método abaixo codifica a solicitação e realiza criptografia usando a chave pública do Google.

String encryptedMessage = pgpEncryptor.encrypt(jsonEchoRequestMessage);

Enviar a solicitação POST

A mensagem criptografada é enviada por uma solicitação POST.

postStandardPaymentsEchoApi(encryptedMessage)

Descriptografar e decodificar a resposta em base64url 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. O método decrypt em base64url decodifica e descriptografa a resposta.

String decryptedData =
     pgpEncryptor.decrypt(postStandardPaymentsEchoApi(encryptedMessage).getBody());

Retornar a resposta

A resposta será retornada com um código de status de resposta HTTP 202.

return new ResponseEntity<>(decryptedData, HttpStatus.ACCEPTED);

8. Testar a conectividade da API Inbound

Para testar a conectividade da API de entrada echo, o Google enviará uma solicitação para a API Partner Hosted echo. Quando estiver tudo pronto, fale com seu ponto de contato do Google para acionar essa solicitação.

O teste echo vai ser concluído quando você puder ler a solicitação echo de entrada do Google e enviar uma resposta echo válida.

Navegação guiada

Agora que uma solicitação foi recebida e processada pelo servidor, vamos analisar como isso funcionou.

Decodificar e descriptografar a solicitação em Base64url

Quando uma solicitação é recebida, PgpEncryptor.java chama decrypt, que vai decodificar e descriptografar a solicitação em base64url.

String decryptedRequest = pgpEncryptor.decrypt(echoRequest);

Receber a solicitação

O Google enviou um payload de mensagem semelhante ao seguinte, depois de ele ter sido decodificado e descriptografado.

{
  "requestHeader": {
    "protocolVersion": {
      "major": 1
    },
    "requestId": "G1MQ0YERJ0Q7LPM",
    "requestTimestamp": {
      "epochMillis":1481899949606
    },
    "paymentIntegratorAccountId": "abcdef123456"
  },
  "clientMessage": "echo Me"
}

Criar a resposta

Depois de ler a solicitação echo recebida, você poderá criar a resposta.

private EchoResponse convertEchoRequestStringToEchoResponse(String decryptedRequest);

A resposta inclui a mensagem do Google, bem como o carimbo de data/hora e a mensagem do servidor.

{
  "responseHeader": {
    "responseTimestamp": {
      "epochMillis":1481899950236
    }
  },
  "clientMessage": "echo Me",
  "serverMessage": "Debug ID 12345"
}

Codificar e criptografar a resposta em Base64url

Como todas as solicitações são criptografadas e codificadas em base64url, PgpEncryptor.java chama encrypt para codificar e criptografar a solicitação em base64url.

pgpEncryptor.encrypt(echoResponseString)

Retornar a resposta

A resposta será retornada com um código de status de resposta HTTP 202.

return new ResponseEntity<>(pgpEncryptor.encrypt(echoResponseString), HttpStatus.ACCEPTED);

9. Parabéns!

Neste codelab, você estabeleceu a conectividade com a API Payments.