Cara membangun konektivitas dengan API Pembayaran di Node.js

1. Sebelum memulai

Ini adalah codelab yang dipandu sendiri yang akan membahas cara membuat konektivitas dengan Standard Payments API.

Prasyarat

  • Anda telah menyelesaikan langkah 1 dan 2 dari Proses Penerapan.
  • 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 diinstal di lingkungan Anda.

Yang Akan Anda Pelajari

  • Cara memverifikasi konektivitas dengan membuat permintaan yang valid ke Google Standard Payments echo API.
  • 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 telah 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 dikeluarkan untuk Anda oleh Google.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';

4. Menambahkan 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 yang dienkapsulasi ASCII ke file tersebut.
  • Buat file bernama private.key dan tambahkan kunci pribadi yang dienkapsulasi ASCII ke file tersebut.
  • Buat file bernama passphrase.txt dan tambahkan frasa sandi rahasia ke file tersebut.

Menambahkan kunci PGP

Bagus, Anda sudah siap 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 memproses 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. API echo aplikasi contoh menerima permintaan POST dalam teks biasa. Setelah menerima permintaan, permintaan berikutnya 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.

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

Enkripsi 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 melakukan enkripsi menggunakan kunci publik Google.

const encrypted = await crypto.encrypt(message);

Kirim permintaan POST yang dienkode 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 berhasil dienkode dan dienkripsi base64url, sehingga perlu didekode dan didekripsi juga 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 Partner Hosted echo API, Google akan mengirim permintaan ke Partner Hosted echo API.

Jika Anda sudah siap, harap bekerja sama dengan kontak Google Anda untuk memicu permintaan ini dari Google.

Pengujian echo selesai jika Anda dapat membaca permintaan echo masuk dari Google dan merespons dengan respons echo yang valid.

Langkah demi langkah

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

Mendekode permintaan Base64url

Saat menerima permintaan, Anda harus mendekode base64url terlebih dahulu.

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

Mendekripsi permintaan

Setelah mendekode permintaan base64url, Anda harus mendekripsinya.

const decryptedRequest = await crypto.decrypt(encryptedRequest);

Menerima permintaan

Google mengirimkan payload pesan yang mirip dengan berikut setelah didekode dan didekripsi.

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

Membangun respons

Setelah berhasil membaca permintaan echo inbound, Anda siap membuat 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"
}

Enkripsi dan enkode base64 respons

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

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

Menampilkan respons

Terakhir, Anda siap mengirim respons POST.

res.send(encodedResponse);

8. Selamat!

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