Cách thiết lập khả năng kết nối với API thanh toán trong Node.js

1. Trước khi bắt đầu

Đây là lớp học lập trình tự hướng dẫn về cách thiết lập khả năng kết nối với các API thanh toán của Stanadard.

Điều kiện tiên quyết

  • Bạn đã hoàn tất bước 1 và 2 trong Quy trình triển khai.
  • Bạn có thể lưu trữ máy chủ Node.js được cung cấp với khả năng chấm dứt TLS bằng cách sử dụng Google App Engine hoặc giải pháp của riêng bạn tại miền được định cấu hình với Google.
  • Node.js được cài đặt trên môi trường của bạn.

Kiến thức bạn sẽ học được

  • Cách xác minh khả năng kết nối bằng cách đưa ra yêu cầu hợp lệ đối với API phản hồi Thanh toán thông thường của Google.
  • Cách nhận, giải mã và phân tích cú pháp yêu cầu từ Google đến API Echo do đối tác lưu trữ.

2. Thiết lập và yêu cầu

Tải ứng dụng xuống

Tải mã mẫu Node.js xuống.

Phần phụ thuộc cài đặt

Chuyển đến thư mục dự án và chạy lệnh sau để cài đặt các phần phụ thuộc cần thiết. Nếu đang sử dụng App Engine, bạn có thể bỏ qua bước này.

npm install

3. Định cấu hình mã tài khoản của đơn vị tích hợp thanh toán (PIAID)

Mã tài khoản của đơn vị tích hợp thanh toán (PIAID) là giá trị nhận dạng dùng để xác định riêng các công cụ tích hợp của bạn. Bạn sẽ nhận được PIAID từ Google bằng cách hoàn tất các điều kiện tiên quyết trước khi bắt đầu hướng dẫn này.

  1. Chuyển đến tệp server.js trong thư mục dự án.
  2. Đặt biến PIAID thành PIAID mà Google đã cấp cho bạn.
const PIAID = '{PAYMENT_INTEGRATOR_ACCOUNT_ID}';

4. Thêm khoá PGP

Tạo các tệp sau trong cấu trúc dự án và thêm khoá PGP của bạn để bật tính năng mã hoá PGP.

  • Tạo một tệp có tên public.key rồi thêm khoá công khai có giáp bảo vệ ASCII vào tệp đó.
  • Tạo một tệp có tên private.key rồi thêm khoá riêng tư có giáp bảo vệ ASCII vào tệp đó.
  • Tạo một tệp có tên passphrase.txt rồi thêm cụm mật khẩu bí mật vào tệp đó.

Thêm khoá PGP

Tuyệt vời, bạn đã sẵn sàng chạy ứng dụng!

5. Chạy ứng dụng

Để khởi động ứng dụng, hãy thực thi lệnh sau.

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

Nếu bạn đang chạy một phiên bản App Engine được định cấu hình sẵn, hãy chạy lệnh này.

$ gcloud app deploy

Theo mặc định, máy chủ sẽ lắng nghe trên cổng 8080.

6. Kiểm tra khả năng kết nối với API Thanh toán chuẩn của Google

Hiện tại, ứng dụng đang chạy, đã đến lúc kiểm tra khả năng kết nối với API phản hồi của Google Standard Payments.

Chạy lệnh sau để bắt đầu cuộc gọi từ thực thể ứng dụng mẫu của bạn đến các máy chủ của Google. API phản hồi của ứng dụng mẫu chấp nhận yêu cầu POST dưới dạng văn bản thuần tuý. Sau khi nhận được yêu cầu, một yêu cầu tiếp theo sẽ được gửi đến API do Google lưu trữ.

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

Yêu cầu API thành công sẽ dẫn đến phản hồi sau đây từ Google.

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

Từng bước

Bây giờ, máy chủ của bạn đã gửi thành công một yêu cầu, hãy cùng xem lại cách hoạt động của yêu cầu đó.

Xây dựng yêu cầu

buildEchoRequestBody trong bodyHelpers.js tạo yêu cầu echo được gửi đến API của Google.

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

Yêu cầu được tạo bao gồm clientMessage, cũng như một số trường giá trị mặc định.

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

Mã hoá yêu cầu

Tất cả yêu cầu đều được mã hoá và được mã hoá base64url. Trong mẫu này, crypto.js chứa các phương thức trợ giúp thực hiện việc mã hoá và giải mã cho bạn. Phương thức crypto.encrypt thực hiện việc mã hoá bằng khoá công khai của Google.

const encrypted = await crypto.encrypt(message);

Gửi yêu cầu POST được mã hoá base64url

Tin nhắn đã được mã hoá được mã hoá base64url bằng gói base64url và được gửi qua yêu cầu POST bằng axios.

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

Giải mã và trả về phản hồi

Phản hồi thành công của Google được mã hoá và mã hoá base64url, vì vậy, phản hồi này cần được giải mã và giải mã trước khi có thể được trả về dưới dạng văn bản thuần tuý.

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

7. Kiểm thử khả năng kết nối với API Đối tác

Để kiểm tra Khả năng kết nối API tiếng vọng của đối tác, Google sẽ gửi yêu cầu đến API tiếng vọng do đối tác lưu trữ.

Khi bạn đã sẵn sàng, vui lòng làm việc với đầu mối liên hệ của Google để kích hoạt yêu cầu này từ Google.

Quy trình kiểm tra tiếng vọng hoàn tất khi bạn có thể đọc yêu cầu tiếng vọng đến từ Google và phản hồi bằng phản hồi tiếng vọng hợp lệ.

Từng bước

Máy chủ của bạn hiện đã nhận và xử lý thành công yêu cầu, hãy cùng xem lại cách hoạt động của yêu cầu đó.

Giải mã yêu cầu Base64url

Khi nhận được yêu cầu, trước tiên, bạn cần phải giải mã base64url.

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

Giải mã yêu cầu

Sau khi đã giải mã yêu cầu base64url, bạn cần giải mã yêu cầu đó.

const decryptedRequest = await crypto.decrypt(encryptedRequest);

Nhận yêu cầu

Google đã gửi một phần tải tin nhắn tương tự như sau khi đã được giải mã và giải mã.

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

Tạo câu trả lời

Sau khi đọc thành công yêu cầu tiếng vọng đến, bạn đã sẵn sàng tạo phản hồi.

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

Phản hồi bao gồm thông báo từ Google, cũng như dấu thời gian và thông báo từ máy chủ.

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

Mã hoá rồi mã hoá phản hồi base64

Sau khi tạo thư phản hồi, bạn có thể mã hoá và mã hoá base64url thư đó.

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

Trả lời

Cuối cùng, bạn đã sẵn sàng gửi phản hồi POST.

res.send(encodedResponse);

8. Xin chúc mừng!

Trong lớp học lập trình này, bạn đã thiết lập thành công khả năng kết nối với API Echo!