Java'da Google API'leriyle bağlantı kurma

1. Başlamadan önce

Ön koşullar

  • Uygulama sürecinin 1. ve 2. adımlarını tamamladınız.
  • Sağlanan Java sunucusunu, Google App Engine'i veya Google ile yapılandırılan alanda kendi çözümünüzü kullanarak TLS sonlandırmalı olarak barındırabilirsiniz.
  • Ortamınızda Java yüklü olmalıdır.

Neler Öğreneceksiniz?

  • Google echo API'ye geçerli bir istek göndererek bağlantıyı doğrulama.
  • Google'dan gelen istekleri alma, bunların şifresini çözme ve İş Ortağı Tarafından Barındırılan yankı API'sine ayrıştırma.

2. Kurulum ve Gereksinimler

Uygulamayı İndirin

Java örnek kodunu indirin.

Uygulama Yapısına Genel Bakış

Java örnek kodu, Google'ın Standard Payments API'leriyle entegre edilir. Örnek kod proje yapısı, Google'dan iş ortağına gelen yankı isteğini ve iş ortağı uygulamasından Google'a giden isteği yansıtmak için bir outbound dizini ve bir inbound dizini içerir.

Bu dizinlerin her ikisi de katmana göre paketlemede benzer bir hiyerarşi içerir. Üç ana katman controller, service ve domain'dir.

  • controller paketi API'leri içerir.
  • service paketi iş mantığı, base64url kodlaması ve şifreleme işlemlerinden sorumludur.
  • domain paketi POJO'lar içeriyor.

Bağımlılıkları Yükleme

Proje dizinine gidin ve Maven Sarmalayıcı'yı kullanarak gerekli bağımlılıkları yüklemek için aşağıdaki komutu çalıştırın. App Engine kullanıyorsanız bu adımı atlayabilirsiniz.

./mvnw install

3. Ödeme Entegratörü Hesabı Kimliği'ni (PIAID) yapılandırma

Ödeme Entegratörü Hesap Kimliği (PIAID), entegrasyonlarınızı benzersiz şekilde tanımlamak için kullanılan bir tanımlayıcıdır. Bu eğitime başlamadan önce ön koşulları tamamlayarak Google'dan PIAID kodunuzu almış olmanız gerekir.

  1. Proje dizininde src/main/resources/application.properties dizinine gidin.
  2. payment.integrator.account.id özelliğini, Google tarafından size verilen PIAID olarak ayarlayın.
payment.integrator.account.id={YOUR_PAYMENT_INTEGRATOR_ACCOUNT_ID}

4. Google tarafından barındırılan yankı URL'sini ayarla

Google tarafından barındırılan echo URL'si, entegre ettiğiniz API'ye bağlı olarak farklılık gösterir. Belirli entegrasyon türünüze ait API referans dokümanlarını ziyaret edin ve teşhis yankısı API'sinin URL'sini kopyalayın. URL'yi kopyaladıktan sonra Java projesinde URL'yi güncellemek için sonraki adımlara geçin.

  1. Proje dizininde src/main/resources/application.properties dizinine gidin.
  2. API_SERVICE_NAME mülkünü, geliştirici dokümanlarında bulunanlarla eşleşecek şekilde ayarlayın.
google.hosted.echo.url=vgw.googleapis.com/gsp/{API_SERVICE_NAME}/echo/

5. PGP anahtarları ekle

PGP şifrelemeyi etkinleştirmek için aşağıdaki gibi PGP anahtarlarınızı ekleyin.

  • src/resources/publicKey1.gpg bölümüne gidin ve ASCII zırhlı ortak anahtarı dosyaya ekleyin.
  • src/resources/privateKey1.gpg adresine gidin ve ASCII zırhlı özel anahtarı dosyaya ekleyin.
  • src/resources/passphrase1.txt adresine gidin ve gizli şifreyi dosyaya ekleyin.

PGP anahtarları ekleme

Çift anahtar şifrelemeyi etkinleştirmek için ikinci genel anahtarınızı publicKey2.gpg, ikinci özel anahtarınızı privateKey2.gpg ve ikinci şifrenizi passphrase.txt alanına ekleyin. İkinci anahtarları ekledikten sonra, KeyConfig.addPrivateKeyAndPassphrase(...) ve KeyConfig.addPublicKeys(...)'a ikinci anahtar çiftini yüklemekten sorumlu olan kod satırlarının yorumunu kaldırın.

Harika, uygulamayı çalıştırmaya hazırsınız!

6. Uygulamayı çalıştırma

Uygulamayı başlatmak için aşağıdaki komutu yürütün.

  $ ./mvnw spring-boot:run

Önceden yapılandırılmış bir App Engine örneği çalıştırıyorsanız bunun yerine bu komutu çalıştırın.

$ gcloud app deploy

Sunucu varsayılan olarak 8080 bağlantı noktasında dinler. Open API Swagger kullanıcı arayüzünü görüntülemek için aşağıdaki URL'ye gidin.

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

7. Google Standard Payments Outbound API bağlantısını test edin

Uygulama artık çalışıyor. Şimdi Google echo API ile bağlantıyı test etme zamanı.

Aşağıdaki komutu çalıştırarak örnek uygulama örneğinizden Google'ın sunucularına bir çağrı başlatmak için Swagger kullanıcı arayüzü veya CLI kullanılabilir. Örnek uygulama yankısı API'si düz metin biçiminde bir POST isteğini kabul ediyor. İstek alındıktan sonra Google tarafından barındırılan API'ye bir takip isteği gönderilir.

Komut satırı üzerinden istek gönderme

Komutu yürütmeden önce HOSTNAME değerini sunucu ana makinenizin adıyla değiştirin.

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

Swagger kullanıcı arayüzünde istek gönderme

Swagger UI ile istek göndermek için https://{APPLICATION_HOST}/swagger-ui adresine gidin ve istek gövdesinde istemci mesajını ayarlayın. "Yürüt"ü tıklayın. düğmesini tıklayın.

Swagger üzerinden GSP Echo isteği gönderme

Yanıtı alma

Başarılı bir API isteği, Google'dan aşağıdaki yanıtı alır.

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

Adım adım

Sunucunuz tarafından başarıyla bir istek gönderildiğine göre, şimdi bu isteğin nasıl işlediğine bakalım.

İsteği oluşturma

OutboundEchoService içindeki createEchoRequestWithMessage, Google'ın API'sine gönderilen echo isteğini oluşturur.

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

Oluşturulan istek, clientMessage'nin yanı sıra birkaç varsayılan değer alanını içerir.

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

İsteği Base64URL olarak kodlayın ve şifreleyin

Tüm istekler şifrelenmiş ve base64url kodlanıyor. Bu örnekte PgpEncryptor.java, şifreleme ve şifre çözme işlemlerinin yanı sıra base64url kodlamasını sizin için gerçekleştiren yardımcı yöntemler içerir. Aşağıdaki yöntem, isteği kodlar ve Google'ın genel anahtarını kullanarak şifreleme işlemi gerçekleştirir.

String encryptedMessage = pgpEncryptor.encrypt(jsonEchoRequestMessage);

POST isteğini gönderme

Şifrelenmiş ileti, POST isteği aracılığıyla gönderilir.

postStandardPaymentsEchoApi(encryptedMessage)

Yanıtın şifresini çözme, base64url kod çözme ve yanıtı döndürme

Google'ın başarılı yanıtı base64url olarak kodlanır ve şifrelenir. Dolayısıyla, şifrenin şifrelenmemiş metin olarak döndürülebilmesi için de kodu çözülmüş ve şifresi çözülmüş olmalıdır. decrypt yöntemi base64url, yanıtın kodunu çözer ve şifresini çözer.

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

Yanıtı döndürme

Yanıt, 202 HTTP Yanıt Durum Kodu ile döndürülür.

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

8. Gelen API bağlantısını test etme

Google, gelen echo API bağlantısını test etmek için iş ortağı tarafından barındırılan echo API'ye istek gönderir. Hazır olduğunuzda, Google'dan bu isteği tetiklemek için lütfen Google iletişim kişinizle birlikte çalışın.

Google'dan gelen yankı isteğini okuyup geçerli bir yankı yanıtıyla yanıtladığınızda yankı testi tamamlanır.

Adım adım

Bir istek başarıyla alınıp sunucunuz tarafından işlendiğine göre, bunun nasıl çalıştığını inceleyelim.

Base64url ile isteğin kodunu çözme ve şifresini çözme

Bir istek alındığında PgpEncryptor.java, decrypt'yi çağırır. decrypt, isteğin base64url kodunu çözer ve şifresini çözer.

String decryptedRequest = pgpEncryptor.decrypt(echoRequest);

İsteği alma

Google, kod çözme ve şifre çözme işlemi tamamlandıktan sonra aşağıdakine benzer bir mesaj yükü gönderdi.

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

Yanıtı oluşturma

Gelen yankı isteğini başarıyla okuduktan sonra yanıtı oluşturmaya hazırsınız demektir.

private EchoResponse convertEchoRequestStringToEchoResponse(String decryptedRequest);

Yanıt, Google'dan gelen mesajın yanı sıra sunucudan gelen bir zaman damgası ve mesaj içerir.

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

Base64url'de yanıtı kodlayıp şifreleyin

Tüm istekler şifrelenmiş ve base64url kodlamalı olduğundan PgpEncryptor.java, isteği base64url kodlaması ve şifrelemesi için encrypt'yi çağırır.

pgpEncryptor.encrypt(echoResponseString)

Yanıtı geri ver

Yanıt, 202 HTTP Yanıt Durum Kodu ile döndürülür.

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

9. Tebrikler!

Bu codelab'de, Payments API ile bağlantıyı başarıyla oluşturdunuz.