KIếN THứC WEBSITE › WOOCOMMERCE

Cấu hình COD trong WooCommerce — giới hạn tỉnh, thu phí, fraud detection

Cấu hình COD trong WooCommerce — giới hạn tỉnh, thu phí, fraud detection

Cash on Delivery (COD) chiếm 60-70% đơn hàng ecommerce VN theo báo cáo Vinasa 2025 — gấp đôi tỉ lệ trung bình Đông Nam Á 35%. WooCommerce có COD plugin built-in miễn phí, nhưng setup mặc định không đủ để giảm fail rate.

Bài này hướng dẫn 5 cấu hình quan trọng: bật COD cơ bản, giới hạn theo tỉnh, thu phí COD bù risk, deposit 30% cho đơn lớn, fraud detection blacklist SĐT bom hàng. Áp dụng đủ 5 layer giúp giảm tỉ lệ bom hàng từ 15-20% xuống dưới 5%.

Vì sao COD vẫn dominant tại Việt Nam 2026

COD chiếm 60-70% đơn ecommerce VN năm 2025, gấp đôi tỉ lệ trung bình Đông Nam Á (Thái Lan 38%, Indonesia 42%, Philippines 35%). Nguyên nhân không phải do thiếu hạ tầng thanh toán — VN có đầy đủ MoMo, VNPAY, ZaloPay phủ rộng.

Hành vi consumer mới là nhân tố quyết định.

3 yếu tố hành vi user VN giải thích pattern này: lo lắng pre-pay với shop chưa có brand, thẻ ATM chỉ dùng để rút tiền không quen online payment, thói quen tỉnh lẻ “cầm hàng rồi mới trả tiền”. Hiểu nguyên nhân giúp config COD đúng và push pre-pay đúng cách thay vì cố ép khách bỏ thói quen.

3 lý do COD dominant và trade-off thực tế

  • Lo lắng pre-pay: hơn 50% user VN chưa tin tưởng pre-pay đặc biệt cho shop mới chưa có brand trust. Cần thời gian xây bằng chứng từ khách thật qua review Google, Facebook, Shopee mới giảm được mindset này.
  • Thẻ ATM chỉ rút tiền: dù 80% người trưởng thành VN có thẻ ATM, chỉ khoảng 30% dùng cho online payment. Internet Banking và Mobile Banking chưa phổ biến đại trà ở tỉnh và nông thôn.
  • Thói quen tỉnh lẻ: ngoài Hà Nội và HCM, COD chiếm trên 80% đơn. Khách thích cầm hàng kiểm tra trước khi trả tiền — mindset truyền thống từ chợ và tiệm tạp hoá.

Trade-off cứng của COD: tỉ lệ huỷ đơn 10-20% cho shop chưa optimize, shop chịu phí ship 2 chiều khi đơn fail. Phí ship 2 chiều trung bình 30.000-60.000đ mỗi đơn fail, nhân 100 đơn fail/tháng ra 3-6 triệu loss.

Config COD đúng cách giảm fail rate xuống dưới 5%.

Bước 1 — Bật COD trong WooCommerce cơ bản

cấu hình cod woocommerce — Bước 1 — Bật COD trong WooCommerce cơ bản
Sơ đồ minh hoạ — Bước 1 — Bật COD trong WooCommerce cơ bản
Bước 1 — Bật COD trong WooCommerce cơ bản
Sơ đồ minh hoạ — Bước 1 — Bật COD trong WooCommerce cơ bản

COD là method built-in của WooCommerce, không cần cài plugin riêng. Bật và config cơ bản trong 5 phút qua wp-admin UI không cần touch code.

Đây là setup foundation, các H2 sau sẽ add config nâng cao gồm giới hạn tỉnh, phí COD, deposit và fraud detection.

7 bước bật COD qua wp-admin

  1. Vào WooCommerce → Settings → Payments trên wp-admin.
  2. Tìm dòng “Cash on delivery” trong list, click Manage.
  3. Tick “Enable cash on delivery” để bật cổng.
  4. Title: “Thanh toán khi nhận hàng (COD)” — hiển thị trên checkout.
  5. Description: “Quý khách thanh toán bằng tiền mặt khi nhận hàng từ shipper. Giao 1-3 ngày tại HN/HCM, 3-5 ngày các tỉnh khác.”
  6. Instructions (gửi trong email confirm): “Vui lòng chuẩn bị đủ tiền mặt theo hoá đơn. Shipper sẽ liên hệ trước 30 phút.”
  7. “Enable for shipping methods”: chọn các method được phép kèm COD như Flat rate VN, GHN, GHTK. Bỏ tích Free shipping nếu không muốn COD cho đơn free ship.

3 setting nâng cao ít người biết

Mặc định WooCommerce hide 3 setting nâng cao trong COD config. Mở bằng cách thêm query string ?debug=1 vào URL admin Payments hoặc dùng plugin “WooCommerce Advanced Cash on Delivery” (free) để unlock UI.

  • “Accept for virtual orders”: default off — chặn COD cho product virtual (khoá học digital, ebook). Bật on chỉ khi shop bán mix vật lý và digital trong cùng đơn.
  • “Accept COD if order contains” filter category: chỉ cho COD nếu đơn chứa category nhất định. Phù hợp shop bán cả hàng vật lý mass và service không phù hợp COD.
  • “Minimum order amount”: chỉ cho COD nếu đơn trên ngưỡng (vd 100.000đ). Tránh COD đơn quá nhỏ phí ship 2 chiều ăn hết margin.

Bước 2 — Giới hạn COD theo địa chỉ giao

Mặc định COD available cho mọi địa chỉ trong vùng shipping. Nhưng giao xa (vùng sâu, tỉnh không có shipper riêng của GHN/GHTK) có fail rate cao 20-30%.

Giới hạn COD theo tỉnh là config quan trọng nhất sau khi bật COD.

2 cách giới hạn COD theo tỉnh

  • Plugin free WooCommerce Conditional Payment Methods: cài qua wp-admin, config rule “Hide COD if shipping state IS NOT in [Hà Nội, TP.HCM, Đà Nẵng, Hải Phòng, Cần Thơ]”. 5 thành phố này chiếm 70% đơn shop online VN, fail rate thấp dưới 10%.
  • Plugin paid Hide Payment Methods Pro (59 USD/năm): config conditional logic phức tạp AND/OR, filter theo product category + state + role + total. Phù hợp shop có business logic complex.

Khách ngoài 5 thành phố lớn chỉ thấy VNPAY, MoMo, ZaloPay trên checkout — không thấy option COD. Giảm fail rate đơn từ tỉnh xa từ 25% xuống dưới 8%, đồng thời tăng tỉ trọng pre-pay vì khách buộc chọn cổng online.

Bước 3 — Charge phí COD 20-30k bù risk ship 2 chiều

Phí ship 2 chiều khi COD fail trung bình 30.000-60.000đ. Charge phí COD 20.000-30.000đ trên checkout giúp bù 1 phần risk này, đồng thời tạo incentive cho khách chọn pre-pay (discount 5-10% cho VNPAY/MoMo) — push tỉ lệ pre-pay từ 30% lên 45%.

Cài plugin Payment Gateway Based Fees

Cài plugin WooCommerce Payment Gateway Based Fees and Discounts (free trên repo WordPress.org). Config rule “Add fee 20.000đ if payment method = Cash on delivery”.

Khách thấy dòng “Phí COD: 20.000đ” trên trang checkout — minh bạch, hợp lý.

Kết hợp với rule “Discount 5% if payment method = VNPAY hoặc MoMo”. Khách chọn pre-pay được giảm giá, khách chọn COD chịu thêm phí — chênh lệch 7-8% giúp push hành vi pre-pay rõ rệt.

Snippet PHP custom thay vì plugin

// Add fee 20.000đ cho payment method COD
add_action('woocommerce_cart_calculate_fees', 'add_cod_fee');

function add_cod_fee() {
    if (is_admin() && ! defined('DOING_AJAX')) return;

    $payment_method = WC()->session->get('chosen_payment_method');
    if ($payment_method === 'cod') {
        WC()->cart->add_fee(__('Phí COD', 'web22'), 20000, false);
    }
}

// Discount 5% cho pre-pay VNPAY/MoMo
add_action('woocommerce_cart_calculate_fees', 'add_prepay_discount');

function add_prepay_discount() {
    if (is_admin() && ! defined('DOING_AJAX')) return;

    $method = WC()->session->get('chosen_payment_method');
    if (in_array($method, ['vnpay', 'momo'])) {
        $discount = WC()->cart->get_subtotal() * 0.05;
        WC()->cart->add_fee(__('Giảm giá pre-pay 5%', 'web22'), -$discount, false);
    }
}

Bước 4 — Deposit 30% cho đơn trên 5 triệu

Đơn trên 5 triệu có rủi ro cao nếu fail — phí ship 2 chiều cộng với risk hàng hư hỏng quay lại. Yêu cầu khách đặt deposit 30% qua VNPAY hoặc MoMo, còn lại COD khi giao.

Giảm fail rate đơn lớn từ 15% xuống dưới 3%.

Setup deposit qua plugin WooCommerce Deposits

Cài plugin WooCommerce Deposits (paid 79 USD/năm trên repo Code Canyon). Config rule:

# Plugin config (UI)
Rule: If order total > 5.000.000đ
  Action: Require deposit = 30%
  Deposit payment: VNPAY hoặc MoMo (block COD)
  Remaining payment: COD on delivery
  Schedule: Deposit immediate, remainder on delivery

Flow khách checkout đơn 6 triệu

Khách add cart đơn 6 triệu, đến checkout. Thấy notice “Đơn trên 5 triệu yêu cầu deposit 30%”.

Thanh toán deposit 1.800.000đ qua VNPAY → đơn confirm → ship → khách trả 4.200.000đ COD khi nhận.

Nếu khách bom hàng sau ship, shop đã có 1.800.000đ không refund (theo policy ghi rõ trên checkout). Risk thấp hơn nhiều so với mất full 6 triệu cộng phí ship 2 chiều.

Đảm bảo policy deposit non-refundable nếu khách huỷ sau khi shipper đã đi, ghi rõ trên trang Refund Policy.

Bước 5 — Fraud detection cho COD chống đơn ảo

Đơn COD ảo có 3 pattern phổ biến: SĐT fake 10 số random, địa chỉ không tồn tại trên Google Maps, khách đã bom trên 2 đơn trước đó. Setup fraud detection layer giảm đơn ảo trên 80% — đặc biệt quan trọng cho shop trên 100 đơn/ngày.

3 layer fraud detection nên triển khai

  • OTP verify SĐT trước confirm đơn: plugin “OTP Verification” gửi OTP qua SMS hoặc Zalo, khách phải nhập OTP mới confirm. Block 70%+ đơn từ SĐT fake.
  • Phí SMS khoảng 300đ/lần qua eSMS hoặc SpeedSMS.
  • Blacklist SĐT đã fail nhiều lần: plugin “WooCommerce Anti-Fraud” log SĐT khi đơn fail, block tự động khi SĐT đã fail trên 2 lần trong 30 ngày.
  • Verify địa chỉ qua Google Maps Geocode: plugin tích hợp Maps API check địa chỉ có tồn tại không. Reject đơn có địa chỉ “không tìm thấy” hoặc “rất xa khỏi city center”.

Snippet PHP blacklist SĐT bom hàng tự động

// Block COD nếu SĐT trong blacklist
add_filter('woocommerce_available_payment_gateways', 'block_cod_blacklist');

function block_cod_blacklist($gateways) {
    if (is_admin() || ! WC()->customer) return $gateways;

    $phone = WC()->customer->get_billing_phone();
    $blacklist = get_option('cod_blacklist_phones', []);

    if (in_array($phone, $blacklist)) {
        unset($gateways['cod']);
    }
    return $gateways;
}

// Auto-add SĐT vào blacklist khi đơn COD failed lần 3
add_action('woocommerce_order_status_failed', 'auto_blacklist_cod_phone');

function auto_blacklist_cod_phone($order_id) {
    $order = wc_get_order($order_id);
    if ($order->get_payment_method() !== 'cod') return;

    $phone = $order->get_billing_phone();
    $count = get_option("cod_fail_$phone", 0) + 1;
    update_option("cod_fail_$phone", $count);

    if ($count >= 3) {
        $blacklist = get_option('cod_blacklist_phones', []);
        $blacklist[] = $phone;
        update_option('cod_blacklist_phones', array_unique($blacklist));
    }
}

Tích hợp COD với shipping VN — settlement flow

COD đi cùng shipping nội địa GHN, GHTK, Viettel Post — shipper thu giúp tiền, settle về tài khoản shop sau 2-5 ngày làm việc tuỳ đơn vị cung cấp.

Tích hợp đúng giúp track đơn realtime và tự động đối soát COD hằng tháng.

Đơn vị cung cấp Settlement Phí thu hộ API support
GHN 2-3 ngày 0,5-1,0% Plugin official
GHTK 2-4 ngày 0,7-1,2% Plugin official
Viettel Post 3-5 ngày 0,8-1,5% Plugin community

Plugin WooCommerce tích hợp với đơn vị cung cấp: tạo vận đơn auto khi đơn confirm, update status realtime (Đã lấy hàng → Đang giao → Đã giao → Đã thu COD), settle COD về tài khoản shop sau 2-5 ngày. Xem chi tiết tại bài tích hợp GHN vào WooCommerce.

5 kỹ thuật giảm tỉ lệ bom hàng dưới 5%

5 kỹ thuật giảm tỉ lệ bom hàng dưới 5%
Sơ đồ minh hoạ — 5 kỹ thuật giảm tỉ lệ bom hàng dưới 5%

Bom hàng (huỷ đơn lúc shipper giao) là pain point lớn nhất của COD. Tỉ lệ trung bình 10-20% với shop VN.

5 kỹ thuật sau được verify trên shop Web22 quy mô trên 1.000 đơn/tháng, giảm fail rate xuống dưới 5%.

  • OTP verify SĐT bắt buộc: SMS hoặc Zalo OTP, khách không nhập OTP thì đơn pending. Giảm bom hàng casual 60%+ vì SĐT fake không nhận được OTP.
  • Gọi điện confirm đơn trên 500k: tốn 2-3 phút/đơn nhưng giảm bom 50% cho đơn lớn. Ưu tiên gọi đơn từ tỉnh xa nơi fail rate cao tự nhiên.
  • Charge phí ship 2 chiều khi huỷ: notice rõ trên checkout “Nếu hủy sau khi shipper đã đi, khách chịu phí ship 2 chiều 30.000đ”. Giảm bom hàng casual 30% vì khách suy nghĩ trước khi click.
  • Blacklist SĐT bom trên 2 lần: share blacklist giữa shop trong group Facebook hoặc Zalo industry. Block hoàn toàn khách bom serial — pattern khách bom thường tái phạm.
  • Loyalty cho khách thành công: khách đã mua 3+ đơn thành công thì ưu đãi free ship lần sau. Build trust, push repeat purchase, đồng thời lọc khách quality cao tự nhiên.

Câu hỏi thường gặp về cấu hình COD WooCommerce

Có nên bỏ COD hoàn toàn không?

Không. COD chiếm 60-70% đơn VN — bỏ hoàn toàn nghĩa là mất 60% doanh thu ngay lập tức.

Thay vào đó: optimize COD bằng 5 layer (verify SĐT, charge phí, deposit cho đơn lớn, fraud detection) và push pre-pay options bằng discount 5-10% cho khách chọn VNPAY hoặc MoMo.

Mục tiêu thực tế: giảm tỉ trọng COD xuống 40-50% sau 12 tháng vận hành. Bỏ hoàn toàn chỉ phù hợp shop dịch vụ digital pure (khoá học, ebook) không phải shop bán hàng vật lý.

Phí COD shop nên charge bao nhiêu?

20.000-30.000đ cho đơn dưới 1 triệu, free cho đơn trên 1 triệu. Hoặc dùng % cố định 1-2% giá trị đơn.

Logic: phí ship 2 chiều khi fail là 30.000-60.000đ, charge phí COD bù 1 phần risk.

Charge cao quá (50.000đ+) sẽ làm khách chuyển sang shop khác — shop đối thủ có thể chọn không charge phí COD. Benchmark thị trường VN: 90% shop charge 20.000-30.000đ là mức lý tưởng.

Plugin Hide Payment Methods free hay Pro tốt hơn?

Free version đủ cho 80% case (filter theo country, state, role, total). Pro 59 USD/năm thêm: filter theo product category, custom rules complex, conditional logic AND/OR multi-level.

Cho shop SME dưới 200 đơn/ngày, free đủ dùng. Shop scale lớn có nhiều business rule phức tạp thì Pro đáng giá vì tiết kiệm thời gian dev custom code.

Settlement COD bao lâu về tài khoản shop?

Tuỳ shipping đơn vị cung cấp: GHN 2-3 ngày, GHTK 2-4 ngày, Viettel Post 3-5 ngày. Phí thu hộ 0,5-1,5% giá trị đơn — tách biệt với phí ship.

Best practice: đặt tài khoản ngân hàng riêng nhận COD (không gộp với tài khoản chính của shop) để tracking thuận tiện và đối soát hằng tháng. Reconcile cuối mỗi tháng để bắt sai sót settlement sớm.

COD có cần kê khai thuế không?

Có, COD vẫn là doanh thu shop, kê khai như payment thường. Hoá đơn xuất khi giao hàng thành công (không phải khi đặt đơn).

Thuế VAT 10% áp như doanh thu thường, thuế thu nhập doanh nghiệp 20% trên lợi nhuận.

Nếu shop có ERP, sync auto invoice từ WooCommerce kèm shipping status. Đảm bảo chỉ xuất hoá đơn cho đơn “Đã thu COD” (status từ shipping đơn vị cung cấp), không xuất nhầm cho đơn fail.

Bài liên quan trong cụm WooCommerce

COD pair với shipping đơn vị cung cấp và pre-pay gateway để cover full payment flow. Tham khảo các bài cùng cụm:

Cần đội Web22 build COD turnkey kèm fraud detection và tích hợp shipping VN tự động? Tư vấn shop online WooCommerce chuyên nghiệp — báo giá rõ ràng theo phạm vi, không phát sinh sau khi ký hợp đồng.