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