VNPAY là cổng thanh toán nội địa có độ phủ ngân hàng rộng nhất Việt Nam — kết nối 40+ ngân hàng + thẻ Visa/Master qua 3D Secure 2.0. Quy trình tích hợp 4 bước với plugin official trên WordPress.org mất 1-2 ngày làm việc.
Bài này hướng dẫn end-to-end + xử lý 5 lỗi phổ biến + 4 custom logic thường dùng cho shop VN.
Khi nào nên chọn VNPAY làm cổng chính
VNPAY xử lý hơn 60% giao dịch online qua ngân hàng VN năm 2024 theo báo cáo NAPAS. Shop B2C target mass market 25-55 tuổi nên ưu tiên VNPAY làm gateway primary.
Lợi thế lớn của VNPAY là plugin official được duy trì trực tiếp bởi đội dev VNPAY — update theo phiên bản WooCommerce mới trong 1-2 tuần, không phụ thuộc community.
3 tier phí phân theo volume tháng
| Tier | Phí giao dịch | Phù hợp shop | Volume |
|---|---|---|---|
| Standard | 2,2% | Shop mới mở | dưới 100tr/tháng |
| Pro | 1,5-1,8% | Shop ổn định | 100tr-500tr/tháng |
| Enterprise | 1,1-1,4% | Đàm phán custom | trên 500tr/tháng |
So sánh nhanh với các cổng khác trong batch
- VNPAY vs MoMo: VNPAY mạnh ở thẻ ATM (40+ banks), MoMo mạnh ở ví điện tử trẻ — chọn VNPAY làm primary cho shop mass market.
- VNPAY vs OnePay: VNPAY phê duyệt 3-7 ngày, OnePay nghiêm hơn 5-15 ngày — VNPAY phù hợp shop SME khởi động nhanh.
- VNPAY vs Ngân Lượng: VNPAY không có escrow, Ngân Lượng có — shop marketplace 2-bên nên xem tích hợp Ngân Lượng thay thế.
Bước 1 — Đăng ký merchant VNPAY trên Cổng Doanh nghiệp
Truy cập vnpay.vn mục “Merchant” để tạo account business. Form online 15 phút, sau đó VNPAY review 3-7 ngày làm việc.
5 giấy tờ cần chuẩn bị trước khi submit
- Giấy phép kinh doanh bản scan màu, file PDF dưới 5MB.
- CCCD/CMND người đại diện pháp luật, scan 2 mặt rõ nét.
- Hợp đồng thuê nhà hoặc giấy chứng nhận sở hữu địa điểm kinh doanh.
- Số tài khoản ngân hàng đứng tên doanh nghiệp khớp giấy phép.
- URL website đã có SSL active + sản phẩm/dịch vụ hiển thị rõ.
Sau khi approve — 3 credential phải lưu kỹ
VNPAY gửi email approval kèm 3 thông tin quan trọng. Lưu cả 3 vào password manager (1Password, Bitwarden) — KHÔNG paste qua Slack public hay email cá nhân.
- Terminal ID (TMN Code): mã định danh terminal, vd
2QXUI4B4— paste vào plugin setting. - Hash Secret: chuỗi ký tự sign request HMAC SHA512 — rò rỉ là attacker giả mạo callback được.
- Endpoint URL: sandbox
sandbox.vnpayment.vnvà productionpay.vnpay.vn.
Bước 2 — Cài plugin VNPAY official từ WordPress.org
VNPAY là một trong ít cổng thanh toán VN có plugin official được publish chính thức trên WordPress.org. Cài qua wp-admin chỉ 5 phút, không cần touch code SSH.
Quy trình cài plugin qua wp-admin UI
- Vào Plugins → Add New, search keyword “VNPAY for WooCommerce”.
- Chọn plugin có publisher “VNPay JSC” — đây là plugin official duy nhất.
- Click Install Now, đợi download xong, sau đó Activate.
- Vào WooCommerce → Settings → Payments tìm row “VNPAY”.
- Click Manage để mở trang config credential.
Cấu hình credential và endpoint URL
Trang config có 8 field bắt buộc. Paste chính xác từ email VNPAY — sai 1 ký tự là toàn bộ flow fail.
# WooCommerce → Settings → Payments → VNPAY → Manage
Enable: ✓ tick để bật gateway
Title: "Thanh toán qua VNPAY (40+ ngân hàng)"
Description: "Thanh toán an toàn qua VNPAY với ATM/Visa/Master."
Terminal ID (TMN Code): 2QXUI4B4
Hash Secret: SECRETKEY123ABCXYZ
Sandbox URL: https://sandbox.vnpayment.vn/paymentv2/vpcpay.html
Production URL: https://pay.vnpay.vn/vpcpay.html
Return URL: https://yourdomain.vn/wc-api/vnpay/
Mode: Sandbox (đổi Production sau khi test pass)
Currency: VND
Locale: vn
Save changes
Bước 3 — Test sandbox với 3 card test VNPAY cấp
Bắt buộc test sandbox trước go-live, dù tự tin config đúng. VNPAY cấp 3 card test cover happy path + failure path để verify toàn bộ flow.
3 card test cho 3 kịch bản khác nhau
- Card success ATM nội địa: số
9704198526191432198, expire07/15, OTP123456— verify flow happy path. - Card test failed: số
9704195825181517410, expire07/15, OTP123456— verify shop handle failure đúng. - Card test 3DS Visa: số cấp riêng trong dashboard merchant — verify flow 3D Secure cho thẻ quốc tế.
Quy trình test checkout end-to-end
Tạo 1 sản phẩm test giá 100.000đ, add vào cart, checkout chọn VNPAY. Hệ thống redirect sang sandbox VNPAY → nhập card test → confirm OTP 123456.
- Verify order status: WooCommerce → Orders, order phải chuyển từ “Pending” sang “Processing”.
- Verify email confirm: email order confirm phải gửi đến địa chỉ khách hàng test.
- Verify log gateway: WooCommerce → Status → Logs, file
vnpay-{date}.logphải có entry success kèm transaction ID.
Bước 4 — Go live và custom logic 4 use case phổ biến
Sau khi test sandbox pass 3-5 đơn với cả 3 card test, switch Mode từ Sandbox sang Production. Paste production URL từ email VNPAY, save lại.
Test ngay 1 đơn thật với card cá nhân của owner, mua sản phẩm giá 10.000đ. Verify flow production hoạt động end-to-end trước khi mở cho khách hàng.
Custom 1 — Add fee 1,5% transparent với khách
Shop muốn pass-through phí VNPAY cho khách hàng. Dùng filter hook để hiển thị fee trong cart và checkout — minh bạch giúp khách hiểu giá thay đổi.
add_action('woocommerce_cart_calculate_fees', 'add_vnpay_fee');
function add_vnpay_fee() {
$payment = WC()->session->get('chosen_payment_method');
if ($payment === 'vnpay') {
$fee = WC()->cart->get_subtotal() * 0.015;
WC()->cart->add_fee('Phí xử lý VNPAY (1,5%)', $fee, false);
}
}
Custom 2 — Hide VNPAY với đơn dưới 50.000đ
Đơn quá nhỏ không kinh tế khi pass-through fee VNPAY. Hide gateway với đơn dưới ngưỡng, ép khách chọn COD hoặc bank transfer.
add_filter('woocommerce_available_payment_gateways', 'hide_vnpay_low_amount');
function hide_vnpay_low_amount($gateways) {
if (is_admin() || ! WC()->cart) return $gateways;
$total = WC()->cart->get_total('numeric');
if ($total < 50000) {
unset($gateways['vnpay']);
}
return $gateways;
}
Custom 3 — Idempotent webhook chống double-charge
Webhook callback có thể fire 2 lần do network retry.
Dùng meta key check trước khi update order status — tránh charge khách 2 lần do bug.
5 lỗi phổ biến khi tích hợp VNPAY và cách fix nhanh
Dưới đây là 5 lỗi gặp nhiều nhất qua kinh nghiệm Web22 tích hợp VNPAY cho hơn 80 shop. Mỗi lỗi có root cause + fix cụ thể.
- Invalid hash signature: sau redirect sang VNPAY, page báo “Invalid hash” — nguyên nhân Hash Secret paste sai. Re-paste từ email gốc, đảm bảo không có space đầu/cuối.
- Không quay lại site sau thanh toán: Return URL config sai trong plugin hoặc dashboard merchant VNPAY. Set chính xác
https://yourdomain.vn/wc-api/vnpay/ở cả 2 nơi. - VNPAY reject domain không SSL: production yêu cầu HTTPS active. Cài Let’s Encrypt qua hosting trước khi switch sang production mode.
- IP server chưa whitelist: production VNPAY yêu cầu whitelist IP server gọi API. Lấy IP qua hosting panel, gửi VNPAY support qua email.
- Đơn bị charge 2 lần: webhook fire duplicate do timeout retry. Implement idempotent check với meta
_vnpay_processed, return 200 OK ngay khi nhận callback.
Monitoring và đối soát doanh thu hàng ngày
Sau khi go-live, vận hành VNPAY ổn định cần workflow monitoring + đối soát doanh thu daily. Bỏ qua step này dẫn đến phát hiện lỗi muộn — đơn fail âm thầm hoặc settlement không khớp.
Dashboard merchant VNPAY 3 metric quan trọng
- Transaction success rate: tỷ lệ giao dịch thành công trên tổng request — healthy trên 92%, dưới 85% là dấu hiệu issue gateway hoặc UX checkout.
- Settlement timing: verify settle đúng T+1 cho thẻ ATM, T+2-3 cho thẻ quốc tế — delay quá hạn liên hệ Account Manager ngay.
- Refund volume: track refund/cancel rate — bất thường vượt 5% có thể là dấu hiệu fraud hoặc UX checkout có bug.
Đối soát doanh thu cuối ngày
Export báo cáo VNPAY tab Reports → Daily Settlement, đối chiếu với WooCommerce → Reports → Sales daily. Sai lệch trên 1% cần investigate ngay — thường do đơn được paid bên VNPAY nhưng IPN không fire về WooCommerce.
- Đơn pending nhưng paid: query WooCommerce DB tìm order status pending hơn 1 giờ, cross-check với dashboard VNPAY.
- Phí gateway minus: tổng phí VNPAY phải khớp công thức (transaction_amount × fee_rate) — phát hiện overcharge sớm.
- Refund pending: refund qua VNPAY mất 5-7 ngày — track trong dashboard, theo dõi khách nếu quá hạn.
Tích hợp đa cổng và bài liên quan
Shop VN trưởng thành thường tích hợp 2-3 cổng song song để cover hết phân khúc khách hàng. VNPAY làm primary, MoMo và ZaloPay làm phụ.
Tham khảo guide chi tiết các cổng còn lại: tích hợp MoMo cho khách trẻ 18-35 tuổi, tích hợp ZaloPay để leverage Zalo OA marketing, tích hợp OnePay nếu có khách B2B doanh nghiệp lớn.
Trước khi tích hợp payment, đảm bảo shop đã hardening security đúng chuẩn — xem bảo mật shop WooCommerce 7 lớp để bảo vệ data khách.
Câu hỏi thường gặp về tích hợp VNPAY
VNPAY và MoMo nên chọn cái nào làm gateway chính?
VNPAY phù hợp làm primary cho mọi shop B2C mass market vì độ phủ ngân hàng rộng nhất VN — 40+ banks cover hơn 90% user có thẻ ATM. MoMo mạnh ở phân khúc user trẻ 18-35 với conversion cao hơn 5-8%.
Best practice: tích hợp cả hai, VNPAY default, MoMo làm option phụ cho khách trẻ. Shop fashion + F&B target user 18-30: có thể đảo lại MoMo primary.
VNPAY có chấp nhận thẻ Visa/Master quốc tế không?
Có support đầy đủ qua 3D Secure 2.0. Phí cao hơn thẻ ATM nội địa: 2,5-3% so với 1,1-2,2% — chênh lệch do cross-border interchange fee từ Visa/Master Network.
Shop bán quốc tế ngoài VN nên cân nhắc Stripe (offshore) cho khách non-VN — phí cross-border thấp hơn 2-2,9%, UX checkout quen với khách Mỹ/EU.
Phí VNPAY đàm phán xuống được bao nhiêu phần trăm?
Volume trên 500tr/tháng có thể đàm phán giảm 0,3-0,5%. Volume trên 1 tỷ/tháng có thể đạt rate 1,0% — gần ngang interchange fee thẻ ATM.
Liên hệ Account Manager VNPAY sau 6 tháng vận hành stable. Mang theo data growth + commit lock contract 12 tháng để có leverage tốt nhất khi negotiate.
Plugin VNPAY official có hỗ trợ subscription định kỳ không?
Plugin official chỉ support 1-time payment. Subscription cần custom code dùng VNPAY Token API hoặc dùng plugin paid bên thứ ba “VNPAY Subscriptions” giá 149 USD trên CodeCanyon.
Shop SaaS billing hàng tháng nên cân nhắc Stripe (offshore) — subscription billing mạnh hơn nhiều, có dunning management cho fail payment, ngược lại VNPAY phải build tay.
Tiền thanh toán bao lâu mới về tài khoản shop?
Thẻ ATM nội địa settle T+1 — ngày làm việc tiếp theo sau khi giao dịch hoàn tất. Thẻ Visa/Master delay hơn T+2 đến T+3 do cross-border clearing.
Cuối tuần và lễ Tết settle bị delay thêm 1-2 ngày. Phí đã trừ trước khi settle, đối soát qua dashboard merchant tab Reports → Settlement mỗi ngày.
Tích hợp VNPAY trọn gói cho shop của bạn
Setup VNPAY end-to-end cần kiến thức WordPress + PHP + signature crypto + payment compliance. Shop không có dev WooCommerce chuyên trách mất 3-5 ngày tự mò, dễ stuck ở debug signature.
Web22 ship turnkey VNPAY trong 2-3 ngày, bao gồm cả custom logic fee transparent + idempotent webhook + monitoring log. Dịch vụ thiết kế WooCommerce trọn gói tại Web22 — báo giá theo phạm vi, có SLA cam kết giao đúng hạn.


