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 TLS sonlandırmayla barındırabilirsiniz. Bunun için Google App Engine'i veya Google ile yapılandırılan alanda kendi çözümünüzü kullanabilirsiniz.
  • Java ortamınızda yüklü olmalıdır.

Neler Öğreneceksiniz?

  • Google echo API'ye geçerli bir istekte bulunarak bağlantı nasıl doğrulanır?
  • Google'dan İş Ortağı Tarafından Barındırılan echo API'ye yapılan istekleri alma, şifresini çözme ve ayrıştırma.

2. Kurulum ve Gereksinimler

Uygulamayı İndir

Java örnek kodunu indirin.

Uygulama Yapısına Genel Bakış

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

Bu dizinlerin her ikisi de paketleme açısından benzer bir hiyerarşiye sahiptir. Üç ana katman controller, service ve domain'dir.

  • API'leri controller paketinde içerir.
  • service paketi iş mantığı, base64url kodlaması ve şifrelemeden sorumludur.
  • domain paketinde POJO var.

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

Proje dizinine gidin ve Maven Wrapper'ı 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ü Hesap Kimliğini (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 PIAID'nizi Google'dan almış olmanız gerekir.

  1. Proje dizininde src/main/resources/application.properties adresine gidin.
  2. payment.integrator.account.id mülkünü, Google tarafından size verilen PIAID'ye ayarlayın.
payment.integrator.account.id={YOUR_PAYMENT_INTEGRATOR_ACCOUNT_ID}

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

Google tarafından barındırılan echo URL'si, hangi API ile entegre ettiğinize bağlı olarak değişiklik gösterir. Kendi entegrasyon türünüzle ilgili API referans dokümanlarını inceleyin ve teşhis yankısı API'sinin URL'sini kopyalayın. URL'yi kopyaladıktan sonra, Java projesinde güncellemek için sonraki adımlara geçin.

  1. Proje dizininde src/main/resources/application.properties adresine gidin.
  2. API_SERVICE_NAME özelliğini, geliştirici dokümanlarındakilerle eşleşecek şekilde ayarlayın.
google.hosted.echo.url=vgw.googleapis.com/gsp/{API_SERVICE_NAME}/echo/

5. PGP anahtarları ekle

Aşağıda gösterildiği gibi, PGP şifrelemesini etkinleştirmek için PGP anahtarlarınızı ekleyin.

  • src/resources/publicKey1.gpg adresine gidip ASCII zırhlı ortak anahtarını dosyaya ekleyin.
  • src/resources/privateKey1.gpg adresine gidip ASCII zırhlı özel anahtarı dosyaya ekleyin.
  • src/resources/passphrase1.txt sayfasına gidin ve gizli parolayı dosyaya ekleyin.

PGP anahtarları ekleme

Çift anahtarlı şifrelemeyi etkinleştirmek için ikinci ortak anahtarınızı publicKey2.gpg hizmetine, ikinci özel anahtarınızı privateKey2.gpg ürününe ve ikinci parolanızı passphrase.txt öğesine ekleyin. İkinci anahtarları ekledikten sonra KeyConfig.addPrivateKeyAndPassphrase(...) ve KeyConfig.addPublicKeys(...) ürünlerinde ikinci anahtar çiftini yüklemekten sorumlu olan yorum dışı bırakılmış kod satırlarının açıklamasını 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 çalıştırı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, verileri varsayılan olarak 8080 numaralı bağlantı noktasında dinleyecektir. 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 etme

Uygulama çalıştığına göre sıra Google echo API ile bağlantıyı test etmeye geldi.

Swagger kullanıcı arayüzü veya CLI, örnek uygulama örneğinizden Google'ın sunucularına bir çağrı başlatmak için aşağıdaki komutu çalıştırmak için kullanılabilir. Örnek uygulama echo API'si, şifrelenmemiş metin biçiminde bir POST isteğini kabul eder. İsteği aldıktan sonra, Google tarafından barındırılan API'ye bir istek gönderilir.

Komut satırı üzerinden istek gönderme

Komutu çalıştırmadan önce HOSTNAME kısmını 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 kullanıcı arayüzüyle istek göndermek için https://{APPLICATION_HOST}/swagger-ui adresine gidip istek gövdesinde istemci mesajını ayarlayın. İsteği Google'a göndermeye hazır olduğunuzda "Yürüt" düğmesini tıklayın.

Swagger üzerinden GSP Yankı isteği gönderme

Yanıtı alma

Başarılı bir API isteği Google'ın aşağıdaki yanıtını verir.

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

Adım adım

Sunucunuz tarafından başarıyla istek gönderildiğine göre, şimdi de nasıl çalıştığını inceleyelim.

İsteği oluşturma

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

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

Oluşturulan istek, clientMessage ile birlikte 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!"
}

Base64url olarak kodlama ve isteği şifreleme

Tüm istekler şifrelenir ve base64url olarak kodlanır. Bu örnekte PgpEncryptor.java, sizin için base64url kodlamasının yanı sıra şifreleme ve şifre çözme işlemlerini yapan yardımcı yöntemler içerir. Aşağıdaki yöntem, isteği kodlar ve Google'ın ortak anahtarını kullanarak şifreleme gerçekleştirir.

String encryptedMessage = pgpEncryptor.encrypt(jsonEchoRequestMessage);

POST isteğini gönderin

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

postStandardPaymentsEchoApi(encryptedMessage)

Yanıtın şifresini çözerek base64url'nin şifresini çözün ve yanıtı döndürür

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 önce kodunun çözülmesi ve şifresinin çözülmesi gerekir. decrypt yöntemi base64url, yanıtın kodunu çözer ve yanıtın şifresini çözer.

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

Yanıtı geri ver

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 et

Google, gelen echo API Bağlantısı'nı test etmek için İş Ortağı Tarafından Barındırılan echo API'ye bir istek gönderir. Hazır olduğunuzda, Google'ın bu isteğini tetiklemek için lütfen Google irtibat kişinizle birlikte çalışın.

Google'dan gelen yankı isteğini okuyabildiğinizde ve geçerli bir yankı yanıtıyla yanıt verebildiğinizde yankı testi tamamlanmış olur.

Adım adım

Artık sunucunuz tarafından bir istek başarıyla alındığına ve işlendiğine göre, şimdi de bunun nasıl çalıştığını inceleyelim.

Base64url kodunu çöz ve isteğin şifresini çöz

Bir istek alındığında PgpEncryptor.java decrypt yöntemini çağırır. Base64url, isteğin kodunu çözer ve şifresini çözer.

String decryptedRequest = pgpEncryptor.decrypt(echoRequest);

İsteği alma

Google, kodu çözüldükten ve şifresi çözüldükten sonra aşağıdakine benzer bir ileti yükü gönderdi.

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

Yanıtı oluşturun

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

private EchoResponse convertEchoRequestStringToEchoResponse(String decryptedRequest);

Yanıtta, Google'dan gelen ileti, zaman damgası ve sunucudan gelen mesaj yer alır.

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

Base64url yanıtı kodla ve şifrele

Tüm istekler şifrelendiğinden ve base64url olarak kodlandığından, PgpEncryptor.java isteği base64url olarak kodlayıp şifrelemeye encrypt çağrısı yapar.

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