Chuyển đến nội dung chính

Truyền dữ liệu an toàn

Tổng quan

Để bảo vệ khỏi truy cập trái phép và các cuộc tấn công tiềm ẩn trong quá trình truyền dữ liệu, Zalopay sử dụng hai kỹ thuật: HMACChữ ký số để đảm bảo tính toàn vẹn và xác thực dữ liệu.

HMAC

Zalopay sử dụng kỹ thuật HMAC trong trường mac khi các máy khách thực hiện các yêu cầu thông qua APIs hoặc nhận các yêu cầu thông qua callbacks từ Zalopay, cũng như trường checksum của redirect, nhằm tăng cường bảo mật trong quá trình truyền dữ liệu. Kỹ thuật này được coi là phương pháp chính để đảm bảo truyền dữ liệu an toàn trên Zalopay.

Có 3 phần cần lưu ý:

  • Thuật toán: Được cấu hình bởi nhà cung cấp hàng hóa hoặc dịch vụ (merchant). Giá trị mặc định là thuật toán SHA-256.
  • Dữ liệu: Được tạo bằng cách kết hợp các dữ liệu cần thiết với ký tự |. Vui lòng tham khảo thông số kỹ thuật của API để biết cách tạo dữ liệu này một cách chính xác.
  • khóa: Sau khi đăng ký thành công tài khoản nhà cung cấp hàng hóa hoặc dịch vụ, chúng tôi sẽ cung cấp hai khóa: key1key2. key1 được sử dụng khi gửi yêu cầu đến Zalopay, và key2 được sử dụng khi nhận các yêu cầu callback hoặc redirect từ Zalopay.

Dưới đây là ví dụ về CreateOrderAPI:

import CryptoJS from "crypto-js";
{...}

const order = {
// request data //
}

const data = [
order.app_id,
order.app_trans_id,
order.app_user,
order.amount,
order.app_time,
order.embed_data,
order.item].join("|");
order.mac = CryptoJS.HmacSHA256(data, configZLP.key1).toString();

// Make request with order object //

Chữ ký số

Sự khác biệt chính giữa HMAC và chữ ký số nằm ở việc HMAC sử dụng một khóa bí mật chung cho cả quá trình tạo chữ ký và xác minh, trong khi chữ ký số sử dụng một cặp khóa công khai - khóa riêng tư. Khóa riêng tư được sử dụng để tạo chữ ký, và khóa công khai được sử dụng để xác minh. Khách hàng chịu trách nhiệm lưu trữ khóa riêng tư, trong khi Zalopay lưu trữ khóa công khai.

Kỹ thuật này được sử dụng trong trường sig khi gửi yêu cầu đến Zalopay, ví dụ như TopUpAPI.

Có 3 phần cần lưu ý:

  • Thuật toán: Zalopay sử dụng thuật toán RSA.
  • Dữ liệu: Tùy thuộc vào các API của bạn. Vui lòng tham khảo thông số kỹ thuật của API để biết cách tạo dữ liệu này một cách chính xác.
  • khóa: Đây là khóa riêng tư được cung cấp khi bạn đăng ký tài khoản nhà cung cấp hàng hoặc dịch vụ.

Dưới đây là ví dụ về TopUpAPI

import CryptoJS from "crypto-js";
import rsa from "node-rsa"
//...//

const request = {
// request data
}

const message = [
request.appId,
request.paymentId,
request.partnerOrderId,
request.mUId,
request.amount,
request.description,
request.partnerEmbedData,
request.extraInfo,
request.time].join("|");
const mac = crypto.HmacSHA256(message, configZLP.key1).toString();

// The input of the data signature for TopUpAPI is the mac variable
const msg = Buffer.from(mac);

// Get the private key which is provided by Zalopay
const privateKey = Buffer.from(configZLP.secretKey);

const rsaInstance = new rsa(privateKey, 'pkcs8');
const signature = rsaInstance.sign(msg, 'base64', 'utf8');

request.sig = signature
// Call TopUpAPI with request object //