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.
- Navegue até
src/main/resources/application.properties
no diretório do projeto. - 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.
- Navegue até
src/main/resources/application.properties
no diretório do projeto. - 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.
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.
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.