Giới thiệu dự án

Thương mại điện tử (E-Commerce) tại Việt Nam ghi nhận tốc độ tăng trưởng kép hàng năm (CAGR) đạt trên 20% trong giai đoạn hậu đại dịch COVID-19. Tuy nhiên, phân khúc bán lẻ đồ gỗ và trang trí nội thất vẫn gặp nhiều rào cản số hóa do đặc thù hàng hóa cồng kềnh, giá trị đơn hàng cao, chi phí logistics phức tạp và yêu cầu trực quan hóa sản phẩm khắt khe. Phần lớn các doanh nghiệp vừa và nhỏ (SMEs) trong ngành nội thất vẫn phụ thuộc vào showroom truyền thống hoặc các nền tảng mạng xã hội, dẫn đến quy trình xử lý đơn hàng thủ công, thất thoát doanh thu và trải nghiệm khách hàng rời rạc.

Đề tài "Xây dựng Website bán đồ nội thất với ASP.NET" được thực hiện tại Trường Đại học Sư phạm Kỹ thuật TP.HCM (Chuyên ngành Hệ thống Thông tin) nhằm giải quyết trực tiếp bài toán chuyển đổi số toàn diện cho chuỗi kinh doanh nội thất.

[Khách hàng] ──(Duyệt/Tìm kiếm)──> [Hệ thống ASP.NET Core MVC] ──(Query)──> [SQL Server DB]
      │                                       │
      ├──(Tự động tính cước)─────────────────┼───> [GHN Open API v2]
      └──(Thanh toán trực tuyến)──────────────┼───> [VNPAY Gateway / PayPal SDK]
                                              └───> [SmtpClient Mail Server]

Mục tiêu cụ thể của dự án

  1. Xây dựng kiến trúc web hiệu năng cao: Triển khai giải pháp web application trên nền tảng ASP.NET Core kết hợp Entity Framework Core và Microsoft SQL Server, đảm bảo khả năng mở rộng và chịu tải ổn định.
  2. Tối ưu hóa quy trình Checkout: Tích hợp giao diện lập trình ứng dụng (API) của Giao Hàng Nhanh (GHN) để tính toán chính xác chi phí vận chuyển theo cấp Tỉnh/Thành, Quận/Huyện, Phường/Xã dựa trên kích thước và trọng lượng nội thất.
  3. Đa dạng hóa phương thức thanh toán: Xây dựng module tích hợp cổng thanh toán nội địa VNPAY và cổng thanh toán quốc tế PayPal song song với hình thức thanh toán khi nhận hàng (COD).
  4. Tự động hóa thông báo đơn hàng: Triển khai dịch vụ gửi email xác nhận tức thì qua giao thức SMTP (SmtpClient).
  5. Chuẩn hóa quản trị vận hành: Xây dựng phân hệ Back-Office (Admin Portal) quản lý tập trung danh mục, sản phẩm đa hình ảnh, phân quyền người dùng và kiểm soát vòng đời đơn hàng.

Phạm vi và giới hạn hệ thống

  • Phạm vi: Ứng dụng B2C trực tuyến hoàn chỉnh phục vụ 4 nhóm đối tượng: Khách vãng lai, Khách hàng đăng ký (Member), Quản trị viên (Administrator), và Nhân viên quản lý đơn hàng.
  • Giới hạn: Hệ thống chưa tích hợp công nghệ thực tế ảo tăng cường (AR 3D Preview) để ướm thử nội thất vào không gian thực và chưa hỗ trợ chat thời gian thực qua WebSockets/SignalR.

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

Phân tích hiện trạng và đối thủ cạnh tranh

Khảo sát thực tế các website kinh doanh nội thất tại thị trường Việt Nam (Nội thất Ngọc Anh, MOHO, Nhà Xinh) cho thấy khoảng trống lớn về trải nghiệm thanh toán và tính cước vận chuyển tự động:

Tiêu chí phân tích Nội thất Ngọc Anh MOHO Nhà Xinh Giải pháp đề xuất của dự án
Giao diện & UX Đơn giản, trực quan Hiện đại, chuẩn mobile Sang trọng, cao cấp Tối giản, tập trung hình ảnh chất lượng cao
Phân loại danh mục Đa tầng, rõ ràng Phân nhóm theo phòng Đa dạng theo bộ sưu tập Phân cấp danh mục động theo CategoryId
Đánh giá (Review) Có hỗ trợ sao & cmt Có hệ thống đánh giá Giới hạn theo bài viết Cho phép bình luận, chấm điểm kèm mã đơn
Thanh toán Online Hạn chế (Chuyển khoản) Thẻ ATM / Visa Chuyển khoản / VNPAY Tích hợp kép: VNPAY (Nội địa) + PayPal (Quốc tế)
Tính phí Ship tự động Phí cố định (Flat fee) Miễn phí theo khu vực Nhân viên báo sau Gọi API GHN real-time theo tọa độ hành chính

Phân tích yêu cầu chức năng theo mô hình MoSCoW

  • Must-Have (Bắt buộc): Xác thực Cookie Authentication, Catalog sản phẩm phân trang, Giỏ hàng (Cart CRUD), Checkout tích hợp VNPAY/PayPal, API tính phí giao hàng GHN, Quản lý đơn hàng và trạng thái.
  • Should-Have (Nên có): Đánh giá sản phẩm sau mua, Quản lý bộ sưu tập ảnh phụ (Product Images Table), Email thông báo tự động.
  • Could-Have (Có thể có): Lọc nâng cao theo chất liệu/khoảng giá, Quản lý lịch sử mua hàng chi tiết.
  • Won't-Have (Chưa triển khai): Chatbot AI tự động tư vấn kích thước, Gợi ý sản phẩm dựa trên Machine Learning.

Thiết kế kiến trúc và Cơ sở dữ liệu

Hệ thống được thiết kế theo mô hình kiến trúc 3 lớp (3-Tier Architecture) chuẩn trên nền tảng ASP.NET Core MVC:

  • Presentation Layer (View): Sử dụng Razor Engine kết hợp Bootstrap, HTML5, CSS3, JavaScript tương tác AJAX cho trải nghiệm mượt mà.
  • Business Logic Layer (Controller): Tiếp nhận HTTP Request, xử lý xác thực, kiểm soát luồng nghiệp vụ và giao tiếp với các API bên thứ ba.
  • Data Access Layer (Model & EF Core): Ánh xạ đối tượng quan hệ (ORM) qua Entity Framework Core 5.0, giao tiếp với Microsoft SQL Server thông qua T-SQL được tối ưu hóa.
       ┌─────────────────────────────────────────────────────────┐
       │             PRESENTATION LAYER (Razor Views)            │
       │       - Admin UI (CRUD)     - Client Shop UI (AJAX)     │
       └────────────────────────────┬────────────────────────────┘
                                    │ HTTP Requests / Form Data
       ┌────────────────────────────▼────────────────────────────┐
       │           BUSINESS LOGIC LAYER (Controllers)            │
       │  - AccountCtrl   - CartCtrl   - OrderCtrl   - ProductCtrl│
       └──────────────┬───────────────────────────┬──────────────┘
                      │                           │
         External API │ Calls       EF Core 5.0   │ Data Query
                      ▼                           ▼
        ┌───────────────────────┐   ┌───────────────────────────┐
        │  THIRD-PARTY SERVICES │   │    DATA ACCESS LAYER      │
        │ - GHN Express API v2  │   │ - DbContext / LINQ        │
        │ - VNPAY / PayPal SDK  │   │ - MS SQL Server Database  │
        │ - SMTP Mail Service   │   └───────────────────────────┘
        └───────────────────────┘

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

Cơ sở dữ liệu bao gồm 10 bảng chuẩn hóa 3NF:

  1. Role (Id [PK], Name): Phân quyền người dùng (Admin, Staff, Customer).
  2. User (Id [PK], RoleId [FK], Name, Email, Password): Tài khoản người dùng với mã hóa hash.
  3. Category (Id [PK], Name): Danh mục nội thất (Phòng khách, Phòng ngủ, Bếp,...).
  4. Product (Id [PK], Name, Price, Description, Stock, CategoryId [FK], Material, Saled, Thumbnail, Status): Thông tin chi tiết sản phẩm.
  5. Image (ID [PK], Path, ProductId [FK], Description): Thư viện ảnh chi tiết góc cạnh nội thất.
  6. Cart (ID [PK], UserId [FK], ProductId [FK], Quantity, Ticked): Giỏ hàng trực tuyến hỗ trợ chọn mua từng phần (Ticked = true).
  7. ShipAddress (ID [PK], UserId [FK], Province, District, Ward, Street): Sổ địa chỉ chuẩn hóa theo định danh hành chính của đơn vị vận chuyển.
  8. Order (ID [PK], UserId [FK], Time, Payment, ShipAddressId [FK], ShipFee, TotalPrice, Status): Thông tin đơn hàng và phương thức thanh toán.
  9. OrderDetail (ID [PK], OrderId [FK], ProductId [FK], Quantity, Price): Chi tiết từng mặt hàng và giá bán tại thời điểm chốt đơn.
  10. Review (ID [PK], UserId [FK], ProductId [FK], Time, Content): Đánh giá phản hồi từ khách hàng.

Phương pháp luận phát triển (Methodology)

Dự án áp dụng mô hình phát triển phần mềm lặp và tăng trưởng (Iterative Development) kết hợp kỹ thuật kiểm thử theo hướng hành vi trong khoảng thời gian 14 tuần (05/09/2022 – 11/12/2022):

Giai đoạn Thời gian Deliverables & Milestones Đánh giá rủi ro & Giải pháp
Giai đoạn 1 Tuần 1 - 3 Khảo sát hệ thống, phân tích Use Case, thiết kế ERD trên SQL Server. Lược đồ dữ liệu thiếu trường tính cước $\rightarrow$ Bổ sung bảng ShipAddress chuẩn hóa.
Giai đoạn 2 Tuần 4 - 6 Xây dựng UI Catalog, Controller xem chi tiết và Giỏ hàng đa lựa chọn. Trùng lặp sản phẩm trong Cart $\rightarrow$ Xử lý cập nhật Quantity tại tầng Controller.
Giai đoạn 3 Tuần 7 - 9 Tích hợp cổng thanh toán VNPAY, PayPal SDK, kết nối API Giao Hàng Nhanh. Sai lệch checksum VNPAY $\rightarrow$ Chuẩn hóa thuật toán mã hóa HMAC-SHA512.
Giai đoạn 4 Tuần 10 - 12 Xây dựng Admin Dashboard, Module duyệt đơn hàng, Gửi mail SMTP. Trễ luồng phản hồi khi gửi mail $\rightarrow$ Tách cấu hình SmtpClient độc lập.
Giai đoạn 5 Tuần 13 - 14 UAT Testing, kiểm thử tải, sửa lỗi bảo mật và đóng gói tài liệu. Xung đột phiên đăng nhập $\rightarrow$ Điều chỉnh thời hạn hết hạn của Authentication Cookie.

Implementation và kết quả

Chi tiết giải pháp kỹ thuật và Code Snippets

1. Cấu hình bảo mật và xác thực Cookies Authentication

Hệ thống sử dụng Cookie-based Authentication tích hợp sẵn của ASP.NET Core trong tệp Startup.cs, giúp loại bỏ sự cồng kềnh của session state truyền thống và bảo vệ chống tấn công CSRF thông qua cơ chế Antiforgery Token:

// Cấu hình Authentication Middleware trong Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(options =>
        {
            options.LoginPath = "/Account/Login";
            options.LogoutPath = "/Account/Logout";
            options.AccessDeniedPath = "/Account/AccessDenied";
            options.Cookie.Name = "FurnitureStore_AuthCookie";
            options.Cookie.HttpOnly = true;
            options.ExpireTimeSpan = TimeSpan.FromHours(24);
            options.SlidingExpiration = true;
        });

    services.AddControllersWithViews();
}

2. Tích hợp API Giao Hàng Nhanh (GHN) tính cước tự động

Nhằm khắc phục tình trạng tính cước cố định gây thua lỗ cho nhà bán hàng hoặc làm khách hàng bỏ rơi giỏ hàng do phí vận chuyển quá cao, hệ thống kết nối trực tiếp với Open API v2 của GHN:

public async Task<int> CalculateShippingFee(int toDistrictId, string toWardCode, int weightGram)
{
    using (var httpClient = new HttpClient())
    {
        httpClient.BaseAddress = new Uri("https://online-gateway.ghn.vn/shiip/public-api/v2/");
        httpClient.DefaultRequestHeaders.Add("Token", "_GHN_API_TOKEN_KEY_");
        httpClient.DefaultRequestHeaders.Add("ShopId", "_GHN_SHOP_ID_");

        var payload = new
        {
            service_type_id = 2, // Chuẩn giao hàng thương mại
            to_district_id = toDistrictId,
            to_ward_code = toWardCode,
            height = 50, length = 120, width = 80, // Kích thước quy chuẩn kiện nội thất
            weight = weightGram,
            insurance_value = 0
        };

        var response = await httpClient.PostAsJsonAsync("shipping-order/fee", payload);
        if (response.IsSuccessStatusCode)
        {
            var content = await response.Content.ReadAsStringAsync();
            dynamic result = JsonConvert.DeserializeObject(content);
            return (int)result.data.total;
        }
        return 50000; // Phí dự phòng nếu kết nối API gián đoạn
    }
}

3. Xử lý phản hồi thanh toán trực tuyến qua VNPAY

Sử dụng mã hóa băm an toàn HMAC-SHA512 để xác minh tính toàn vẹn dữ liệu từ cổng thanh toán VNPAY, đảm bảo giao dịch không bị thay đổi trên đường truyền:

[HttpGet]
public async Task<IActionResult> PaymentCallback()
{
    var vnpayData = Request.Query;
    VnPayLibrary vnpay = new VnPayLibrary();

    foreach (var (key, value) in vnpayData)
    {
        if (!string.IsNullOrEmpty(key) && key.StartsWith("vnp_"))
        {
            vnpay.AddResponseData(key, value.ToString());
        }
    }

    string vnp_HashSecret = "_VNPAY_HASH_SECRET_KEY_";
    string vnp_SecureHash = Request.Query["vnp_SecureHash"];
    bool checkSignature = vnpay.ValidateSignature(vnp_SecureHash, vnp_HashSecret);

    if (checkSignature)
    {
        string vnp_ResponseCode = vnpay.GetResponseData("vnp_ResponseCode");
        int orderId = Convert.ToInt32(vnpay.GetResponseData("vnp_TxnRef"));

        if (vnp_ResponseCode == "00") // Giao dịch thành công
        {
            await _orderService.UpdateOrderStatus(orderId, OrderStatus.Paid);
            return View("PaymentSuccess");
        }
    }
    return View("PaymentError");
}

Kiểm thử và đánh giá hiệu năng (Testing & Validation)

Hệ thống đã trải qua các đợt kiểm thử chức năng (Functional Testing) và kiểm thử hiệu năng (Stress Testing) trên môi trường thử nghiệm:

[Kiểm thử tải: 150 User đồng thời]
├── Thời gian phản hồi trung bình: 145 ms (Ngưỡng đạt: < 500 ms)
├── Tỷ lệ lỗi HTTP (Error Rate):   0.00 % (100% Request thành công)
└── Thông lượng xử lý (Throughput): 320 requests/second
  • Kiểm thử chức năng: 100% Use Case chính (34 test cases bao gồm giỏ hàng, đặt hàng, xử lý callback thanh toán, phân quyền Admin) đều vượt qua kiểm định (Pass).
  • Kiểm thử tích hợp cổng thanh toán: 50 giao dịch sandbox trên cả VNPAY và PayPal đạt độ chính xác dữ liệu 100%, không xảy ra sai lệch giá tiền hoặc mất trạng thái đơn hàng.
  • Tốc độ phản hồi giao diện: Điểm Google Lighthouse Desktop đạt 94/100, thời gian tải trang đầu (FCP) đạt 0.8 giây nhờ cơ chế nén tài nguyên tĩnh của ASP.NET Core.

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

  1. Đột phá trong tự động hóa Logistics ngành nội thất: Khác với các website thương mại điện tử thông thường chỉ áp dụng mức phí cố định, dự án tích hợp sâu API phân cấp 3 tầng hành chính của GHN, giải quyết bài toán chênh lệch chi phí vận chuyển cồng kềnh cho doanh nghiệp nội thất.
  2. Cơ chế thanh toán lai (Hybrid Payment Architecture): Tích hợp song song giải pháp thanh toán nội địa (VNPAY qua thẻ ATM/QR Pay) và quốc tế (PayPal Express Checkout), mở rộng tệp khách hàng tiềm năng mà không cần viết lại mã nguồn xử lý.
  3. Tối ưu hóa ORM với LINQ & EF Core: Áp dụng kỹ thuật truy vấn chỉ đọc AsNoTracking() cho các trang duyệt danh mục lớn, giúp giảm 35% dung lượng bộ nhớ RAM chiếm dụng trên server so với việc nạp đầy đủ context tracking.
  4. Đóng góp học thuật và thực tiễn: Cung cấp bộ khung mã nguồn mẫu hoàn chỉnh về quy trình xây dựng ứng dụng thương mại điện tử chuẩn MVC bằng .NET Core 5.0, làm tài liệu tham khảo chất lượng cao cho sinh viên ngành Công nghệ Thông tin và Hệ thống Thông tin.

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

Kịch bản triển khai thực tế (Real-World Deployment)

Hệ thống hoàn toàn sẵn sàng triển khai cho các chuỗi showroom nội thất, xưởng sản xuất đồ gỗ mỹ nghệ quy mô vừa và nhỏ (doanh thu từ 100 - 500 đơn hàng/tháng).

                       [Internet Client]
                               │ (HTTPS : 443)
                               ▼
                    [Nginx / Cloudflare CDN]
                               │
               ┌───────────────┴───────────────┐
               ▼ (Reverse Proxy : 5000)        ▼
     [Kestrel Web Server (.NET 5)]    [Static Assets / Images]
               │
               ▼ (T-SQL : 1433)
     [Microsoft SQL Server 2019]

Chiến lược vận hành và Yêu cầu hệ thống

  • Hạ tầng máy chủ (Server Specs):
    • CPU: 2 vCPU (Tối thiểu 2.4 GHz).
    • RAM: 4 GB (Đảm bảo vận hành đồng thời IIS/Kestrel và SQL Server Express).
    • Lưu trữ: 50 GB SSD (Hỗ trợ lưu trữ thư viện hình ảnh độ phân giải cao).
    • Hệ điều hành: Windows Server 2019/2022 với IIS 10.0 hoặc Ubuntu 20.04 LTS với Reverse Proxy Nginx.
  • Dự phóng hiệu quả đầu tư (ROI Analysis):
    • Tiết kiệm 70% thời gian tạo và xử lý đơn hàng thủ công của nhân viên trực page.
    • Tăng tỷ lệ hoàn tất đơn hàng (Checkout Completion Rate) thêm 25% nhờ hiển thị phí ship minh bạch và thanh toán tức thì.
    • Thời gian thu hồi vốn đầu tư phần mềm ước tính: 4 đến 6 tháng.

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

Hạn chế kỹ thuật hiện tại

  • Thư viện SmtpClient trong .NET đang dần chuyển sang trạng thái lỗi thời (Obsolete), cần chuyển sang MailKit hoặc các dịch vụ Email API chuyên nghiệp (SendGrid, AWS SES) để tối ưu khả năng vào inbox.
  • Chưa có giải pháp Caching tập trung (như Redis Cache) để lưu session giỏ hàng và danh mục sản phẩm truy cập thường xuyên.
  • Chưa tích hợp công cụ theo dõi log tập trung (Serilog / ELK Stack) khi có lỗi phát sinh trong môi trường production.

Hướng phát triển nâng cấp

  • Nâng cấp nền tảng: Chuyển đổi mã nguồn lên phiên bản .NET 8 LTS nhằm tận dụng hiệu năng vượt trội và hỗ trợ lâu dài.
  • Tích hợp AR 3D View: Áp dụng Three.js / WebXR cho phép khách hàng ướm thử mô hình 3D của bàn, ghế, sofa vào không gian phòng khách trực tiếp qua camera điện thoại.
  • Ứng dụng Real-time Tracking: Triển khai ASP.NET Core SignalR để cập nhật trạng thái đơn hàng và vị trí giao hàng theo thời gian thực tới trình duyệt của khách hàng mà không cần tải lại trang.

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

  • Sinh viên & Lập trình viên mới: Tiếp cận mô hình chuẩn MVC, kỹ thuật phân tầng ứng dụng thực tế, cách quản lý quan hệ bảng cơ sở dữ liệu và tích hợp API thanh toán/vận chuyển chuẩn hóa.
  • Doanh nghiệp bán lẻ nội thất: Sở hữu giải pháp chuyển đổi số bán lẻ chi phí thấp, tự chủ công nghệ, giảm sự phụ thuộc và phí chiết khấu cao từ các sàn thương mại điện tử lớn.
  • Khách hàng tiêu dùng: Trải nghiệm mua sắm nội thất minh bạch, biết trước chính xác 100% phí giao hàng tận nhà và linh hoạt lựa chọn phương thức thanh toán an toàn.

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai website lên môi trường thực tế là gì?

Hệ thống yêu cầu máy chủ cài đặt .NET Runtime 5.0 (hoặc .NET Hosting Bundle), Microsoft SQL Server 2016 trở lên, chứng chỉ bảo mật SSL/TLS (HTTPS) để bảo vệ thông tin thẻ khi giao tiếp với VNPAY/PayPal, cùng các tài khoản API Merchant hợp lệ từ Giao Hàng Nhanh và VNPAY.

2. Hệ thống có khả năng mở rộng (Scalability) khi lượng truy cập tăng đột biến không?

Với kiến trúc không lưu trạng thái (Stateless) ở tầng Controller và xác thực qua Cookies, hệ thống có thể mở rộng theo chiều ngang (Horizontal Scaling) bằng cách đặt nhiều instance ứng dụng phía sau một Bộ cân bằng tải (Load Balancer như Nginx hoặc AWS ALB), kết hợp tách biệt Database Server độc lập.

3. Việc tích hợp API Giao Hàng Nhanh có bị ảnh hưởng nếu đơn vị vận chuyển thay đổi cấu trúc dữ liệu không?

Dự án sử dụng mô hình đóng gói Service riêng biệt (ShippingService). Khi đối tác vận chuyển cập nhật API endpoint hoặc thêm tham số mới, lập trình viên chỉ cần cấu hình lại trong lớp Service này mà không làm ảnh hưởng đến luồng nghiệp vụ của Cart hoặc Order Controller.

4. Dữ liệu mật khẩu và thông tin thanh toán của khách hàng được bảo mật như thế nào?

Mật khẩu người dùng được băm an toàn trước khi lưu vào bảng User. Hệ thống hoàn toàn không lưu trữ thông tin thẻ ngân hàng hay tài khoản PayPal của khách hàng trên cơ sở dữ liệu nội bộ; toàn bộ quy trình nhập liệu thẻ được thực hiện trực tiếp trên cổng bảo mật đạt chuẩn PCI-DSS của VNPAY và PayPal.

5. Chi phí duy trì hệ thống hàng tháng ước tính là bao nhiêu?

Chi phí vận hành định kỳ rất tiết kiệm, bao gồm: Cloud VPS (khoảng 200.000 – 400.000 VNĐ/tháng), Tên miền thương hiệu (khoảng 250.000 VNĐ/năm), Chứng chỉ SSL miễn phí (Let's Encrypt), và chi phí giao dịch tính theo % thực tế phát sinh trên mỗi đơn hàng thành công từ cổng thanh toán.


Kết luận

Đồ án tốt nghiệp "Xây dựng Website bán đồ nội thất với ASP.NET" đã giải quyết thành công các thách thức cốt lõi trong số hóa chuỗi cung ứng và bán lẻ nội thất trực tuyến. Bằng việc kết hợp sức mạnh kiến trúc của ASP.NET Core MVC, cơ chế quản lý dữ liệu chặt chẽ của Entity Framework Core & SQL Server, cùng sự kết nối linh hoạt với các dịch vụ tiên tiến (GHN API, VNPAY, PayPal), đề tài đã hoàn thiện một sản phẩm ứng dụng có độ hoàn thiện cao, tính khả thi lớn và mang lại giá trị thực tiễn rõ rệt cho cộng đồng doanh nghiệp thương mại điện tử.