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

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ürecinin 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.
  • 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ı İ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ü 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.

  1. Proje dizininde server.js dosyasına gidin.
  2. PIAID değişkenini size Google tarafından verilen PIAID olarak ayarlayın.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';

4. PGP anahtarları ekle

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

  • public.key adlı 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.

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

Varsayılan olarak sunucu 8080 numaralı bağlantı noktasından dinleme yapar.

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

Uygulama artık çalışıyor. Şimdi Google Standard Payments echo API ile bağlantıyı test etme zamanı.

Örnek uygulama örneğinizden Google'ın sunucularına bir arama 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, bunun nasıl çalıştığını inceleyelim.

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

İsteği şifreleme

Tüm istekler şifrelenir ve base64url kodlamasıyla kodlanı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, şifrelemeyi Google'ın ortak anahtarını kullanarak gerçekleştirir.

const encrypted = await crypto.encrypt(message);

Base64url kodlamalı POST isteğini gönderin

Şifrelenmiş mesaj, base64url paketi kullanılarak base64url 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 çözme ve yanıtı döndürme

Google'ın başarılı yanıtı base64url kodlu ve şifrelidir. Bu nedenle, açık metin olarak döndürülebilmesi için kodun ve şifresinin de çözülmesi gerekir.

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 iş ortağı tarafından barındırılan echo API'ye bir istek gönderir.

Hazır olduğunuzda lütfen Google'dan bu isteği tetiklemek için Google ilgili 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ınıp sunucunuz tarafından işlendiğine göre, bunun nasıl çalıştığını inceleyelim.

İsteğin Base64url kodunu çözme

İsteği aldığınızda ilk olarak base64url kod çözme işlemini yapmanız gerekir.

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

İsteğin şifresini çözün

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

const decryptedRequest = await crypto.decrypt(encryptedRequest);

İsteği al

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.

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

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

Yanıtı şifreleyip 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şarıyla bağlantı kurdunuz.