Tích Hợp VNPay Gateway: Cổng Thanh Toán Chuẩn Ngân Hàng Cho Doanh Nghiệp

Nếu bạn cần một cổng thanh toán “chuẩn ngân hàng”, uy tín và hỗ trợ hầu hết các loại thẻ từ nội địa đến quốc tế, thì VNPay chính là cái tên đầu tiên phải nhắc đến. Là đối tác chiến lược của hơn 40 ngân hàng tại Việt Nam, VNPay mang lại sự tin tưởng tuyệt đối cho khách hàng khi thực hiện giao dịch giá trị lớn.

Bài viết này, JAYbranding sẽ hướng dẫn bạn tích hợp VNPay Gateway – giải pháp thanh toán toàn diện được các ông lớn như Vietnam Airlines, Vietjet Air tin dùng.

1. Điểm Mạnh Của VNPay Gateway

  • Đa dạng phương thức: Chấp nhận thẻ ATM Nội địa (Napas), Thẻ quốc tế (Visa/Master/JCB/UnionPay), và quét mã VNPay-QR.
  • Hỗ trợ trả góp: Tự động tính toán phương án trả góp 0% lãi suất cho thẻ tín dụng.
  • Uy tín cao: Giao diện thanh toán mang thương hiệu VNPay tạo cảm giác an toàn như giao dịch trên E-Banking.
  • Mạng lưới rộng: Hơn 25 triệu người dùng Mobile Banking đã tích hợp sẵn tính năng quét mã VNPay.

2. Quy Trình Đăng Ký Đơn Vị Chấp Nhận Thanh Toán (Merchant)

Quy trình của VNPay thường chặt chẽ hơn các ví điện tử:

  1. Liên hệ bộ phận kinh doanh VNPay hoặc qua đối tác tích hợp như JAYbranding.
  2. Nộp hồ sơ: GPKD + Website đã thông báo Bộ Công Thương.
  3. Ký hợp đồng và đóng phí setup (nếu có).
  4. Nhận thông tin test trên môi trường Sandbox (Test):
    • vnp_TmnCode: Mã định danh website (Terminal ID).
    • vnp_HashSecret: Chuỗi bí mật dùng để tạo Checksum.

3. Hướng Dẫn Tích Hợp Kỹ Thuật (VNPay API)

VNPay sử dụng phương thức Redirect (Chuyển hướng) để đảm bảo an toàn thẻ. Bạn không được lưu thông tin thẻ của khách hàng trên website.

Bước 1: Tạo URL Thanh Toán

$vnp_Url = "https://sandbox.vnpayment.vn/paymentv2/vpcpay.html";
$vnp_Returnurl = "https://yourwebsite.com/vnpay_return.php";
$vnp_TmnCode = "CGXZ..."; // Mã website tại VNPay
$vnp_HashSecret = "XNBC..."; // Chuỗi bí mật

$vnp_TxnRef = date("YmdHis"); // Mã đơn hàng
$vnp_OrderInfo = "Thanh toan don hang #123";
$vnp_OrderType = "billpayment";
$vnp_Amount = 100000 * 100; // Số tiền (nhân 100)
$vnp_Locale = "vn";
$vnp_BankCode = "NCB"; // Mã ngân hàng (để trống nếu muốn khách tự chọn)
$vnp_IpAddr = $_SERVER['REMOTE_ADDR'];

$inputData = array(
    "vnp_Version" => "2.1.0",
    "vnp_TmnCode" => $vnp_TmnCode,
    "vnp_Amount" => $vnp_Amount,
    "vnp_Command" => "pay",
    "vnp_CreateDate" => date("YmdHis"),
    "vnp_CurrCode" => "VND",
    "vnp_IpAddr" => $vnp_IpAddr,
    "vnp_Locale" => $vnp_Locale,
    "vnp_OrderInfo" => $vnp_OrderInfo,
    "vnp_OrderType" => $vnp_OrderType,
    "vnp_ReturnUrl" => $vnp_Returnurl,
    "vnp_TxnRef" => $vnp_TxnRef
);

// Sắp xếp dữ liệu theo alphabet để tạo checksum
ksort($inputData);
$query = "";
$i = 0;
$hashdata = "";
foreach ($inputData as $key => $value) {
    if ($i == 1) {
        $hashdata .= '&' . urlencode($key) . "=" . urlencode($value);
    } else {
        $hashdata .= urlencode($key) . "=" . urlencode($value);
        $i = 1;
    }
    $query .= urlencode($key) . "=" . urlencode($value) . '&';
}

$vnp_Url = $vnp_Url . "?" . $query;
if (isset($vnp_HashSecret)) {
    $vnpSecureHash =   hash_hmac('sha512', $hashdata, $vnp_HashSecret); // Dùng SHA512
    $vnp_Url .= 'vnp_SecureHash=' . $vnpSecureHash;
}

// Redirect khách hàng
header('Location: ' . $vnp_Url);

Bước 2: Xử Lý Kết Quả Trả Về (Return URL)

Sau khi thanh toán, khách hàng được chuyển về vnp_Returnurl kèm theo các tham số GET. Bạn phải kiểm tra lại chữ ký (SecureHash) để đảm bảo dữ liệu không bị sửa đổi.

// File: vnpay_return.php
$vnp_SecureHash = $_GET['vnp_SecureHash'];
$inputData = array();
foreach ($_GET as $key => $value) {
    if (substr($key, 0, 4) == "vnp_") {
        $inputData[$key] = $value;
    }
}
unset($inputData['vnp_SecureHash']); 
ksort($inputData);
$i = 0;
$hashdata = "";
foreach ($inputData as $key => $value) {
    if ($i == 1) {
        $hashdata .= '&' . urlencode($key) . "=" . urlencode($value);
    } else {
        $hashdata .= urlencode($key) . "=" . urlencode($value);
        $i = 1;
    }
}

$secureHash = hash_hmac('sha512', $hashdata, $vnp_HashSecret);

if ($secureHash == $vnp_SecureHash) {
    if ($_GET['vnp_ResponseCode'] == '00') {
        echo "Giao dịch thành công!";
        // Cập nhật trạng thái đơn hàng
    } else {
        echo "Giao dịch thất bại. Lỗi: " . $_GET['vnp_ResponseCode'];
    }
} else {
    echo "Chữ ký không hợp lệ (Sai checksum)";
}

4. Những Lưu Ý Quan Trọng Khi Tích Hợp VNPay

  • Checksum Algorithm: VNPay dùng SHA512 (trước đây là MD5/SHA256). Hãy chắc chắn bạn code đúng thuật toán mới nhất.
  • IPN (Instant Payment Notification): Tương tự MoMo, bạn cần setup thêm một URL IPN để nhận kết quả ngầm, đề phòng trường hợp khách tắt trình duyệt trước khi Redirect về Return URL.
  • Môi trường Sandbox: Link API Sandbox và Production khác nhau hoàn toàn. Nhớ thay đổi khi Go Live.

5. Dịch Vụ Hỗ Trợ Tích Hợp Toàn Diện Của JAYbranding

Việc làm việc với các hệ thống ngân hàng thường yêu cầu quy trình bảo mật khắt khe. JAYbranding sẽ giúp bạn:

  • Fast-track Hồ sơ: Hỗ trợ đẩy nhanh quá trình duyệt hồ sơ Merchant với VNPAY.
  • Tích hợp chuẩn: Xử lý đầy đủ các API: Thanh toán, Truy vấn (QueryDR), Hoàn tiền (Refund) tự động.
  • Giao diện tùy biến: Tích hợp VNPay vào luồng thanh toán (Checkout flow) mượt mà, không gây khó chịu cho khách.

📞 Tích hợp VNPay ngay – Uy tín trong từng giao dịch!
Hotline: 0899991131

FAQ Về VNPay Gateway

[faqs]

VNPay-QR khác gì so với MoMo/ZaloPay QR?

VNPay-QR có thể được quét bởi ứng dụng Mobile Banking của hơn 40 ngân hàng (Vietcombank, BIDV, Agribank…) mà không cần cài thêm ví điện tử.

Phí giao dịch VNPay là bao nhiêu?

Thường giao động từ 0.8% – 1.5% cho giao dịch QR và cao hơn cho thẻ quốc tế. Liên hệ JAYbranding để có chính sách phí tốt nhất.

[/faqs]

JAY AI

J.A.I — JAY AI

Trợ lý tư vấn JAYbranding