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
controllerpaketinde yer alır. servicepaketi, iş mantığı, base64url kodlama ve şifrelemeden sorumludur.domainpaketi 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.
- Proje dizininde
src/main/resources/application.propertieskonumuna gidin. payment.integrator.account.idmü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.
- Proje dizininde
src/main/resources/application.propertieskonumuna gidin. 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.gpgsimgesine gidin ve ASCII-Armored ortak anahtarını dosyaya ekleyin.src/resources/privateKey1.gpgsimgesine gidin ve ASCII armored özel anahtarı dosyaya ekleyin.src/resources/passphrase1.txtkonumuna gidin ve gizli parolayı dosyaya ekleyin.

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

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.