1. Başlamadan önce
Bu, Stanadard Payments API'leriyle bağlantı kurma konusunda size yol gösterecek, rehbersiz bir codelab'dir.
Ön koşullar
- Uygulama Süreci'nin 1. ve 2. adımlarını tamamladınız.
- Sağlanan Node.js sunucusunu, Google App Engine'i veya Google ile yapılandırılan alanda kendi çözümünüzü kullanarak TLS sonlandırmalı şekilde barındırabilirsiniz.
- Node.js ortamınızda yüklü olmalıdır.
Neler Öğreneceksiniz?
- Google Standard Payments 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 Echo API'ye ayrıştırma.
2. Kurulum ve Gereksinimler
Uygulamayı İndirin
Node.js örnek kodunu indirin.
Bağımlılıkları Yükleme
Proje dizinine gidin ve 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.
npm 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 Google'dan PIAID kodunuzu almış olmanız gerekir.
- Proje dizinindeki
server.js
dosyasına gidin. PIAID
değişkenini size Google tarafından verilen PIAID olarak ayarlayın.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';
4. PGP anahtarları ekle
Proje yapısında aşağıdaki dosyaları oluşturun ve PGP şifrelemesini etkinleştirmek için PGP anahtarlarınızı ekleyin.
public.key
adında bir dosya oluşturun ve ASCII zırhlı ortak anahtarı dosyaya ekleyin.private.key
adında bir dosya oluşturun ve ASCII zırhlı özel anahtarı dosyaya ekleyin.passphrase.txt
adında bir dosya oluşturun ve gizli parolayı dosyaya ekleyin.
Harika, uygulamayı çalıştırmaya hazırsınız!
5. Uygulamayı Çalıştırma
Uygulamayı başlatmak için aşağıdaki komutu yürütün.
$ node server.js Server listening on port 8080...
Ö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
Varsayılan olarak sunucu 8080 numaralı bağlantı noktasından dinleme yapar.
6. Google Standard Payments API bağlantısını test edin
Uygulama çalıştığına göre şimdi Google Standard Payments echo API bağlantısını test edebilirsiniz.
Örnek uygulama örneğinizden Google'ın sunucularına bir çağrı başlatmak için aşağıdaki komutu çalıştırın. Örnek uygulama yankısı API'si düz metin biçiminde bir POST isteğini kabul ediyor. İsteği aldıktan sonra, Google tarafından barındırılan API'ye bir istek gönderilir.
$ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Little Bear' https://{HOSTNAME}/echo
Başarılı bir API isteği, Google'dan aşağıdaki yanıtı alır.
{ "responseHeader":{ "responseTimestamp":"1606710026723" }, "clientMessage":"Hello from 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
bodyHelpers.js
içindeki buildEchoRequestBody
, Google'ın API'sine gönderilen echo
isteğini oluşturur.
const message = bodyHelpers.buildEchoRequestBody(req.body);
Oluşturulan istek, clientMessage
ve 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 Little Bear"
}
İsteği şifreleme
Tüm istekler şifrelenmiş ve base64url kodlanıyor. Bu örnekte crypto.js
, sizin için şifreleme ve şifre çözme işlemini gerçekleştiren yardımcı yöntemler içeriyor. crypto.encrypt
yöntemi, şifrelemeyi Google'ın ortak anahtarını kullanarak gerçekleştirir.
const encrypted = await crypto.encrypt(message);
Base64url kodlamalı POST isteğini gönderme
Şifrelenmiş ileti, base64url paketi kullanılarak base64url olarak kodlanır ve axios kullanılarak bir POST isteği aracılığıyla gönderilir.
const response = await axios.post(ECHO_URL, base64url(encrypted), AXIOS_CONFIG);
Şifreyi çöz ve yanıtı döndü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 de kodu çözülmüş ve şifresi çözülmüş olmalıdır.
const encryptedMessage = base64url.toBuffer(response.data);
const decryptedResponse = await crypto.decrypt(encryptedMessage);
res.status(200);
res.send(decryptedResponse);
7. Partner API bağlantısını test etme
Google, iş ortağı echo API Bağlantısını test etmek için İş 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ıt verebildiğinizde yankı testi tamamlanmış olur.
Adım adım
Bir istek başarıyla alındı ve sunucunuz tarafından işlendiğine göre, şimdi bunun nasıl işlediğine bakalım.
Base64url isteğin kodunu çözme
İsteği aldığınızda, öncelikle base64url kodunu çözmeniz gerekir.
const encryptedRequest = base64url.toBuffer(req.body);
İsteğin şifresini çözün
Base64url URL'si isteğin kodunu çöztikten sonra şifresini çözmeniz gerekir.
const decryptedRequest = await crypto.decrypt(encryptedRequest);
İsteği al
Google, kodu çözülüp şifresi çözüldükten 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şturun
Gelen yankı isteğini başarıyla okuduktan sonra yanıtı oluşturmaya hazırsınız demektir.
clientMessage = JSON.parse(decryptedRequest).clientMessage;
responseBody = bodyHelpers.buildEchoResponseBody(clientMessage);
Yanıt, Google'dan gelen iletinin yanı sıra zaman damgası ve sunucudan gelen mesajı da içerir.
{ "responseHeader": { "responseTimestamp": { "epochMillis":1481899950236 } }, "clientMessage": "echo Me", "serverMessage": "Debug ID 12345" }
Yanıtı şifreleyip base64 ile kodlayın
Yanıt mesajını oluşturduktan sonra, şifrelemeye ve base64url ile kodlamaya hazırsınız demektir.
encryptedResponse = await crypto.encrypt(responseBody);
const encodedResponse = base64url(encryptedResponse);
Yanıtı geri ver
Son olarak, POST yanıtını göndermeye hazırsınız.
res.send(encodedResponse);
8. Tebrikler!
Bu codelab'de, Echo API ile bağlantıyı başarıyla oluşturdunuz.