Node.js'de Payments API'leriyle bağlantı kurma

1. Başlamadan önce

Bu, Standard Payments API'leriyle bağlantı kurma sürecini adım adım açıklayan, kendi kendine rehberli bir codelab'dir.

Ön koşullar

  • Uygulama sürecinin 1. ve 2. adımlarını tamamlamış olmanız gerekir.
  • Sağlanan Node.js sunucusunu, Google App Engine'i veya Google ile yapılandırılmış alanda kendi çözümünüzü kullanarak TLS sonlandırmasıyla barındırabilirsiniz.
  • Ortamınızda Node.js 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 İş 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

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ü 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 dizinindeki server.js dosyasına gidin.
  2. PIAID değişkenini, Google tarafından size verilen PIAID olarak ayarlayın.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';

4. PGP anahtarları ekleme

Proje yapısında aşağıdaki dosyaları oluşturun ve PGP şifrelemeyi etkinleştirmek için PGP anahtarlarınızı ekleyin.

  • public.key adlı bir dosya oluşturun ve ASCII armored ortak anahtarını dosyaya ekleyin.
  • private.key adlı bir dosya oluşturun ve ASCII armoured özel anahtarını dosyaya ekleyin.
  • passphrase.txt adlı bir dosya oluşturun ve gizli parola ifadesini bu dosyaya ekleyin.

PGP anahtarları ekleme

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

Sunucu varsayılan olarak 8080 numaralı bağlantı noktasını dinler.

6. Google Standard Payments API bağlantısını test etme

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

Örnek uygulama örneğinizden Google'ın sunucularına arama başlatmak için aşağıdaki komutu çalıştırın. Ö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.

  $ 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 istek başarıyla gönderildiğine göre, bu işlemin nasıl çalıştığını inceleyelim.

İsteği oluşturma

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

const message = bodyHelpers.buildEchoRequestBody(req.body);

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 Little Bear"
}

İsteği şifreleyin

Tüm istekler şifrelenir ve base64url kodlaması yapılır. Bu örnekte, crypto.js sizin için şifreleme ve şifre çözme işlemlerini gerçekleştiren yardımcı yöntemler içerir. crypto.encrypt yöntemi, Google'ın ortak anahtarını kullanarak şifreleme gerçekleştirir.

const encrypted = await crypto.encrypt(message);

Base64url kodlu POST isteğini gönderin.

Şifrelenmiş mesaj, 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);

Yanıtın şifresini çözüp döndürme

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.

const encryptedMessage = base64url.toBuffer(response.data);
const decryptedResponse = await crypto.decrypt(encryptedMessage);
res.status(200);
res.send(decryptedResponse);

7. İş Ortağı API bağlantısını test etme

Google, iş ortağı 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.

İsteğin Base64url kodunu çözün.

İsteği aldığınızda öncelikle base64url kodunu çözmeniz gerekir.

const encryptedRequest = base64url.toBuffer(req.body);

İsteğin şifresini çözme

İsteğin base64url kodunu çözdükten sonra şifresini çözmeniz gerekir.

const decryptedRequest = await crypto.decrypt(encryptedRequest);

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

clientMessage = JSON.parse(decryptedRequest).clientMessage;
responseBody = bodyHelpers.buildEchoResponseBody(clientMessage);

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ı şifreleyin ve Base64 ile kodlayın.

Yanıt mesajını oluşturduktan sonra şifrelemeye ve Base64url kodlamaya hazırsınız demektir.

encryptedResponse = await crypto.encrypt(responseBody);
const encodedResponse = base64url(encryptedResponse);

Yanıtı döndürme

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