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

1. Başlamadan önce

Ön koşullar

  • Uygulama sürecinin 1. ve 2. adımlarını tamamlamış olmanız gerekir.
  • Google App Engine'i veya Google ile yapılandırılmış alanda kendi çözümünüzü kullanarak, sağlanan Java sunucusunu TLS sonlandırmasıyla 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ı nasıl doğrulayacağınız açıklanmaktadır.
  • Google'dan İş Ortağı Tarafından Barındırılan Echo API'ye gelen bir isteği alma, şifresini çözme ve ayrıştırma

2. Kurulum ve Gereksinimler

Uygulamayı indirme

Java örnek kodunu indirin.

Uygulama Yapısına Genel Bakış

Java örnek kodu, Google'ın Standart Ödemeler API'leriyle entegre olur. Örnek kod proje yapısında, Google'dan iş ortağına gelen gelen istek ve iş ortağının uygulamasından Google'a giden isteği yansıtmak için outbound dizininin yanı sıra inbound dizini de bulunur.

Bu dizilerin her ikisi de katmanlara göre paketleme konusunda benzer bir hiyerarşi içerir. Üç ana katman controller, service ve domain'dir.

  • API'ler controller paketinde yer alır.
  • service paketi, iş mantığı, base64url kodlama ve şifrelemeden sorumludur.
  • domain paketi POJO'lar içeriyor.

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

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ü hesabı 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 Google'dan PIAID'nizi almış olmanız gerekir.

  1. Proje dizininde src/main/resources/application.properties konumuna gidin.
  2. payment.integrator.account.id mülkünü, 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 ayarlama

Google tarafından barındırılan echo URL, hangi API ile entegrasyon yaptığınıza bağlı olarak değişir. Belirli entegrasyon türünüz için API referans belgelerini ziyaret edin ve teşhis echo 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 konumuna gidin.
  2. API_SERVICE_NAME özelliğini, geliştirici dokümanlarında belirtilenle eşleşecek şekilde ayarlayın.
google.hosted.echo.url=vgw.googleapis.com/gsp/{API_SERVICE_NAME}/echo/

5. PGP anahtarları ekleme

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

  • src/resources/publicKey1.gpg simgesine gidin ve ASCII-Armored ortak anahtarını dosyaya ekleyin.
  • src/resources/privateKey1.gpg simgesine gidin ve ASCII armored özel anahtarı dosyaya ekleyin.
  • src/resources/passphrase1.txt konumuna gidin ve gizli parolayı dosyaya ekleyin.

PGP anahtarları ekleme

Çift anahtarlı şifrelemeyi etkinleştirmek için ikinci ortak anahtarınızı publicKey2.gpg, ikinci özel anahtarınızı privateKey2.gpg ve ikinci parola ifadenizi passphrase.txt'ye ekleyin. İkinci anahtarları ekledikten sonra, KeyConfig.addPrivateKeyAndPassphrase(...) ve KeyConfig.addPublicKeys(...) içinde ikinci anahtar çiftini yüklemekten sorumlu olan, yorum olarak işaretlenmiş kod satırlarının yorum işaretini 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 numaralı bağlantı noktasını 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 Giden API bağlantısını test etme

Uygulama çalışır duruma geldiğine göre, Google echo API ile bağlantıyı test etme zamanı.

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

Komut satırı üzerinden istek gönderme

Komutu yürütmeden önce HOSTNAME simgesini sunucu barındırıcınızın 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. İsteği Google'a göndermeye hazır olduğunuzda "Yürüt" 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 istek başarıyla gönderildiğine göre, bu işlemin nasıl çalıştığını inceleyelim.

İsteği oluşturma

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

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

Oluşturulan istekte clientMessage ve birkaç varsayılan değer alanı bulunur.

{
   "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 ile kodlayın ve şifreleyin

Tüm istekler şifrelenir ve base64url kodlaması yapılır. 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 ortak anahtarını kullanarak şifreleme gerçekleştirir.

String encryptedMessage = pgpEncryptor.encrypt(jsonEchoRequestMessage);

POST isteğini gönderin.

Şifrelenmiş ileti, POST isteğiyle gönderilir.

postStandardPaymentsEchoApi(encryptedMessage)

Yanıtın şifresini çözün, Base64URL kodunu çözün ve yanıtı döndürün.

Google'ın başarılı yanıtı base64url ile kodlanmış ve şifrelenmiştir. Bu nedenle, düz metin olarak döndürülmeden önce kodunun çözülmesi ve şifresinin çözülmesi gerekir. decrypt yöntemi, yanıtın base64url kodunu çözer ve yanıtı şifreler.

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

Yanıtı döndürme

Yanıt, 202 HTTP yanıt durum koduyla 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 bir istek gönderir. Hazır olduğunuzda lütfen Google'daki ilgili kişinizle birlikte çalışarak bu isteği Google'a iletin.

Google'dan gelen gelen yankı isteğini okuyup geçerli bir yankı yanıtı verebildiğinizde yankı testi tamamlanır.

Adım adım

Sunucunuz tarafından bir istek başarıyla alındıktan ve işlendikten sonra bu işlemin nasıl gerçekleştiğini inceleyelim.

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

Bir istek alındığında PgpEncryptor.java, isteğin Base64url kodunu çözüp şifresini çözecek olan decrypt işlevini çağırır.

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 başlayabilirsiniz.

private EchoResponse convertEchoRequestStringToEchoResponse(String decryptedRequest);

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

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

Yanıtı Base64url ile kodlayın ve şifreleyin.

Tüm istekler şifrelenmiş ve base64url kodlamalı olduğundan, PgpEncryptor.java, isteği base64url kodlamalı hale getirmek ve şifrelemek için encrypt çağrıları yapar.

pgpEncryptor.encrypt(echoResponseString)

Yanıtı döndürme

Yanıt, 202 HTTP yanıt durum koduyla 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.