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

  1. Proje dizinindeki 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

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.

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