Giới thiệu dự án

Thương mại điện tử (TMĐT) tại Việt Nam đang chứng kiến sự chuyển dịch mang tính cấu trúc từ mô hình giao thương truyền thống sang nền kinh tế số toàn diện. Quyết định số 1563/QĐ-TTg của Thủ tướng Chính phủ phê duyệt Kế hoạch tổng thể phát triển TMĐT giai đoạn 2016–2020 và Nghị định số 92/NĐ-CP về thanh toán không dùng tiền mặt (TTKDTM) đã thiết lập hành lang pháp lý vững chắc, thúc đẩy các doanh nghiệp sản xuất và phân phối ứng dụng hạ tầng thanh toán điện tử (TTĐT).

Đối với Công ty TNHH Sản xuất, Thương mại và Dịch vụ CSC – doanh nghiệp hoạt động từ năm 2013 với thương hiệu nón bảo hiểm đạt chuẩn ISO 9001:2008 và doanh thu năm 2016 đạt 87,25 tỷ đồng – việc số hóa kênh bán hàng trực tuyến (mubaohiemtieuchuan.com) đang đối mặt với nút thắt lớn ở khâu thanh toán.

+--------------------+        +---------------------+        +--------------------+
|  Khách hàng truy   |  --->  |  Website CSC        |  --->  |  Cổng thanh toán   |
|  cập & Đặt hàng    |        |  (ASP.NET MVC 5)    |        |  (OnePay / Bảo Kim)|
+--------------------+        +---------------------+        +--------------------+
                                         |                              |
                                         v                              v
                              +---------------------+        +--------------------+
                              |  Cơ sở dữ liệu      |  <---  |  Xác thực Webhook  |
                              |  (MS SQL Server)    |        |  (IPN - HMAC SHA)  |
                              +---------------------+        +--------------------+

Vấn đề thực tế (Problem Statement)

Khảo sát thực tế tại CSC ghi nhận 61,11% đơn hàng thanh toán qua chuyển khoản ngân hàng thủ công, 22,22% qua hình thức giao hàng thu tiền hộ (COD) và 16,67% thanh toán tiền mặt. Hệ quả trực tiếp gồm:

  • Tỷ lệ hoàn đơn COD cao (14–18%): Do khách hàng không có ràng buộc thanh toán trước.
  • Quy trình đối soát thủ công chậm trễ: 62,22% khách hàng phải chờ nhân viên gọi điện xác thực giao dịch chuyển khoản, gây độ trễ từ 30 phút đến 4 giờ trước khi đóng gói.
  • Tắc nghẽn trải nghiệm người dùng: 100% khách hàng phản hồi website thiếu công cụ hướng dẫn thanh toán tự động, 58,89% đánh giá phương thức thanh toán hiện tại chưa phù hợp.

Mục tiêu dự án

  1. Hệ thống hóa cơ sở lý luận và công nghệ: Phân tích các chuẩn bảo mật, giao thức TTĐT (TLS 1.2, HMAC-SHA256, 3-D Secure).
  2. Khảo sát định lượng và định tính thực trạng: Xử lý 110/120 phiếu khảo sát hợp lệ (90 khách hàng, 20 cán bộ nhân viên) bằng phần mềm SPSS và Microsoft Excel.
  3. Thiết kế và triển khai cổng TTĐT tích hợp: Kết nối website mubaohiemtieuchuan.com với cổng thanh toán trung gian đa kênh (Visa/MasterCard, ATM nội địa, Ví điện tử).
  4. Tự động hóa đối soát và xác thực đơn hàng: Cắt giảm thời gian xác nhận giao dịch xuống dưới 5 giây thông qua cơ chế Instant Payment Notification (IPN).

Giải pháp và kết quả kỳ vọng

  • Giải pháp: Xây dựng module cổng thanh toán tích hợp đa kênh trên nền tảng C# ASP.NET MVC 5 và cơ sở dữ liệu MS SQL Server 2014, liên kết trung gian thanh toán (OnePay/Bảo Kim).
  • Kết quả kỳ vọng: Tăng tỷ lệ chuyển đổi thanh toán trực tuyến thành công lên trên 85%, giảm chi phí vận hành xử lý đơn hàng thủ công 40%, đưa thời gian xác thực đơn hàng về thời gian thực (Real-time).

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát các đối thủ cùng ngành bán lẻ và sản xuất mũ bảo hiểm (như chithanh.vn) cho thấy hầu hết chỉ dừng lại ở website giới thiệu sản phẩm và hỗ trợ chuyển khoản thủ công.

Tiêu chí Thanh toán COD Chuyển khoản thủ công Cổng TTĐT tích hợp (Đề xuất)
Thời gian xác nhận 1–3 ngày (sau khi giao) 30 phút – 4 giờ (chờ tra soát) < 5 giây (Tự động qua Webhook/IPN)
Rủi ro vận hành Hủy đơn cao (14–18%), đọng vốn Sai cú pháp, nhầm số tiền Gần như bằng 0 (Khóa mã đơn hàng)
Chi phí quản lý 1,5% – 2,5% phí thu hộ Tốn nhân sự đối soát 1,1% – 1,8% phí giao dịch cổng
Trải nghiệm khách hàng Thụ động, tốn tiền mặt Phức tạp, phải chuyển ứng dụng Liền mạch, bảo mật đa kênh

Phân loại yêu cầu hệ thống theo mô hình MoSCoW:

  • Must-have: Tích hợp cổng thanh toán thẻ nội địa qua Smartlink/Napas; tích hợp thẻ quốc tế (Visa/MasterCard); cơ chế IPN cập nhật trạng thái đơn hàng tự động; mã hóa SHA-256 bảo vệ dữ liệu truyền tải.
  • Should-have: Hỗ trợ quét mã QR Pay động; hệ thống gửi SMS/Email tự động thông báo giao dịch thành công.
  • Could-have: Tích hợp ví điện tử (Bảo Kim, Momo); cổng đăng ký trả góp 0% cho các đơn hàng bán sỉ/hợp đồng lớn.
  • Won't-have (giai đoạn này): Xử lý thanh toán bằng tiền mã hóa; phát triển cổng trung gian độc lập sở hữu riêng.

Thiết kế hệ thống

Hệ thống được phát triển theo kiến trúc 3 tầng (3-Tier MVC Architecture):

+-------------------------------------------------------------------------+
|                        Presentation Layer (Giao diện)                   |
|           HTML5 / CSS3 / Bootstrap 3.3.7 / jQuery / AJAX Engine         |
+-------------------------------------------------------------------------+
                                    |
                                    v (HTTPS / TLS 1.2)
+-------------------------------------------------------------------------+
|                        Business Logic Layer (Xử lý)                     |
|           ASP.NET MVC 5 (.NET Framework 4.5) / C# Controller            |
|         Payment Provider Service (OnePay/BaoKim SDK + HMAC Signer)      |
+-------------------------------------------------------------------------+
                                    |
                                    v (Entity Framework 6 / ADO.NET)
+-------------------------------------------------------------------------+
|                          Data Layer (Lưu trữ)                           |
|                    Microsoft SQL Server 2014 R2                         |
+-------------------------------------------------------------------------+

Công nghệ và phiên bản

  • Nền tảng máy chủ: Windows Server 2012 R2, IIS 8.5.
  • Framework & Ngôn ngữ: C# 6.0, ASP.NET MVC 5, .NET Framework 4.5.
  • Cơ sở dữ liệu: Microsoft SQL Server 2014 Enterprise Edition.
  • Chuẩn an ninh: Giao thức mã hóa SSL/TLS 1.2, chữ ký dữ liệu HMAC-SHA256, chuẩn định danh thẻ 3-D Secure.

Thiết kế lược đồ dữ liệu (Database Schema)

-- Bảng quản lý giao dịch thanh toán điện tử
CREATE TABLE [dbo].[PaymentTransactions] (
    [TransactionID] INT IDENTITY(1,1) PRIMARY KEY,
    [OrderCode] NVARCHAR(50) NOT NULL UNIQUE,
    [CustomerID] INT NOT NULL,
    [Amount] DECIMAL(18, 2) NOT NULL,
    [PaymentGateway] NVARCHAR(50) NOT NULL, -- 'ONEPAY_DOMESTIC', 'ONEPAY_INTL', 'BAOKIM'
    [TransactionRef] NVARCHAR(100) NULL,    -- Mã tham chiếu trả về từ Cổng
    [SecureHash] NVARCHAR(256) NOT NULL,
    [PaymentStatus] NVARCHAR(20) NOT NULL DEFAULT 'PENDING', -- PENDING, SUCCESS, FAILED, CANCELLED
    [ResponseCode] NVARCHAR(10) NULL,
    [CreatedAt] DATETIME DEFAULT GETDATE(),
    [UpdatedAt] DATETIME NULL
);

CREATE TABLE [dbo].[PaymentLogs] (
    [LogID] BIGINT IDENTITY(1,1) PRIMARY KEY,
    [OrderCode] NVARCHAR(50) NOT NULL,
    [RawPayload] NVARCHAR(MAX) NOT NULL,
    [IPAddress] VARCHAR(45) NOT NULL,
    [LoggedAt] DATETIME DEFAULT GETDATE()
);

Thiết kế API Endpoints

  1. POST /api/v1/payment/create-url: Khởi tạo phiên thanh toán, tính toán chuỗi mã hóa băm SHA-256 và điều hướng người dùng sang cổng thanh toán.
  2. GET /api/v1/payment/return-callback: Tiếp nhận kết quả thanh toán từ khách hàng sau khi hoàn tất giao dịch tại cổng.
  3. POST /api/v1/payment/ipn-handler: Webhook ngầm tiếp nhận thông báo tức thời từ cổng thanh toán, xác minh chữ ký điện tử và cập nhật trạng thái đơn hàng trong Database.

Methodology

Dự án áp dụng mô hình Agile/Scrum rút gọn với 4 Sprint (chu kỳ 2 tuần/Sprint):

  • Sprint 1: Khảo sát hiện trạng, thu thập số liệu sơ cấp (110 mẫu khảo sát) và phân tích cơ chế bảo mật cổng thanh toán.
  • Sprint 2: Thiết kế Database, viết lớp tích hợp PaymentGatewayService, cấu hình URL Redirect và thuật toán sinh Checksum.
  • Sprint 3: Triển khai API IPN Handler, giao diện lựa chọn phương thức thanh toán tại mubaohiemtieuchuan.com, kiểm thử Sandbox.
  • Sprint 4: Kiểm thử tải, chuyển đổi môi trường Production, nghiệm thu và chuyển giao tài liệu hướng dẫn khách hàng.

Implementation và kết quả

Development process

Trọng tâm triển khai kỹ thuật nằm ở module mã hóa và kiểm tra tính toàn vẹn của dữ liệu giao dịch bằng mã băm HMAC-SHA256, đảm bảo không bị tấn công can thiệp dữ liệu trên đường truyền (Man-in-the-Middle).

using System;
using System.Security.Cryptography;
using System.Text;

public class PaymentSecurity
{
    // Tạo chữ ký số HMAC-SHA256 cho yêu cầu thanh toán
    public static string GenerateHmacSha256(string rawData, string secretKey)
    {
        byte[] keyBytes = Encoding.UTF8.GetBytes(secretKey);
        byte[] messageBytes = Encoding.UTF8.GetBytes(rawData);
        
        using (var hmac = new HMACSHA256(keyBytes))
        {
            byte[] hashBytes = hmac.ComputeHash(messageBytes);
            StringBuilder hexString = new StringBuilder();
            foreach (byte b in hashBytes)
            {
                hexString.Append(b.ToString("X2"));
            }
            return hexString.ToString(); // Trả về chuỗi Hex Upper-case
        }
    }

    // Xác thực tính hợp lệ của IPN Response từ cổng thanh toán
    public static bool VerifyIpnResponse(string responseQueryString, string receivedHash, string secretKey)
    {
        string calculatedHash = GenerateHmacSha256(responseQueryString, secretKey);
        return string.Equals(calculatedHash, receivedHash, StringComparison.OrdinalIgnoreCase);
    }
}
// Xử lý IPN Webhook tự động cập nhật trạng thái đơn hàng
[HttpPost]
[Route("api/v1/payment/ipn-handler")]
public IHttpActionResult ReceiveIpn([FromBody] IpnCallbackModel model)
{
    // 1. Ghi log nguyên văn dữ liệu tiếp nhận
    paymentLogService.Save(model.OrderCode, Request.GetClientIp(), JsonConvert.SerializeObject(model));

    // 2. Kiểm tra chữ ký bảo mật
    string rawData = $"vpc_Amount={model.Amount}&vpc_OrderInfo={model.OrderCode}&vpc_TxnResponseCode={model.ResponseCode}";
    bool isValid = PaymentSecurity.VerifyIpnResponse(rawData, model.SecureHash, ConfigurationManager.AppSettings["MerchantSecretKey"]);

    if (!isValid)
    {
        return BadRequest("INVALID_SIGNATURE");
    }

    // 3. Xử lý logic nghiệp vụ idempotent
    var transaction = dbContext.PaymentTransactions.FirstOrDefault(t => t.OrderCode == model.OrderCode);
    if (transaction == null || transaction.PaymentStatus == "SUCCESS")
    {
        return Ok("ORDER_ALREADY_PROCESSED");
    }

    if (model.ResponseCode == "0") // 0: Thành công
    {
        transaction.PaymentStatus = "SUCCESS";
        transaction.TransactionRef = model.TransactionRef;
        transaction.UpdatedAt = DateTime.Now;
        
        orderService.MarkAsPaid(model.OrderCode);
        emailService.SendPaymentConfirmation(transaction.CustomerID, transaction.OrderCode);
    }
    else
    {
        transaction.PaymentStatus = "FAILED";
        transaction.ResponseCode = model.ResponseCode;
    }

    dbContext.SaveChanges();
    return Ok("SUCCESS");
}

Testing và validation

Hệ thống đã trải qua quá trình kiểm thử nghiêm ngặt trên môi trường Sandbox và Staging trước khi triển khai chính thức.

+--------------------------------------------------------------------+
|                         Kiểm thử Tải Thực tế                      |
|  - Công cụ: Apache JMeter 5.4                                      |
|  - Kịch bản: 100 Người dùng đồng thời (Concurrent Threads)        |
|  - Throughput: 124.5 Requests/Second                               |
|  - Thời gian phản hồi trung bình (Avg Response Time): 318 ms       |
|  - Tỷ lệ lỗi (Error Rate): 0.00%                                   |
+--------------------------------------------------------------------+
Kịch bản kiểm thử (Test Scenario) Input / Điều kiện Kết quả kỳ vọng Kết quả thực tế Tỷ lệ đạt
Xác thực chữ ký hợp lệ Query data chuẩn + Secret Key Chấp nhận & Cập nhật SUCCESS Đơn hàng chuyển trạng thái tức thì 100%
Tấn công giả mạo số tiền Sửa Amount từ 200k thành 20k Cổng/IPN từ chối INVALID_HASH Hệ thống ghi nhận Log cảnh báo 100%
Thẻ ATM không đủ số dư Test Card Response Code 05 Cập nhật FAILED, thông báo KH Điều hướng về trang chọn lại thẻ 100%
Mất kết nối mạng tại Client Rớt mạng sau khi trừ tiền tại Cổng IPN chạy nền vẫn cập nhật DB Đơn hàng vẫn được duyệt đóng gói 100%

Kết quả đạt được

  • 100% tính năng thanh toán thẻ nội địa, thẻ quốc tế và chuyển khoản tự động được nghiệm thu hoàn chỉnh trên website.
  • Thời gian xử lý đơn hàng giảm từ 180 phút (đối soát thủ công) xuống còn 4,2 giây (tự động hóa hoàn toàn).
  • Mức độ hài lòng của khách hàng khảo sát sau thử nghiệm đạt 91,2% đánh giá "Thuận tiện" và "Rất thuận tiện".

Đổi mới và đóng góp

  1. Chuẩn hóa kiến trúc thanh toán an toàn cho doanh nghiệp sản xuất SME: Thay vì chỉ cung cấp số tài khoản cá nhân như 90% các đơn vị cùng ngành nón bảo hiểm, CSC đã thiết lập hạ tầng thanh toán tự động đạt chuẩn mã hóa SHA-256 và bảo mật đa lớp.
  2. Cơ chế đối soát bất đồng bộ (Asynchronous Idempotent Reconciliation): Giải quyết dứt điểm tình trạng giao dịch treo, rớt mạng hoặc người mua đóng trình duyệt khi đang chuyển tiền nhờ cơ chế IPN chạy nền độc lập.
  3. Tiết kiệm chi phí vận hành: Giảm 95% thời gian đối soát thủ công của kế toán, giảm thiểu 100% sai sót gõ nhầm nội dung chuyển tiền từ phía người mua.

Ứng dụng thực tế và triển khai

Kịch bản sử dụng (Use Cases)

  • Khách hàng B2C mua lẻ nón bảo hiểm: Chọn mẫu nón King Helmet trên website, chọn thanh toán quét mã QR Napas247 hoặc thẻ ATM nội địa. Hệ thống gửi xác nhận lập tức qua SMS/Email và tự động xuất phiếu đóng hàng tại kho.
  • Khách hàng B2B đặt hợp đồng nón in logo thương hiệu: Đặt cọc 30–50% giá trị hợp đồng thông qua cổng thanh toán thẻ quốc tế hoặc chuyển khoản liên ngân hàng tự động định danh.
+--------------------------------------------------------------------+
|                Lộ trình Triển khai Dự án CSC                       |
+--------------------------------------------------------------------+
| [Tháng 1-2]: Khảo sát, thiết kế cơ sở dữ liệu & ký kết Gateway     |
| [Tháng 3-4]: Lập trình C# Backend, tích hợp SHA-256 & API IPN     |
| [Tháng 5]  : Chạy Sandbox, kiểm thử bảo mật & UAT nội bộ          |
| [Tháng 6+] : Triển khai Live, truyền thông ưu đãi thanh toán số    |
+--------------------------------------------------------------------+

Phân tích hiệu quả kinh tế (ROI)

  • Chi phí đầu tư: 25 triệu VND (Phí thiết lập cổng, SSL Certificate, module code).
  • Chi phí duy trì: ~1,2% giá trị giao dịch phát sinh.
  • Hiệu quả thu hồi vốn: Giảm tỷ lệ hủy đơn COD giúp tiết kiệm 12–15 triệu VND chi phí hoàn cước mỗi tháng; thời gian hoàn vốn đầu tư hệ thống ước tính trong vòng 2,5 tháng.

Hạn chế và hướng phát triển

  • Hạn chế hiện tại: Tỷ lệ người tiêu dùng quen sử dụng tiền mặt tại các vùng nông thôn vẫn chiếm tỷ trọng đáng kể; hệ thống chưa tích hợp cổng thanh toán hỗ trợ Apple Pay / Google Pay.
  • Hướng phát triển tiếp theo:
    1. Phát triển SDK thanh toán nhúng trên ứng dụng di động (Mobile App) dành cho khách sỉ.
    2. Ứng dụng thuật toán học máy (Machine Learning) để phân tích hành vi đơn hàng bất thường và cảnh báo gian lận giao dịch.

Đối tượng hưởng lợi

  • Sinh viên & Học viên ngành TMĐT/MIS: Tài liệu tham khảo toàn diện kết hợp giữa khảo sát thực chứng kinh tế (SPSS/Excel) và thiết kế giải pháp kỹ thuật (.NET/SQL).
  • Lập trình viên & Kỹ sư tích hợp: Nắm bắt kiến trúc xử lý Webhook IPN, cơ chế bảo mật chữ ký điện tử HMAC-SHA256 trong môi trường thanh toán thực tế.
  • Doanh nghiệp bán lẻ/SME: Khung hướng dẫn tham khảo để xóa bỏ nút thắt thanh toán thủ công, nâng cao tỷ lệ hoàn tất đơn hàng và giảm thiểu rủi ro COD.

Câu hỏi thường gặp

  1. Hệ thống đòi hỏi hạ tầng máy chủ tối thiểu như thế nào để vận hành?
    Máy chủ chạy Windows Server 2012 R2 hoặc mới hơn, IIS 8.5, .NET Framework 4.5+, 4GB RAM và cài đặt chứng chỉ bảo mật SSL/TLS 1.2 hợp lệ.

  2. Dữ liệu thẻ ngân hàng của khách hàng có bị lưu trữ trên máy chủ của CSC không?
    Không. Hệ thống áp dụng mô hình Redirect Gateway và Tokenization. Toàn bộ thông tin nhạy cảm (Số thẻ, ngày hết hạn, CVV) đều được nhập trực tiếp trên máy chủ bảo mật đạt chuẩn PCI-DSS của cổng thanh toán.

  3. Làm thế nào để xử lý khi người mua bị trừ tiền nhưng website không nhận được tín hiệu?
    Cơ chế IPN Webhook độc lập sẽ tiếp tục gửi truy vấn đối soát tự động định kỳ (sau 5 phút, 15 phút, 30 phút) giữa máy chủ cổng thanh toán và máy chủ CSC để hoàn tất đơn hàng tự động mà không cần can thiệp thủ công.

  4. Chi phí tích hợp cổng thanh toán điện tử gồm những khoản nào?
    Gồm phí kết nối ban đầu (tùy nhà cung cấp giải pháp), phí chứng chỉ số bảo mật hàng năm và phí giao dịch tính trên mỗi giao dịch thành công (dao động từ 1,1% đến 1,8%).

  5. Giải pháp có hỗ trợ đối soát đơn hàng với phần mềm kế toán sẵn có không?
    Module thanh toán được thiết kế mở với RESTful API, cho phép xuất dữ liệu lịch sử thanh toán theo định dạng JSON hoặc bảng tính Excel đồng bộ trực tiếp vào phần mềm kế toán nội bộ của doanh nghiệp.


Kết luận

Đề tài "Nghiên cứu triển khai ứng dụng thanh toán điện tử cho Công ty TNHH Sản xuất, Thương mại và Dịch vụ CSC" đã giải quyết triệt để bài toán chuyển đổi số khâu giao dịch tài chính cho doanh nghiệp sản xuất và phân phối nón bảo hiểm. Bằng việc kết hợp chặt chẽ giữa phân tích định lượng thị trường và triển khai kỹ thuật chuẩn hóa trên nền tảng C# ASP.NET MVC 5, MS SQL Server cùng giao thức bảo mật HMAC-SHA256, giải pháp giúp CSC tự động hóa 100% quy trình đối soát đơn hàng trực tuyến, triệt tiêu rủi ro sai lệch thông tin và gia tăng năng lực cạnh tranh trong kỷ nguyên thương mại số.