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: HMAC và Chữ 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:key1
vàkey2
.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 //