Thông tin kết nối (Key Credential) #
9Pay sẽ cung cấp cho đối tác ĐVCNTT các thông tin kết nối để định danh trong quá trình tích hợp bao gồm:
- Merchant Key: Thông tin định danh Đối tác
- Merchant Secret Key: Thông tin dùng để tạo chữ ký điện tử (Signature)
Chữ ký điện tử #
Lưu ý: Chọn UTF-8 cho tất cả mã hóa
Chữ ký khi tạo yêu cầu (Signature)
Chữ ký bằng HMAC-SHA256
Signature = base64_encode(HMACSHA256( <Http request method> +”\n”+<URI>+”\n”+<timestamp> +”\n”+<canonicalized resources>, <merchant_secret_key>))
Key | Description |
<Http request method> |
phương thức gọi đến “POST” or “GET” |
<URI> |
URI bên 9pay mà đối tác gọi đến |
<timestamp> |
Unixtimestamp độ dài10 |
<merchant_secret_key> |
Mã Secret key sẽ được cấp bởi 9pay |
<canonicalized resources> |
B1) Liệt kê tất cả các tham số yêu cầu |
Ví dụ |
Signature = base64_encode(HMACSHA256( “POST”+”\n”+https://sand-business.9pay.vn/payments/create+”\n”+1611135904 +”\n”+merchantKey=”NGuTdi”&invoice_no=92938380&amount=10000&description=”Thanh toán đơn hàng”&return_url=https://sand-payment.9pay.com, “pe1asmBPtPBZo8o6SIIwPFbDXTEvuKwTLlD”)) |
Xác nhận dữ liệu trả về
a. Chữ ký bằng HMAC-SHA256
Kết quả trả về luôn có 3 giá trị là result (dữ liệu được mã hóa), checksum (checksum được tạo ra từ dữ liệu mã hóa và key checksum của đối tác), version
$ninePayResult = [
'result' => 'string result',
'checksum' => 'string checksum',
'version' => 'v1',
];
b. Kiểm tra mã checksum và lấy dữ liệu thông tin thanh toán
Sử dụng hash sha256 kết quả và key checksum(được cung cấp khi tích hợp) tạo ra mã xác thực checksum. So sánh mã này với giá trị checksum nhận được để xác định tính hợp lệ của dữ liệu
Ví dụ PHP:
$secretKeyCheckSum (yêu cầu cung cấp dùng riêng để checksum)
$hashChecksum = strtoupper(hash('sha256', $ninePayResult['result'] . $secretKeyCheckSum));
// Kiểm tra mã checksum
if ($hashChecksum === $ninePayResult[' checksum']) {
// Thông tin payment nhận về
$arrayParams = json_decode(base64_decode($ninePayResult['result']), true);
}
Xác thực #
Thêm các tham số bên dưới vào header mỗi lần gọi API
Tên | Kiểu dữ liệu | Bắt buộc | Mô tả |
Authorization | string | có |
Signature<dấucách>Algorithm=<algorithm>, |
Date | number | có | Định dang timestamp/unix time - độ dài10 |
Ví dụ header sẽ có thêm 2 key này khi request đến 9pay
Date | 1611135904 |
Authorization |
Signature Algorithm=HS256,Credential=X4cWcr,SignedHeaders=,Signature=Up0g/RzufgzrX+U2RjSEHtPjl7Q3NIlgtRcKi9lWe6o= |