Nhảy tới nội dung

Kiểm tra dữ liệu với signature

1. Kiểm tra thông tin bằng chữ ký

Giá trị signature được dùng để kiểm tra tính chính xác của dữ liệu.

Cách tạo signature

  • Sử dụng thuật toán HMAC_SHA256 để tạo signature.
  • data tạo signature dạng: key1=value1&key2=value2... (key1: tên field, value1 = giá trị của key1).
  • Dữ liệu tạo signature sắp xếp theo key thứ tự alphabet.
  • Cấu trúc: hash_hmac("sha256", string $data , string $checksum_key)
Lưu ý:

Checksum Key được tạo ra sau khi tạo cổng thanh toán thành công

Code mẫu kiểm tra chính xác dữ liệu

<?php
$checksum_key = "1a54716c8f0efb2744fb28b6e38b25da7f67a925d98bc1c18bd8faaecadd7675";
$webhookData = array(
"code" => "00",
"desc" => "success",
"data" => array(
"orderCode" => 123,
"amount" => 3000,
"description" => "VQRIO123",
"accountNumber" => "12345678",
"reference" => "TF230204212323",
"transactionDateTime" => "2023-02-04 18:25:00",
"currency" => "VND",
"paymentLinkId" => "124c33293c43417ab7879e14c8d9eb18",
"code" => "00",
"desc" => "Thành công",
"counterAccountBankId" => "",
"counterAccountBankName" => "",
"counterAccountName" => "",
"counterAccountNumber" => "",
"virtualAccountName" => "",
"virtualAccountNumber" => ""
),
"signature" => "412e915d2871504ed31be63c8f62a149a4410d34c4c42affc9006ef9917eaa03"
);

function isValidData($transaction, $transaction_signature, $checksum_key)
{
ksort($transaction);
$transaction_str_arr = [];
foreach ($transaction as $key => $value) {
if (in_array($value, ["undefined", "null"]) || gettype($value) == "NULL") {
$value = "";
}

if (is_array($value)) {
$valueSortedElementObj = array_map(function ($ele) {
ksort($ele);
return $ele;
}, $value);
$value = json_encode($valueSortedElementObj, JSON_UNESCAPED_UNICODE);
}
$transaction_str_arr[] = $key . "=" . $value;
}
$transaction_str = implode("&", $transaction_str_arr);
dump($transaction_str);
$signature = hash_hmac("sha256", $transaction_str, $checksum_key);
dump($signature);
return $signature == $transaction_signature;
}


isValidData($webhookData['data'], $webhookData['signature'], $checksum_key);

Xem chi tiết về API tại đây.

2. Thông tin dữ liệu mẫu

code
required
string

Mã lỗi

desc
required
string

Thông tin lỗi

required
object
signature
required
string

Chữ kí để kiểm tra thông tin, chi tiết dữ liệu mẫu

{
  • "code": "string",
  • "desc": "string",
  • "data": {
    },
  • "signature": "8d8640d802576397a1ce45ebda7f835055768ac7ad2e0bfb77f9b8f12cca4c7f"
}