Cara membangun konektivitas dengan API Pembayaran di Node.js

1. Sebelum memulai

Ini adalah codelab mandiri yang akan menjelaskan cara membangun konektivitas dengan Stanadard Payments API.

Prasyarat

  • Anda telah menyelesaikan langkah 1 dan 2 dari Proses Implementasi.
  • Anda dapat menghosting server Node.js yang disediakan dengan penghentian TLS menggunakan Google App Engine atau solusi Anda sendiri di domain yang dikonfigurasi dengan Google.
  • Node.js terinstal di lingkungan Anda.

Yang Akan Anda Pelajari

  • Cara memverifikasi konektivitas dengan membuat permintaan yang valid ke echo API Google Standard Payments.
  • Cara menerima, mendekripsi, dan mengurai permintaan dari Google ke Partner Hosted Echo API.

2. Penyiapan dan Persyaratan

Download Aplikasi

Download kode contoh Node.js.

Menginstal Dependensi

Buka direktori project dan jalankan perintah berikut untuk menginstal dependensi yang diperlukan. Jika menggunakan App Engine, Anda dapat melewati langkah ini.

npm install

3. Mengonfigurasi ID Akun Integrator Pembayaran (PIAID)

ID Akun Integrator Pembayaran (PIAID) adalah ID yang digunakan untuk mengidentifikasi integrasi Anda secara unik. Anda seharusnya sudah menerima PIAID dari Google dengan menyelesaikan prasyarat sebelum memulai tutorial ini.

  1. Buka file server.js di direktori project.
  2. Tetapkan variabel PIAID ke PIAID yang diberikan Google untuk Anda.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';

4. Tambahkan kunci PGP

Buat file berikut dalam struktur project dan tambahkan kunci PGP Anda untuk mengaktifkan enkripsi PGP.

  • Buat file bernama public.key dan tambahkan kunci publik armor ASCII ke file.
  • Buat file bernama private.key dan tambahkan kunci pribadi armor ASCII ke file tersebut.
  • Buat file bernama passphrase.txt dan tambahkan frasa sandi rahasia ke file tersebut.

Menambahkan kunci PGP

Bagus, Anda siap untuk menjalankan aplikasi.

5. Menjalankan Aplikasi

Untuk memulai aplikasi, jalankan perintah berikut.

$ node server.js
Server listening on port 8080...

Jika Anda menjalankan instance App Engine yang telah dikonfigurasi sebelumnya, jalankan perintah ini.

$ gcloud app deploy

Secara default, server akan memantau port 8080.

6. Menguji konektivitas Google Standard Payments API

Setelah aplikasi berjalan, saatnya menguji konektivitas dengan Google Standard Payments echo API.

Jalankan perintah berikut untuk memulai panggilan dari instance aplikasi contoh Anda ke server Google. Aplikasi contoh echo API menerima permintaan POST dalam teks biasa. Setelah menerima permintaan, permintaan berikutnya akan dikirim ke API yang dihosting Google.

  $ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Little Bear' https://{HOSTNAME}/echo

Permintaan API yang berhasil akan menghasilkan respons berikut dari Google.

{
   "responseHeader":{
      "responseTimestamp":"1606710026723"
   },
   "clientMessage":"Hello from Little Bear",
   "serverMessage":"Server message."
}

Langkah demi langkah

Setelah permintaan berhasil dikirim oleh server Anda, mari kita tinjau cara kerjanya.

Membuat permintaan

buildEchoRequestBody di bodyHelpers.js membuat permintaan echo yang dikirim ke API Google.

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

Permintaan yang dihasilkan mencakup clientMessage, serta beberapa kolom nilai default.

{
   "requestHeader":{
      "protocolVersion":{
         "major":1,
         "minor":0,
         "revision":0
      },
      "requestId":"ddfe0fd0-ffdc-4fcf-991a-f0611ec83970",
      "requestTimestamp":"1606715389040"
   },
   "clientMessage":"Hello from Little Bear"
}

Mengenkripsi permintaan

Semua permintaan dienkripsi dan dienkode base64url. Dalam contoh ini, crypto.js berisi metode bantuan yang melakukan enkripsi dan dekripsi untuk Anda. Metode crypto.encrypt menjalankan enkripsi menggunakan kunci publik Google.

const encrypted = await crypto.encrypt(message);

Mengirim permintaan POST berenkode base64url

Pesan terenkripsi dienkode base64url menggunakan paket base64url dan dikirim melalui permintaan POST menggunakan axios.

const response = await axios.post(ECHO_URL, base64url(encrypted), AXIOS_CONFIG);

Mendekripsi dan menampilkan respons

Respons Google yang sukses adalah dienkode dan dienkripsi base64url, sehingga perlu didekode dan didekripsi sebelum dapat ditampilkan dalam teks biasa.

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

7. Menguji konektivitas Partner API

Untuk menguji Konektivitas API echo partner, Google akan mengirim permintaan ke Partner Hosted echo API.

Jika Anda sudah siap, hubungi kontak Google Anda untuk memicu permintaan ini dari Google.

Uji gema akan selesai jika Anda dapat membaca permintaan gema masuk dari Google dan merespons dengan respons gema yang valid.

Langkah demi langkah

Setelah permintaan berhasil diterima dan ditangani oleh server Anda, mari kita tinjau cara kerjanya.

Base64url mendekode permintaan

Saat menerima permintaan ini, Anda harus terlebih dahulu mendekode base64url.

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

Mendekripsi permintaan

Setelah mendekode permintaan base64url, Anda harus mendekripsinya.

const decryptedRequest = await crypto.decrypt(encryptedRequest);

Menerima permintaan

Google mengirim payload pesan yang serupa dengan berikut ini setelah didekode dan didekripsi.

{
  "requestHeader": {
    "protocolVersion": {
      "major": 1
    },
    "requestId": "G1MQ0YERJ0Q7LPM",
    "requestTimestamp": {
      "epochMillis":1481899949606
    },
    "paymentIntegratorAccountId": "abcdef123456"
  },
  "clientMessage": "echo Me"
}

Membuat respons

Setelah berhasil membaca permintaan echo masuk, Anda siap membangun respons.

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

Respons mencakup pesan dari Google, serta stempel waktu dan pesan dari server.

{
  "responseHeader": {
    "responseTimestamp": {
      "epochMillis":1481899950236
    }
  },
  "clientMessage": "echo Me",
  "serverMessage": "Debug ID 12345"
}

Mengenkripsi dan mengenkode respons base64

Setelah membentuk pesan respons, Anda siap untuk mengenkripsi dan mengenkode base64url.

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

Kembalikan respons

Dan, akhirnya, Anda siap untuk mengirim respons POST.

res.send(encodedResponse);

8. Selamat!

Dalam codelab ini, Anda telah berhasil membangun konektivitas dengan Echo API.