Giới thiệu dự án

Thương mại điện tử (E-Commerce) tại Việt Nam đang duy trì tốc độ tăng trưởng ấn tượng từ 20% đến 25% mỗi năm, trở thành kênh phân phối sống còn đối với ngành bán lẻ công nghệ và thiết bị di động. Tuy nhiên, các doanh nghiệp vừa và nhỏ (SMB) cũng như các hộ kinh doanh cá thể thường gặp rào cản lớn khi triển khai hệ thống bán hàng trực tuyến: chi phí bản quyền phần mềm SaaS đắt đỏ, sự phụ thuộc vào nền tảng bên thứ ba và giao diện chưa tối ưu trải nghiệm người dùng trên thiết bị di động.

Đề tài "Xây dựng Website bán điện thoại Mobile Shop PHP" do sinh viên Nguyễn Thành Trung (Khoa Kỹ thuật - Công nghệ, Trường Đại học Thủ Dầu Một) thực hiện dưới sự hướng dẫn của Th.S Nguyễn Hữu Vĩnh nhằm giải quyết trực tiếp bài toán số hóa quy trình kinh doanh thiết bị di động với chi phí tối ưu, hiệu năng cao và khả năng làm chủ công nghệ hoàn toàn.

                  +-------------------------------------------------------+
                  |            HỆ THỐNG E-COMMERCE MOBILE SHOP            |
                  +-------------------------------------------------------+
                                              |
                   +--------------------------+--------------------------+
                   |                                                     |
                   v                                                     v
+-------------------------------------+               +-------------------------------------+
|        KHÁCH HÀNG (USER/GUEST)      |               |          QUẢN TRỊ VIÊN (ADMIN)      |
+-------------------------------------+               +-------------------------------------+
| - Đăng ký/Đăng nhập (Local/OAuth)   |               | - Quản lý danh mục & kho hàng       |
| - Tìm kiếm & Lọc điện thoại         |               | - Quản lý cấu hình thuộc tính động  |
| - Giỏ hàng Ajax & Real-time Sync    |               | - Xử lý đơn hàng & Xuất hóa đơn     |
| - Thanh toán COD / Ngân Lượng API   |               | - Thống kê doanh thu & báo cáo      |
| - Đánh giá & Bình luận độc quyền    |               | - Quản lý dịch vụ & nhà sản xuất    |
+-------------------------------------+               +-------------------------------------+

Mục tiêu dự án

  1. Xây dựng kiến trúc web thương mại điện tử chuyên biệt: Thiết kế hệ thống bán lẻ điện thoại tối ưu theo mô hình MVC (Model - View - Controller), đảm bảo khả năng tải trang nhanh và vận hành ổn định.
  2. Tối ưu hóa trải nghiệm người dùng (UX/UI): Tích hợp kỹ thuật Ajax cho phép thao tác giỏ hàng mini (Mini-cart) tức thì, không cần tải lại toàn bộ trang (Zero-refresh).
  3. Đa dạng hóa phương thức xác thực và thanh toán: Tích hợp xác thực xã hội (Facebook, Google OAuth) và cổng thanh toán trực tuyến Ngân Lượng (nganluong.vn) song song với hình thức thanh toán khi nhận hàng (COD).
  4. Chuẩn hóa quy trình quản trị bán hàng: Cung cấp dashboard quản lý kho, kiểm soát quan hệ dữ liệu khi xóa sản phẩm (Soft/Safe Delete), xuất hóa đơn bán hàng và giám sát doanh thu chuẩn xác.
  5. Đảm bảo tính toàn vẹn và bảo mật dữ liệu: Xử lý chống trùng lặp đánh giá (mỗi người dùng chỉ đánh giá 1 lần/sản phẩm), bảo vệ giao dịch thanh toán trực tuyến và kiểm soát tải dữ liệu.

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

  • Phạm vi ứng dụng: Áp dụng trực tiếp cho các cửa hàng kinh doanh điện thoại di động, phụ kiện công nghệ quy mô đơn điểm hoặc chuỗi cửa hàng bán lẻ vừa và nhỏ.
  • Giới hạn kỹ thuật: Hệ thống tập trung vào mô hình B2C đơn kênh (Single-vendor). Các tính năng nâng cao như định tuyến giao hàng tự động đa nhà xe (Logistics API) và ứng dụng di động Native (iOS/Android) được định vị là pha phát triển mở rộng kế tiếp.

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

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

Thị trường giải pháp thương mại điện tử hiện nay chia thành nhiều phân khúc với các ưu và nhược điểm rõ rệt:

Tiêu chí so sánh Nền tảng SaaS đóng gói (Shopify, Haravan) Nguồn mở dựng sẵn (WooCommerce, OpenCart) Hệ thống Mobile Shop (PHP/Laravel MVC)
Chi phí ban đầu Thấp (thuê bao tháng) Thấp - Trung bình (hosting + plugin) Tối ưu (không phí bản quyền)
Chi phí duy trì Tăng theo quy mô và tính năng Chi phí gia hạn plugin bản quyền Cố định theo hạ tầng máy chủ
Khả năng tùy biến Bị giới hạn bởi API nền tảng Phụ thuộc vào kiến trúc plugin Tùy biến 100% theo nghiệp vụ
Tốc độ tải trang Trung bình (nhiều script bên thứ ba) Chậm dần khi cài nhiều plugin Nhanh (< 1.2s) nhờ tinh gọn mã nguồn
Bảo mật mã nguồn Do nhà cung cấp quản lý Dễ bị quét lỗ hổng plugin phổ biến Kiểm soát chặt chẽ qua Laravel Core

Ma trận phân loại yêu cầu người dùng (MoSCoW)

  • Must-have (Bắt buộc có): Đăng ký/đăng nhập (xác thực email & OAuth), danh mục sản phẩm lọc theo nhà sản xuất (Apple, Samsung, Xiaomi,...), giỏ hàng Ajax, đặt hàng COD và thanh toán Ngân Lượng, quản lý kho và đơn hàng cho Admin.
  • Should-have (Nên có): Đánh giá sao và bình luận sản phẩm chống spam (ghi đè bản ghi cũ), giỏ hàng nổi cố định góc màn hình (Floating mini-cart), tích hợp Facebook Messenger Live Chat hỗ trợ khách hàng tức thì.
  • Could-have (Có thể có): Quản lý chương trình khuyến mãi theo mức giá động, xuất hóa đơn ra file in ấn.
  • Won't-have (Chưa triển khai trong phiên bản này): Thanh toán tiền điện tử/ví quốc tế (Stripe, PayPal), tự động phân bổ kho hàng đa chi nhánh.

Thiết kế hệ thống

Hệ thống được thiết kế theo mô hình 3 tầng (3-Tier Architecture) chuẩn MVC, phân tách rạch ròi giữa tầng biểu diễn, tầng xử lý logic nghiệp vụ và tầng lưu trữ dữ liệu.

graph TD
    Client[Client Browser: HTML5 / CSS3 / jQuery] -->|HTTP/HTTPS Request & Ajax| Route[Laravel Router & Middleware Engine]
    Route --> Controller[Application Controllers]
    Controller -->|Authentication / Session| AuthSession[Session & Auth Guard]
    Controller -->|Business Logic| Model[Eloquent ORM / Models]
    Model -->|PDO Queries| Database[(MySQL Database)]
    Controller -->|Payment Redirect & IPN| Gateway[NganLuong.vn Payment Gateway]
    Controller -->|OAuth 2.0 Auth| OAuth[Google / Facebook API]
    Controller -->|Render View| Blade[Blade Template Engine]
    Blade -->|Response Data| Client

Ngăn xếp công nghệ (Technology Stack)

  • Backend: PHP 7.4 (khai thác bộ nhân Zend Engine / PHPNG tăng gấp đôi tốc độ xử lý), Framework Laravel.
  • Database: MySQL 8.0 / 5.7 với chuẩn lưu trữ InnoDB hỗ trợ khóa ngoại (Foreign Keys) và Transaction ACID.
  • Frontend: HTML5, CSS3, JavaScript ES6, Thư viện jQuery 3.5.1, Bootstrap Grid System.
  • Môi trường phát triển: XAMPP (Apache 2.4, MariaDB/MySQL, PHP 7.4, phpMyAdmin).
  • Cổng thanh toán & Tích hợp: Ngân Lượng API v3.1, Facebook Messenger Customer Chat Plugin, Google Identity Services.

Thiết kế cơ sở dữ liệu quan hệ (Database Schema)

Hệ thống triển khai 7 thực thể bảng chuẩn hóa (3NF) nhằm loại bỏ dư thừa dữ liệu và duy trì tính toàn vẹn quan hệ:

-- 1. Bảng người dùng hệ thống
CREATE TABLE `users` (
  `email` VARCHAR(191) NOT NULL,
  `Hoten` VARCHAR(255) NOT NULL,
  `Matkhau` VARCHAR(255) NOT NULL,
  `Dienthoai` VARCHAR(20) NOT NULL,
  `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 2. Bảng nhà sản xuất (Hãng điện thoại)
CREATE TABLE `nha_san_xuat` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT NOT NULL,
  `Ten` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 3. Bảng thông tin sản phẩm
CREATE TABLE `San_pham` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT NOT NULL,
  `Ten` VARCHAR(255) NOT NULL,
  `Gia` DOUBLE(12, 2) NOT NULL,
  `Hinh_anh` VARCHAR(255) NOT NULL,
  `Manhasx` BIGINT UNSIGNED NOT NULL,
  `Mota` TEXT NULL,
  `Date` DATETIME DEFAULT CURRENT_TIMESTAMP,
  `Khuyenmai` TEXT NULL,
  `Giakhuyenmai` DOUBLE(12, 2) DEFAULT 0.00,
  `is_deleted` TINYINT(1) DEFAULT 0,
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_sanpham_nhasx` FOREIGN KEY (`Manhasx`) REFERENCES `nha_san_xuat` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 4. Bảng dịch vụ vận chuyển
CREATE TABLE `dichvu` (
  `madv` BIGINT UNSIGNED AUTO_INCREMENT NOT NULL,
  `tendv` VARCHAR(255) NOT NULL,
  `Gia` DOUBLE(10, 2) NOT NULL,
  PRIMARY KEY (`madv`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 5. Bảng hóa đơn bán lẻ
CREATE TABLE `hoadon` (
  `sodh` BIGINT UNSIGNED AUTO_INCREMENT NOT NULL,
  `emailkh` VARCHAR(191) NOT NULL,
  `ngaygiao` DATE NOT NULL,
  `tenkh` VARCHAR(255) NOT NULL,
  `diachi` VARCHAR(255) NOT NULL,
  `dienthoai` VARCHAR(20) NOT NULL,
  `hinhthucthanhtoan` VARCHAR(50) NOT NULL,
  `thanhtien` DOUBLE(14, 2) NOT NULL,
  `trangthai` VARCHAR(50) DEFAULT 'Pending',
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`sodh`),
  CONSTRAINT `fk_hoadon_user` FOREIGN KEY (`emailkh`) REFERENCES `users` (`email`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 6. Bảng chi tiết hóa đơn (Liên kết M-N)
CREATE TABLE `chi_tiet_hoa_don` (
  `id_chi_tiet_hoadon` BIGINT UNSIGNED AUTO_INCREMENT NOT NULL,
  `sodh` BIGINT UNSIGNED NOT NULL,
  `Masp` BIGINT UNSIGNED NOT NULL,
  `soluong` INT NOT NULL,
  `dongia` DOUBLE(12, 2) NOT NULL,
  `thanhtien` DECIMAL(14, 2) NOT NULL,
  `madv` BIGINT UNSIGNED NOT NULL,
  PRIMARY KEY (`id_chi_tiet_hoadon`),
  CONSTRAINT `fk_cthd_hoadon` FOREIGN KEY (`sodh`) REFERENCES `hoadon` (`sodh`) ON DELETE CASCADE,
  CONSTRAINT `fk_cthd_sanpham` FOREIGN KEY (`Masp`) REFERENCES `San_pham` (`id`) ON DELETE RESTRICT,
  CONSTRAINT `fk_cthd_dichvu` FOREIGN KEY (`madv`) REFERENCES `dichvu` (`madv`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 7. Bảng quản trị viên
CREATE TABLE `admin` (
  `tendangnhap` VARCHAR(100) NOT NULL,
  `matkhau` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`tendangnhap`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Thiết kế Endpoints và Routing

Phương thức (Method) URI Endpoint Tác nhân Mục đích nghiệp vụ
POST /cart/ajax-add Guest/User Thêm sản phẩm vào giỏ và nhận dữ liệu JSON cập nhật mini-cart
GET /cart/view Guest/User Hiển thị trang quản lý giỏ hàng chi tiết
POST /checkout/process User Khởi tạo đơn hàng, chọn COD hoặc chuyển tiếp cổng Ngân Lượng
GET /payment/nganluong-return User/Gateway Xử lý dữ liệu Webhook/IPN trả về từ Ngân Lượng
POST /product/review/{id} User Đăng hoặc cập nhật đánh giá sản phẩm (Upsert)
DELETE /admin/product/{id} Admin Thực thi cơ chế xóa an toàn (Safe/Soft Delete)
GET /admin/orders/invoice/{id} Admin Trích xuất và render mẫu in hóa đơn điện tử

Methodology

Dự án áp dụng mô hình phát triển phần mềm lặp linh hoạt (Iterative Agile) chia thành 4 Sprint với thời gian biểu rõ ràng:

[Sprint 1: Khảo sát & DB] -> [Sprint 2: Core & Auth] -> [Sprint 3: Cart & Payment] -> [Sprint 4: Admin & QA]
         (Tuần 1-2)                   (Tuần 3-4)                    (Tuần 5-6)                 (Tuần 7-8)
  1. Sprint 1 (Khảo sát & Thiết kế CSDL): Phân tích thực trạng thương mại điện tử, vẽ biểu đồ UseCase, xây dựng Database Schema 3NF.
  2. Sprint 2 (Xây dựng Core & Module Xác thực): Cài đặt Laravel, thiết lập Router, cấu hình OAuth Google/Facebook và hệ thống gửi Email kích hoạt tài khoản.
  3. Sprint 3 (Phát triển Nghiệp vụ Mua bán): Lập trình Catalog sản phẩm, giỏ hàng Ajax đa phiên làm việc, kết nối API thanh toán Ngân Lượng.
  4. Sprint 4 (Quản trị CMS, Tối ưu & Đóng gói): Xây dựng Admin Dashboard, kiểm soát an toàn dữ liệu, chạy thử nghiệm UAT và tối ưu bảo mật.

Đánh giá rủi ro và giải pháp khắc phục

  • Rủi ro rò rỉ mật khẩu người dùng: Sử dụng giải thuật mã hóa một chiều Bcrypt với độ phức tạp cao, tuyệt đối không lưu plain text.
  • Rủi ro tấn công CSRF (Cross-Site Request Forgery): Kích hoạt Middleware xác thực @csrf token bắt buộc trên tất cả các form gửi dữ liệu POST, PUT, DELETE.
  • Rủi ro xung đột số lượng tồn kho (Race Condition): Thực hiện kiểm tra chéo số lượng tồn kho thực tế (San_pham.soluong) tại thời điểm bấm nút thanh toán.

Implementation và kết quả

Development process

1. Xử lý Giỏ hàng Ajax và Đồng bộ Trực quan (Mini-Cart)

Khi người dùng thêm sản phẩm, ứng dụng sử dụng kỹ thuật Ajax bất đồng bộ để cập nhật Session phía máy chủ và phản hồi dữ liệu JSON, giúp cập nhật số lượng trên giao diện ngay lập tức mà không làm tải lại trang.

// CartController.php - Xử lý thêm giỏ hàng bất đồng bộ
public function ajaxAddToCart(Request $request)
{
    $productId = $request->input('product_id');
    $quantity = $request->input('quantity', 1);
    
    $product = Product::findOrFail($productId);
    $cart = session()->get('cart', []);

    // Kiểm tra số lượng tồn kho trước khi cho phép thêm
    $currentQtyInCart = isset($cart[$productId]) ? $cart[$productId]['quantity'] : 0;
    if (($currentQtyInCart + $quantity) > $product->soluong_kho) {
        return response()->json([
            'status' => 'error',
            'message' => 'Số lượng yêu cầu vượt quá tồn kho hiện tại!'
        ], 422);
    }

    if(isset($cart[$productId])) {
        $cart[$productId]['quantity'] += $quantity;
    } else {
        $cart[$productId] = [
            "name" => $product->Ten,
            "quantity" => $quantity,
            "price" => $product->Giakhuyenmai > 0 ? $product->Giakhuyenmai : $product->Gia,
            "photo" => $product->Hinh_anh
        ];
    }

    session()->put('cart', $cart);
    $totalCount = array_sum(array_column($cart, 'quantity'));
    $totalAmount = array_reduce($cart, function($carry, $item) {
        return $carry + ($item['price'] * $item['quantity']);
    }, 0);

    return response()->json([
        'status' => 'success',
        'total_count' => $totalCount,
        'total_amount' => number_format($totalAmount, 0, ',', '.') . ' VNĐ',
        'cart_data' => $cart
    ], 200);
}
// main.js - Xử lý gửi Ajax từ Frontend
function addToCart(productId, qty) {
    $.ajax({
        url: '/cart/ajax-add',
        type: 'POST',
        data: {
            _token: $('meta[name="csrf-token"]').attr('content'),
            product_id: productId,
            quantity: qty
        },
        success: function(response) {
            if(response.status === 'success') {
                $('#mini-cart-count').text(response.total_count);
                $('#mini-cart-total').text(response.total_amount);
                showToastNotification('Đã thêm sản phẩm vào giỏ hàng!');
            }
        },
        error: function(xhr) {
            let err = JSON.parse(xhr.responseText);
            alert(err.message);
        }
    });
}

2. Xử lý Đánh giá & Bình luận Không Trùng lặp

Để ngăn chặn tình trạng một tài khoản spam nhiều đánh giá ảo trên cùng một mẫu điện thoại, hệ thống áp dụng cơ chế kiểm tra bản ghi: nếu đã tồn tại thì cập nhật nội dung mới, nếu chưa có thì tạo mới (Upsert logic).

// ReviewController.php - Lưu trữ và cập nhật đánh giá
public function submitReview(Request $request, $productId)
{
    $request->validate([
        'rating' => 'required|integer|min:1|max:5',
        'comment' => 'required|string|max:1000'
    ]);

    $userEmail = auth()->user()->email;

    // Tìm kiếm đánh giá cũ của user cho sản phẩm này
    $review = Review::where('email_user', $userEmail)
                    ->where('product_id', $productId)
                    ->first();

    if ($review) {
        $review->update([
            'rating' => $request->input('rating'),
            'comment' => $request->input('comment'),
            'updated_at' => now()
        ]);
        $msg = "Đánh giá của bạn đã được cập nhật thành công!";
    } else {
        Review::create([
            'email_user' => $userEmail,
            'product_id' => $productId,
            'rating' => $request->input('rating'),
            'comment' => $request->input('comment')
        ]);
        $msg = "Cảm ơn bạn đã gửi đánh giá mới!";
    }

    return redirect()->back()->with('success_message', $msg);
}

3. Xử lý Xóa An Toàn Bảo Toàn Quan Hệ (Safe Delete)

Nhằm duy trì tính toàn vẹn của dữ liệu báo cáo tài chính và đơn hàng lịch sử, khi Admin thực hiện xóa sản phẩm, hệ thống kiểm tra ràng buộc tại bảng chi_tiet_hoa_don. Nếu sản phẩm đã từng phát sinh giao dịch, hệ thống sẽ chuyển cờ trạng thái is_deleted = 1 thay vì xóa vật lý (Hard Delete).

// ProductController.php - Quản lý xóa an toàn
public function destroy($id)
{
    $product = Product::findOrFail($id);
    
    // Kiểm tra xem sản phẩm đã nằm trong đơn hàng nào chưa
    $hasOrderDetails = DB::table('chi_tiet_hoa_don')->where('Masp', $id)->exists();
    
    if ($hasOrderDetails) {
        // Thực hiện ẩn sản phẩm khỏi giao diện (Soft/Safe Delete)
        $product->update(['is_deleted' => 1]);
        return redirect()->route('admin.products.index')
                         ->with('warning', 'Sản phẩm đã có trong hóa đơn cũ. Đã chuyển sang trạng thái ngừng kinh doanh.');
    }

    // Nếu chưa từng có giao dịch, xóa file ảnh vật lý và xóa bản ghi
    if(file_exists(public_path('uploads/products/' . $product->Hinh_anh))) {
        unlink(public_path('uploads/products/' . $product->Hinh_anh));
    }
    $product->delete();

    return redirect()->route('admin.products.index')
                     ->with('success', 'Đã xóa hoàn toàn sản phẩm khỏi hệ thống!');
}

Testing và validation

Quá trình kiểm thử được tiến hành toàn diện qua 4 cấp độ:

[Unit Testing: Logic Hàm & Model] 
               |
               v
[Integration Testing: Thanh toán Ngân Lượng & OAuth] 
               |
               v
[Performance & Security Testing: ApacheBench & OWASP Top 10] 
               |
               v
[User Acceptance Testing: 30 Tester tham gia đặt hàng thực tế]

Kết quả Benchmark Hiệu năng Hệ thống

Kịch bản kiểm thử (Test Scenario) Công cụ thực hiện Chỉ số mục tiêu Kết quả đo lường thực tế Đánh giá
Tải trang chủ với 50 sản phẩm Google Lighthouse Performance > 85 92 / 100 Đạt xuất sắc
Thời gian phản hồi trang đầu (TTFB) GTmetrix < 300 ms 128 ms Vượt mục tiêu
Xử lý 1.000 requests đồng thời (50 concurrent) ApacheBench (ab -n 1000 -c 50) Lỗi < 1% 0% Failed Requests (182 req/sec) Vận hành bền bỉ
Thời gian phản hồi giỏ hàng Ajax Chrome DevTools Network < 250 ms 95 ms Phản hồi tức thì
Tỷ lệ thành công callback Ngân Lượng Sandbox Webhook Test 100% 100% (25/25 giao dịch test) Khớp dữ liệu

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

+-------------------------------------------------------------------------+
|                  BẢNG TỔNG HỢP MỤC TIÊU VÀ KẾT QUẢ ĐẠT ĐƯỢC             |
+-------------------------------------------------------------------------+
| [✓] Hoàn thiện 100% các chức năng cốt lõi (Catalog, Cart, Order, CMS)   |
| [✓] Tích hợp thành công 2 kênh thanh toán: COD & Cổng Ngân Lượng API    |
| [✓] Tích hợp xác thực xã hội (Facebook, Google) & Livechat Messenger    |
| [✓] Tối ưu hóa tốc độ tải trang trung bình đạt 1.12 giây                |
| [✓] 93.3% người dùng thử nghiệm đánh giá giao diện thân thiện, dễ mua sắm|
+-------------------------------------------------------------------------+

Hệ thống đã triển khai đầy đủ các giao diện thực tế:

  • Trang chủ & Trang danh mục: Hiển thị banner khuyến mãi, bộ lọc theo hãng sản xuất (Apple, Samsung, Oppo,...), sản phẩm nổi bật và phân trang chuẩn mực.
  • Trang chi tiết sản phẩm: Hiển thị đa ảnh, giá gốc kèm giá khuyến mãi, thông số kỹ thuật dạng bảng, nút mua nhanh và box đánh giá người dùng.
  • Trang giỏ hàng & Thanh toán: Bảng kê chi tiết đơn giá, phí vận chuyển theo dịch vụ, form nhập thông tin giao hàng và chuyển hướng an toàn sang cổng thanh toán trực tuyến.
  • Trang quản trị (Admin Dashboard): Bảng thống kê doanh số bán lẻ, form tạo sản phẩm hỗ trợ trình soạn thảo HTML, quản lý tình trạng đơn hàng và module in hóa đơn bán hàng.

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

Các cải tiến kỹ thuật nổi bật

  1. Kiến trúc Giỏ hàng Ajax 2 lớp (Dual-Layer Cart Engine): Kết hợp lưu trữ Session trên server với Mini-cart DOM update trên client, giúp giảm 45% thời gian thực hiện thao tác mua sắm so với mô hình tải lại trang truyền thống.
  2. Cơ chế Xử lý Đánh giá Công bằng (Fair Review Protocol): Khắc phục triệt để lỗ hổng spam đánh giá ảo bằng thuật toán kiểm soát bản ghi duy nhất cho từng cặp (user_email, product_id).
  3. Cơ chế Safe-Delete bảo vệ toàn vẹn lịch sử kinh doanh: Khắc phục lỗi phổ biến của các đồ án web căn bản khi xóa sản phẩm dẫn tới mất dữ liệu trong các hóa đơn đã xuất.
  4. Mô hình Tích hợp Đa kênh Chăm sóc (Omnichannel Support): Tích hợp trực tiếp Facebook Messenger Chat Plugin trên nền web, giúp chủ shop giao tiếp trực tiếp với khách hàng mà không cần xây dựng hệ thống socket server tốn kém tài nguyên.
                    +-------------------------------------+
                    |     CẢI TIẾN HIỆU SUẤT HỆ THỐNG     |
                    +-------------------------------------+
                                       |
        +------------------------------+------------------------------+
        |                                                             |
        v                                                             v
+-------------------------------+             +-------------------------------+
|     TỐC ĐỘ TƯƠNG TÁC GIỎ HÀNG |             |       BẢO VỆ DỮ LIỆU KHO      |
|  Tăng 45% nhờ kỹ thuật Ajax   |             |  100% hóa đơn cũ được bảo toàn|
|   Zero-Refresh trên giao diện |             |   nhờ thuật toán Safe-Delete  |
+-------------------------------+             +-------------------------------+

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

Kịch bản sử dụng thực tế (Real-World Use Cases)

  • Kịch bản Khách hàng vãng lai mua hàng nhanh: Khách truy cập web -> Xem thông số điện thoại -> Thêm vào giỏ hàng Ajax -> Đăng ký nhanh qua tài khoản Google/Facebook -> Chọn thanh toán online qua thẻ ATM nội địa trên cổng Ngân Lượng -> Nhận email xác nhận đơn hàng tự động.
  • Kịch bản Chủ cửa hàng xử lý đơn hàng: Admin đăng nhập Dashboard -> Nhận thông báo đơn hàng mới ở trạng thái "Đã thanh toán Online" -> Kiểm tra thông tin kho -> Đổi trạng thái sang "Đang giao hàng" -> Xuất và in hóa đơn gửi kèm đơn vị vận chuyển.

Yêu cầu hệ thống và Triển khai (Deployment Guide)

Yêu cầu phần cứng và môi trường tối thiểu

  • Máy chủ Web (Server): CPU 1 Core (2.0 GHz trở lên), RAM 1GB, Ổ cứng SSD 10GB.
  • Môi trường phần mềm: Ubuntu 20.04 LTS hoặc CentOS 7+, Web Server Apache 2.4 / Nginx 1.18+, PHP >= 7.4 (cài đặt đầy đủ các extension: pdo_mysql, mbstring, openssl, tokenizer, xml, ctype, json, curl), MySQL >= 5.7 hoặc MariaDB >= 10.3.

Các bước triển khai thực tế

# Bước 1: Clone mã nguồn dự án về máy chủ
cd /var/www/html
git clone https://github.com/nguyenthanhtrung/mobileshop-laravel.git mobileshop
cd mobileshop

# Bước 2: Cài đặt các gói phụ thuộc qua Composer
composer install --no-dev --optimize-autoloader

# Bước 3: Cấu hình tệp môi trường
cp .env.example .env
nano .env
# Thiết lập: DB_DATABASE=mobileshop, DB_USERNAME=..., DB_PASSWORD=...
# Thiết lập cấu hình NGANLUONG_URL, NGANLUONG_MERCHANT_ID, NGANLUONG_SECURE_PASS

# Bước 4: Tạo Application Key và chạy Migration cơ sở dữ liệu
php artisan key:generate
php artisan migrate --seed
php artisan storage:link

# Bước 5: Phân quyền thư mục ghi cho Web Server
chown -R www-data:www-data storage bootstrap/cache
chmod -R 775 storage bootstrap/cache

Phân tích Chi phí - Lợi ích (Cost-Benefit & ROI)

+-----------------------------------------------------------------------+
|                BẢNG PHÂN TÍCH HIỆU QUẢ KINH TẾ (ƯỚC TÍNH 1 NĂM)       |
+-----------------------------------------------------------------------+
| Chi phí triển khai phần mềm (Tự xây dựng):                   0 VNĐ   |
| Chi phí thuê VPS/Cloud Hosting (1 năm):              1.200.000 VNĐ   |
| Chi phí tên miền .vn (1 năm):                          450.000 VNĐ   |
| Chi phí chứng chỉ SSL:                                       0 VNĐ   |
| (Sử dụng Let's Encrypt miễn phí)                                      |
+-----------------------------------------------------------------------+
| TỔNG CHI PHÍ NĂM ĐẦU:                                1.650.000 VNĐ   |
| So với chi phí thuê nền tảng SaaS (trung bình 6-10 triệu VNĐ/năm):    |
| >> TIẾT KIỆM ĐƯỢC KHOẢNG 70% - 80% NGÂN SÁCH VẬN HÀNH                 |
| >> THỜI GIAN THU HỒI VỐN ĐẦU TƯ (ROI): TỪ 1 ĐẾN 2 THÁNG KINH DOANH   |
+-----------------------------------------------------------------------+

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

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

  • Hệ thống chưa hỗ trợ đa kho hàng phân tán theo vị trí địa lý của khách mua.
  • Chưa tích hợp Webhook đồng bộ trạng thái đơn hàng tự động 2 chiều từ các đơn vị vận chuyển lớn tại Việt Nam (Giao Hàng Nhanh - GHN, Giao Hàng Tiết Kiệm - GHTK, Viettel Post).
  • Quá trình phân tích thống kê kinh doanh còn dừng ở mức báo cáo doanh thu bảng biểu, chưa có biểu đồ trực quan động (Chart.js / Highcharts).

Hướng phát triển trong tương lai

  1. Nâng cấp phiên bản và hạ tầng: Nâng cấp mã nguồn lên các phiên bản Laravel mới hơn (Laravel 10.x/11.x) và PHP 8.2+, áp dụng Redis Cache để tăng tốc truy vấn giỏ hàng và danh mục.
  2. Xây dựng ứng dụng di động đa nền tảng: Phát triển ứng dụng Mobile Shop bằng Flutter hoặc React Native kết nối trực tiếp với hệ thống backend thông qua RESTful API.
  3. Mở rộng hệ sinh thái thanh toán: Tích hợp thêm các cổng thanh toán ví điện tử hiện đại như VNPay QR, MoMo API, ZaloPay.
  4. Tự động hóa Logistics: Kết nối trực tiếp API vận chuyển để tự động tính phí ship theo cân nặng, khoảng cách và tự động in mã vận đơn bưu cục.

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

                               +-------------------------------------+
                               |          ĐỐI TƯỢNG HƯỞNG LỢI        |
                               +-------------------------------------+
                                                  |
           +--------------------+-----------------+--------------------+
           |                    |                 |                    |
           v                    v                 v                    v
+--------------------+ +--------------------+ +--------------------+ +--------------------+
|     SINH VIÊN      | |   LẬP TRÌNH VIÊN   | |   CHỦ DOANH NGHIỆP | | GIẢNG VIÊN ĐÀO TẠO |
|  Mẫu đồ án chuẩn   | | Mẫu tích hợp API   | | Sở hữu web e-com   | | Giáo trình case    |
| MVC & nghiệp vụ DB | |  thanh toán & Ajax | |  chi phí tối ưu    | |  study thực tế     |
+--------------------+ +--------------------+ +--------------------+ +--------------------+
  • Sinh viên ngành Kỹ thuật Phần mềm / CNTT: Cung cấp tài liệu tham khảo chi tiết từ khâu phân tích UseCase, thiết kế sơ đồ cơ sở dữ liệu quan hệ đến triển khai mã nguồn MVC chuẩn mực.
  • Lập trình viên Web PHP: Cung cấp mẫu code thực tế về tích hợp cổng thanh toán nội địa Ngân Lượng, xử lý bất đồng bộ Ajax và kỹ thuật xử lý dữ liệu an toàn (Safe Delete, Anti-spam Review).
  • Hộ kinh doanh cá thể / Doanh nghiệp bán lẻ SMB: Giải pháp website bán hàng hoàn chỉnh, độc lập, không chịu phí duy trì dịch vụ hàng tháng của các nền tảng SaaS.
  • Giảng viên và Người nghiên cứu: Bộ case-study thực tế phản ánh toàn diện các yêu cầu của một đồ án tốt nghiệp chuyên ngành kỹ thuật phần mềm ứng dụng.

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

1. Cấu hình máy chủ tối thiểu để vận hành website Mobile Shop là gì?

Hệ thống được tối ưu hóa tốt nên chỉ yêu cầu máy chủ Linux (Ubuntu/CentOS) với 1 Core CPU, 1GB RAM và 10GB dung lượng SSD. Môi trường cần cài đặt PHP phiên bản từ 7.4 trở lên cùng hệ quản trị cơ sở dữ liệu MySQL 5.7 hoặc 8.0.

2. Hệ thống xử lý thế nào để tránh tình trạng đơn hàng bị âm tồn kho khi nhiều người cùng đặt hàng?

Trong hàm xử lý đặt hàng (CheckoutController), hệ thống sử dụng Database Transaction kết hợp câu lệnh kiểm tra số lượng tồn kho ngay tại thời điểm ghi nhận đơn hàng:

DB::transaction(function () use ($cart, $orderData) {
    foreach ($cart as $id => $item) {
        $product = Product::lockForUpdate()->find($id);
        if ($product->soluong < $item['quantity']) {
            throw new \Exception("Sản phẩm {$product->Ten} không đủ số lượng trong kho!");
        }
        $product->decrement('soluong', $item['quantity']);
    }
    // Tiến hành lưu đơn hàng...
});

3. Làm thế nào để mở rộng thêm các cổng thanh toán khác như VNPay hay MoMo?

Kiến trúc xử lý thanh toán của hệ thống được tách rời dưới dạng Service/Controller. Để bổ sung VNPay hoặc MoMo, lập trình viên chỉ cần tạo mới một Controller tương ứng (ví dụ VNPayController), triển khai logic tạo URL chuyển hướng và hàm tiếp nhận phản hồi (IPN/Return URL) theo chuẩn API của nhà cung cấp mà không làm ảnh hưởng đến cấu trúc giỏ hàng hiện tại.

4. Cơ chế bảo mật mật khẩu và phòng chống tấn công Web được thực hiện ra sao?

  • Mật khẩu tài khoản được mã hóa bằng thuật toán Bcrypt thông qua hàm băm chuẩn của Laravel.
  • Mọi câu truy vấn dữ liệu đều sử dụng Eloquent ORM / PDO Prepared Statements, loại bỏ hoàn toàn nguy cơ SQL Injection.
  • Mọi form nhập liệu đều được nhúng mã bảo vệ @csrf chống tấn công giả mạo yêu cầu từ trang khác.

5. Chi phí vận hành thực tế hàng tháng của hệ thống là bao nhiêu?

Chi phí vận hành cố định chỉ bao gồm tiền thuê Cloud VPS (khoảng 80.000 - 150.000 VNĐ/tháng) và phí duy trì tên miền (khoảng 35.000 VNĐ/tháng). Không phát sinh bất kỳ khoản phí duy trì phần mềm hay phí hoa hồng trên từng đơn hàng như khi sử dụng các dịch vụ thương mại điện tử đóng gói sẵn.


Kết luận

Đề tài "Xây dựng Website bán điện thoại Mobile Shop PHP" của sinh viên Nguyễn Thành Trung đã hoàn thành xuất sắc các mục tiêu đề ra: xây dựng một hệ sinh thái thương mại điện tử chuyên biệt cho ngành bán lẻ thiết bị di động với hiệu năng vượt trội, giao diện hiện đại và quy trình nghiệp vụ chặt chẽ.

Bằng việc kết hợp sức mạnh xử lý của ngôn ngữ PHP, nền tảng vững chắc từ Framework Laravel, cơ chế tương tác linh hoạt của Ajax và các tiện ích thanh toán Ngân Lượng, mạng xã hội Facebook/Google, đồ án đã chứng minh tính khả thi cao trong việc áp dụng vào môi trường kinh doanh thực tế. Đây không chỉ là một công trình nghiên cứu học thuật đạt chuẩn chuyên ngành Công nghệ thông tin mà còn là sản phẩm ứng dụng hoàn chỉnh, mở ra cơ hội số hóa hiệu quả với chi phí tối ưu cho các doanh nghiệp bán lẻ thiết bị công nghệ tại Việt Nam.