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.
- Proje dizininde
src/main/resources/application.properties
adresine gidin. 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.
- Proje dizininde
src/main/resources/application.properties
adresine gidin. 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.
Ç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.
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.