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à một lớp học lập trình tự hướng dẫn, sẽ hướng dẫn bạn cách thiết lập kết nối với Standard Payments API.

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

  • Bạn đã hoàn thành bước 1 và 2 của Quy trình triển khai.
  • Bạn có thể lưu trữ máy chủ Node.js được cung cấp bằng cách chấm dứt TLS bằ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 bằng 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 một yêu cầu hợp lệ cho API phản hồi Google Standard Payments.
  • Cách nhận, giải mã và phân tích cú pháp yêu cầu từ Google đến Partner Hosted Echo API.

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.

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

Chuyển đến thư mục dự án rồi chạy lệnh sau để cài đặt các phần phụ thuộc bắt buộc. 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à một giá trị nhận dạng dùng để xác định duy nhất các hoạt động tích hợp của bạn. Bạn phải 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 do 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 để bật tính năng mã hoá PGP.

  • Tạo một tệp có tên là public.key rồi thêm khoá công khai được mã hoá bằng ASCII vào tệp đó.
  • Tạo một tệp có tên là private.key rồi thêm khoá riêng tư được mã hoá bằng ASCII vào tệp đó.
  • Tạo một tệp có tên là 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 của Google Standard Payments API

Bây giờ ứng dụng đang chạy, bạn có thể kiểm tra khả năng kết nối với Google Standard Payments echo API.

Chạy lệnh sau để bắt đầu một cuộc gọi từ phiên bản ứ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ạ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

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

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

Từng bước

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

Tạo 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ả các yêu cầu đều được mã hoá và mã hoá theo 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 quy trình 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

Thông báo đượ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á bằng base64url, vì vậy, bạn cũng cần giải mã và giải mã phản hồi đó trước khi có thể trả về ở 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 tra khả năng kết nối Partner API

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

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

Thử nghiệm lặp lại hoàn tất khi bạn có thể đọc yêu cầu lặp lại đến từ Google và phản hồi bằng một phản hồi lặp lại hợp lệ.

Từng bước

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

Giải mã yêu cầu bằng 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 bằng 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 tải trọng thông báo tương tự như sau 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 phản hồi đế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 này bao gồm tin nhắn của Google, cũng như dấu thời gian và tin nhắn của máy chủ.

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

Mã hoá và mã hoá phản hồi bằng base64

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

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

Trả về phản hồ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 kết nối với Echo API!