Nhảy tới nội dung

Tạo chữ ký cho dữ liệu trước khi gọi API

Tất cả yêu cầu gửi đến Bizzi Pay OpenAPI đều yêu cầu các giá trị x-request-id, x-request-time, x-request-signature trong Headers để chứng thực yêu cầu và chắc chắn rằng yêu cầu được gửi đến từ Client cũng như kiểm tra tính chính xác của dữ liệu

Cách tạo chữ ký cho payload

  • Sử dụng thuật toán HMAC_SHA256 (mặc định) hoặc thuật toán mà Client đã cấu hình trên Bizzi Pay
  • Payload phải được mã hóa trước khi gửi sang Bizzi Pay
ghi chú

Các thuật toán mã hóa và cặp khóa mã hóa phải đúng với thông tin đã đăng ký với Bizzi Pay, nếu không yêu cầu của bạn sẽ không thể thực hiện

Code mẫu để tạo chữ ký cho payload

import { createHmac, randomUUID } from 'crypto';

const secret = '';
const payload = {
foo: 'bar',
baz: {
qux: 'quux',
},
};

const algo = 'sha256';

const genSig = () => {
const reqId = randomUUID();
const reqTime = new Date().getTime();

const stringify = stringifyInOrder(payload);
const rawSig = [reqId, reqTime, stringify].join('|');
const reqSig = sign(secret, rawSig, algo);
return { reqId, reqTime, reqSig };
};

function stringifyInOrder(payload) {
return Object.keys(payload)
.sort()
.map((key) => {
const val = payload[key];
if (typeof val === 'object') {
return `${key}${stringifyInOrder(val)}`;
}
return `${key}${val}`;
})
.join('|');
}

const sign = (rawSecret, rawSig, algo) => {
const secret = Buffer.from(rawSecret, 'hex');
const signature = createHmac(algo, secret).update(rawSig).digest('base64');
return signature;
};