Come stabilire la connettività con le API di Google in Java

1. Prima di iniziare

Prerequisiti

  • Hai completato i passaggi 1 e 2 della procedura di implementazione.
  • Puoi ospitare il server Java fornito con terminazione TLS utilizzando Google App Engine o la tua soluzione nel dominio configurato con Google.
  • Java è installato nel tuo ambiente.

Obiettivi didattici

  • Come verificare la connettività effettuando una richiesta valida all'API Google Echo.
  • Come ricevere, decriptare e analizzare una richiesta da Google all'API Partner Hosted echo.

2. Configurazione e requisiti

Scaricare l'applicazione

Scarica il codice campione Java.

Panoramica della struttura dell'applicazione

Il codice di esempio Java si integra con le API Standard Payments di Google. La struttura del progetto di codice di esempio contiene una directory outbound e una directory inbound per riflettere la richiesta di echo in entrata da Google al partner e la richiesta in uscita dall'implementazione dei partner a Google.

Entrambe queste directory contengono una gerarchia simile nel packaging per livello. I tre livelli principali sono controller, service e domain.

  • Il pacchetto controller contiene le API.
  • Il pacchetto service è responsabile della logica di business, della codifica base64url e della crittografia.
  • Il pacchetto domain contiene POJO.

Installa le dipendenze

Vai alla directory del progetto ed esegui questo comando per installare le dipendenze richieste utilizzando Maven Wrapper. Se utilizzi App Engine, puoi saltare questo passaggio.

./mvnw install

3. Configurare l'ID account integratore di pagamento (PIAID)

L'ID account integratore dei pagamenti (PIAID) è un identificatore utilizzato per identificare in modo univoco le tue integrazioni. Prima di iniziare questo tutorial, dovresti aver ricevuto il tuo ID inserzionista Google completando i prerequisiti.

  1. Vai a src/main/resources/application.properties nella directory del progetto.
  2. Imposta la proprietà payment.integrator.account.id sull'ID pubblicità personale che ti è stato rilasciato da Google.
payment.integrator.account.id={YOUR_PAYMENT_INTEGRATOR_ACCOUNT_ID}

4. Imposta l'URL di echo ospitato da Google

L'URL echo ospitato da Google varia a seconda dell'API con cui esegui l'integrazione. Visita la documentazione di riferimento dell'API per il tipo di integrazione specifico e copia l'URL dell'API di echo diagnostico. Dopo aver copiato l'URL, procedi ai passaggi successivi per aggiornarlo nel progetto Java.

  1. Vai a src/main/resources/application.properties nella directory del progetto.
  2. Imposta la proprietà API_SERVICE_NAME in modo che corrisponda a quanto riportato nella documentazione per gli sviluppatori.
google.hosted.echo.url=vgw.googleapis.com/gsp/{API_SERVICE_NAME}/echo/

5. Aggiungere chiavi PGP

Come mostrato di seguito, aggiungi le chiavi PGP per abilitare la crittografia PGP.

  • Vai a src/resources/publicKey1.gpg e aggiungi la chiave pubblica ASCII armored al file.
  • Vai a src/resources/privateKey1.gpg e aggiungi la chiave privata ASCII armored al file.
  • Vai a src/resources/passphrase1.txt e aggiungi la passphrase segreta al file.

Aggiunta di chiavi PGP

Per attivare la crittografia a doppia chiave, aggiungi la seconda chiave pubblica a publicKey2.gpg, la seconda chiave privata a privateKey2.gpg e la seconda passphrase a passphrase.txt. Dopo aver aggiunto le seconde chiavi, rimuovi il commento dalle righe di codice commentate responsabili del caricamento della seconda coppia di chiavi in KeyConfig.addPrivateKeyAndPassphrase(...) e KeyConfig.addPublicKeys(...).

Ottimo, ora puoi eseguire l'applicazione.

6. Esegui l'applicazione

Per avviare l'applicazione, esegui questo comando.

  $ ./mvnw spring-boot:run

Se esegui un'istanza App Engine preconfigurata, esegui questo comando.

$ gcloud app deploy

Per impostazione predefinita, il server rimane in ascolto sulla porta 8080. Per visualizzare la UI Swagger di Open API, vai all'URL riportato di seguito.

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

7. Testare la connettività dell'API in uscita di Google Standard Payments

Ora che l'applicazione è in esecuzione, è il momento di testare la connettività con l'API Google Echo.

Puoi utilizzare Swagger UI o la CLI per eseguire il seguente comando per avviare una chiamata dall'istanza dell'applicazione di esempio ai server di Google. L'API echo dell'applicazione di esempio accetta una richiesta POST in testo non crittografato. Dopo aver ricevuto la richiesta, viene inviata una richiesta successiva all'API ospitata da Google.

Inviare una richiesta tramite la riga di comando

Sostituisci HOSTNAME con il nome dell'host del server prima di eseguire il comando.

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

Inviare una richiesta in Swagger UI

Per inviare una richiesta con Swagger UI, vai a https://{APPLICATION_HOST}/swagger-ui e imposta il messaggio del client nel corpo della richiesta. Fai clic sul pulsante "Esegui" quando è tutto pronto per inviare la richiesta a Google.

Invio di una richiesta GSP Echo tramite Swagger

Ricevere la risposta

Una richiesta API riuscita genererà la seguente risposta da Google.

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

Istruzioni dettagliate

Ora che una richiesta è stata inviata correttamente dal tuo server, esaminiamo come ha funzionato.

Crea la richiesta

createEchoRequestWithMessage in OutboundEchoService crea la richiesta echo inviata all'API di Google.

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

La richiesta generata include clientMessage, nonché diversi campi con valori predefiniti.

{
   "requestHeader":{
      "protocolVersion":{
         "major":1,
         "minor":0,
         "revision":0
      },
      "requestId":"ddfe0fd0-ffdc-4fcf-991a-f0611ec83970",
      "requestTimestamp":"1606715389040"
   },
   "clientMessage":"Hello from Bank Little Bear!"
}

Codifica Base64url e cripta la richiesta

Tutte le richieste sono criptate e codificate in base64url. In questo esempio, PgpEncryptor.java contiene metodi helper che eseguono la crittografia e la decrittografia, nonché la codifica base64url. Il metodo riportato di seguito codifica la richiesta ed esegue la crittografia utilizzando la chiave pubblica di Google.

String encryptedMessage = pgpEncryptor.encrypt(jsonEchoRequestMessage);

Invia la richiesta POST

Il messaggio criptato viene inviato tramite una richiesta POST.

postStandardPaymentsEchoApi(encryptedMessage)

Decripta e decodifica base64url la risposta e restituiscila

La risposta positiva di Google è codificata e criptata in base64url, quindi deve essere decodificata e decriptata prima di poter essere restituita in testo normale. Il metodo decrypt decodifica e decripta la risposta con codifica base64url.

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

Restituisci la risposta

La risposta viene restituita con un codice di stato della risposta HTTP 202.

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

8. Testare la connettività dell'API in entrata

Per testare la connettività dell'API echo in entrata, Google invierà una richiesta all'API echo ospitata dal partner. Quando è tutto pronto, collabora con il tuo punto di contatto Google per attivare questa richiesta da Google.

Il test di eco è completato quando riesci a leggere la richiesta di eco in entrata da Google e a rispondere con una risposta di eco valida.

Istruzioni dettagliate

Ora che una richiesta è stata ricevuta e gestita correttamente dal tuo server, esaminiamo come ha funzionato.

Decodifica Base64url e decripta la richiesta

Quando viene ricevuta una richiesta, PgpEncryptor.java chiamerà decrypt, che decodificherà e decrittograferà la richiesta con base64url.

String decryptedRequest = pgpEncryptor.decrypt(echoRequest);

Ricevere la richiesta

Google ha inviato un payload del messaggio simile al seguente una volta decodificato e decriptato.

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

Crea la risposta

Una volta letta correttamente la richiesta di echo in entrata, puoi creare la risposta.

private EchoResponse convertEchoRequestStringToEchoResponse(String decryptedRequest);

La risposta include il messaggio di Google, nonché un timestamp e un messaggio del server.

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

Codifica Base64url e cripta la risposta

Poiché tutte le richieste sono criptate e codificate in base64url, PgpEncryptor.java chiama encrypt per codificare e criptare la richiesta in base64url.

pgpEncryptor.encrypt(echoResponseString)

Restituisci la risposta

La risposta viene restituita con un codice di stato della risposta HTTP 202.

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

9. Complimenti!

In questo codelab, hai stabilito correttamente la connettività con l'API Payments.