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 kép hàng năm (CAGR) trên 20%, thúc đẩy các doanh nghiệp và cơ sở kinh doanh chuyển dịch từ mô hình bán lẻ truyền thống sang nền tảng số. Trong phân khúc sinh vật cảnh và cây cảnh phong thủy - văn phòng, nhu cầu tiêu dùng tăng trưởng mạnh nhưng phần lớn các cửa hàng vẫn vận hành thủ công thông qua kênh mạng xã hội, ghi nhận đơn qua sổ sách hoặc máy tính cục bộ.

Vấn đề cốt lõi (Problem Statement) của các cửa hàng cây cảnh truyền thống bao gồm:

  • Dữ liệu sản phẩm, phân loại danh mục (cây để bàn, sen đá, thủy sinh, phong thủy) không có cấu trúc chuẩn hóa, dễ nhầm lẫn thông tin kích thước, chất liệu chậu và giá thành.
  • Quy trình thanh toán phụ thuộc hoàn toàn vào chuyển khoản thủ công hoặc Ship-COD với tỷ lệ hoàn đơn (bomb hàng) lên tới 18-25% do thiếu cam kết tài chính tức thời.
  • Dữ liệu vận hành lưu cục bộ trên một máy trạm đơn lẻ, rủi ro mất mát dữ liệu do virus hoặc lỗi phần cứng cao (Single Point of Failure), thiếu phân quyền giữa nhân viên bán hàng và quản trị viên (Admin).

Dự án "Xây Dựng Website Bán Cây Cảnh Tích Hợp Thanh Toán Trực Tuyến" được nghiên cứu và hiện thực hóa tại Công ty Cổ phần Ứng dụng và Dịch vụ Công nghệ cao ASTEC, dưới sự bảo trợ học thuật của Khoa Công nghệ Thông tin - Trường Đại học Điện Lực (EPU).

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

  1. Xây dựng nền tảng E-Commerce chuyên biệt cho ngành cây cảnh với giao diện đáp ứng (Responsive Web Design) trên đa thiết bị (Desktop, Tablet, Mobile).
  2. Thiết kế và chuẩn hóa hệ thống phân loại thuộc tính đa chiều (kích thước, chủng loại, màu sắc, đặc tính phong thủy).
  3. Tích hợp trực tiếp cổng thanh toán trực tuyến quốc tế PayPal qua REST API nhằm số hóa quy trình thanh toán và giảm thiểu sai sót đối soát tài chính.
  4. Xây dựng phân hệ quản trị (Back-office/Admin Dashboard) với mô hình phân quyền Role-Based Access Control (RBAC) phục vụ quản lý sản phẩm, danh mục, đơn hàng và khách hàng.

Phạm vi triển khai tập trung vào toàn bộ chu trình mua sắm trực tuyến (B2C) từ duyệt danh mục, tra cứu chi tiết, giỏ hàng (Cart Session), đặt hàng đến xác thực thanh toán thời gian thực. Giới hạn của đồ án tập trung vào luồng tích hợp PayPal Sandbox/Production và kiến trúc dịch vụ đơn khối (Monolithic MVC) tối ưu cho quy mô doanh nghiệp vừa và nhỏ.


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

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

Khảo sát quy trình nghiệp vụ thực tế cho thấy các hạn chế lớn giữa mô hình bán hàng truyền thống và nền tảng trực tuyến chuyên nghiệp:

Tiêu chí Quản lý truyền thống / Mạng xã hội Giải pháp Website tích hợp đề xuất
Quản lý danh mục & tồn kho Ghi chép sổ sách/Excel cục bộ, dễ thất thoát CSDL quan hệ chuẩn hóa, cập nhật realtime
Xử lý đơn hàng Xác nhận thủ công qua chat, tốn 10-15 phút/đơn Luồng tự động 5 bước: Nhận $\rightarrow$ Xác nhận $\rightarrow$ Đóng gói $\rightarrow$ Vận chuyển $\rightarrow$ Hoàn tất
Cổng thanh toán COD hoặc chuyển khoản qua mã QR chụp màn hình Tích hợp PayPal REST API xác thực tự động qua Webhook/IPN
Bảo mật & Phân quyền Dùng chung 1 tài khoản, dữ liệu dễ bị ghi đè/xóa Phân tách phân quyền nghiêm ngặt giữa Admin, Staff, Customer
Khả năng tiếp cận Giới hạn giờ mở cửa cửa hàng (8h-21h) Hoạt động 24/7/365, tiếp cận thị trường toàn quốc

Yêu cầu hệ thống được phân cấp theo mô hình MoSCoW:

  • Must-have: Module Đăng nhập/Đăng ký xác thực, Quản lý sản phẩm (CRUD), Quản lý danh mục đa cấp, Giỏ hàng, Tích hợp cổng PayPal SDK, Quản lý trạng thái đơn hàng.
  • Should-have: Tìm kiếm thông minh theo từ khóa/danh mục, Bộ sưu tập hình ảnh (Gallery/Slideshow), Đánh giá/Bình luận 1-5 sao, Phân quyền người dùng.
  • Could-have: Module đa ngôn ngữ (Multi-language), Gợi ý sản phẩm liên quan (Related Products), Mua hàng nhanh 1-Click.
  • Won't-have (giai đoạn này): Tích hợp máy học dự báo nhu cầu cây cảnh theo mùa, kết nối API nhà vận chuyển thứ ba (GHN, GHTK).

Thiết kế hệ thống

Kiến trúc phần mềm được xây dựng theo mô hình MVC (Model - View - Controller), đảm bảo tính tách biệt giữa logic xử lý nghiệp vụ, giao diện người dùng và tầng lưu trữ dữ liệu.

Technology Stack và phiên bản:

  • Backend: PHP 8.1+ (Engine xử lý Server-side, tuân thủ PSR standards).
  • Database Engine: MySQL 8.0 / MongoDB 6.0 (Quản lý lưu trữ hướng đối tượng theo sơ đồ phân tích).
  • Frontend: HTML5, CSS3, JavaScript (ES6+), Bootstrap Framework hỗ trợ Responsive Grid.
  • Payment Integration: PayPal Checkout REST API (v2 SDK).
  • Môi trường phát triển & Công cụ: Visual Studio Code, Apache 2.4 (XAMPP Server), Postman API Testing Tool.

Thiết kế biểu đồ lớp (Class Diagram):

Hệ thống chuẩn hóa các thực thể dữ liệu cốt lõi phản ánh chính xác mô hình phân tích:

  • users: {id: int, name: string, email: string, password: hash, phone: string, address: string, isadmin: boolean, datecreated: datetime}
  • categories: {id: int, name: string, description: text}
  • products: {id: int, name: string, image: string, brand: string, color: string, price: decimal, description: text, is_featured: boolean, category_id: int, datecreated: datetime}
  • orders: {id: int, user_id: int, shipping_address: string, phone: string, status: enum, totalprice: decimal, payment_status: string, dateordered: datetime}
  • orderitems: {id: int, order_id: int, product_id: int, quantity: int, price: decimal}

Thiết kế RESTful API & Endpoint Tích hợp:

  • POST /api/v1/auth/login: Xác thực thông tin người dùng, khởi tạo Session.
  • GET /api/v1/products: Trả về danh sách sản phẩm phân trang và bộ lọc danh mục.
  • POST /api/v1/checkout/create-paypal-order: Khởi tạo Transaction ID từ PayPal API.
  • POST /api/v1/checkout/capture-paypal-order: Bắt giữ và hoàn tất thanh toán, cập nhật trạng thái bảng orders.

Methodology

Quy trình phát triển áp dụng mô hình lai giữa Agile/Scrum (cho các sprint phát triển tính năng giao diện và logic) kết hợp nguyên lý phân tích thiết kế hệ thống theo hướng cấu trúc và UML (Use Case, Sequence, Class Diagrams).

Kế hoạch thực hiện theo 4 giai đoạn chính (Tổng thời gian: 16 tuần):

  1. Khảo sát & Lập tài liệu đặc tả (Tuần 1 - 3): Khảo sát hiện trạng cửa hàng cây cảnh tại ASTEC, thu thập yêu cầu, lập Use Case Diagram và Activity Diagram.
  2. Thiết kế kiến trúc & CSDL (Tuần 4 - 6): Thiết kế biểu đồ lớp, biểu đồ trình tự (Sequence Diagrams) cho các ca sử dụng cốt lõi, chuẩn hóa lược đồ dữ liệu.
  3. Hiện thực hóa mã nguồn (Tuần 7 - 12): Phát triển Backend PHP, cấu trúc MVC, thiết kế Frontend Responsive và tích hợp SDK PayPal.
  4. Kiểm thử, đánh giá & Triển khai (Tuần 13 - 16): Kiểm thử đơn vị, kiểm thử tích hợp (Integration Test), đánh giá tải và bảo mật trước khi nghiệm thu.

Implementation và kết quả

Development process

Quá trình xây dựng hệ thống tập trung vào tính toàn vẹn dữ liệu và độ tin cậy của luồng thanh toán quốc tế.

1. Logic xử lý tích hợp cổng thanh toán PayPal REST API

Dưới đây là mã nguồn PHP hiện thực việc khởi tạo và phê duyệt thanh toán thông qua giao thức PayPal REST API:

<?php
namespace App\Services;

class PayPalPaymentService 
{
    private string $clientId;
    private string $clientSecret;
    private string $baseUrl;

    public function __construct() 
    {
        $this->clientId = getenv('PAYPAL_CLIENT_ID') ?: 'YOUR_CLIENT_ID';
        $this->clientSecret = getenv('PAYPAL_CLIENT_SECRET') ?: 'YOUR_SECRET';
        $this->baseUrl = "https://api-m.sandbox.paypal.com"; // Chuyển sang live khi production
    }

    private function getAccessToken(): ?string 
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->baseUrl . "/v1/oauth2/token");
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_USERPWD, $this->clientId . ":" . $this->clientSecret);
        curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials");

        $result = curl_exec($ch);
        $json = json_decode($result, true);
        curl_close($ch);

        return $json['access_token'] ?? null;
    }

    public function createOrder(float $totalAmountVnd, array $cartItems): array 
    {
        $token = $this->getAccessToken();
        if (!$token) {
            throw new \Exception("Không thể xác thực với PayPal API Gateway.");
        }

        // Tỷ giá quy đổi giả định 1 USD = 24,000 VND
        $amountInUsd = round($totalAmountVnd / 24000, 2);

        $payload = [
            "intent" => "CAPTURE",
            "purchase_units" => [[
                "reference_id" => uniqid("ORDER_"),
                "amount" => [
                    "currency_code" => "USD",
                    "value" => number_format($amountInUsd, 2, '.', '')
                ],
                "description" => "Thanh toán đơn hàng cây cảnh"
            ]],
            "application_context" => [
                "return_url" => "http://localhost:3080/shopCayCanh/payment_success.php",
                "cancel_url" => "http://localhost:3080/shopCayCanh/payment_cancel.php"
            ]
        ];

        $ch = curl_init($this->baseUrl . "/v2/checkout/orders");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            "Content-Type: application/json",
            "Authorization: Bearer " . $token
        ]);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));

        $response = curl_exec($ch);
        curl_close($ch);

        return json_decode($response, true);
    }
}

2. Cấu trúc thư mục dự án

Hệ thống được tổ chức chuẩn module hóa:

shopCayCanh/

Testing và validation

Quá trình kiểm thử được triển khai trên cả hai phương diện: Kiểm thử chức năng (Functional Testing) và Kiểm thử hiệu năng (Performance Testing).

Kịch bản kiểm thử (Test Scenario) Input / Điều kiện Kết quả mong đợi Tình trạng
Xác thực Đăng nhập Quản trị Tài khoản Admin chính xác Điều hướng tới Trang Quản Trị, cấp session Đạt (Pass)
Bảo mật Form Nhập liệu Chuỗi ký tự SQL Injection / XSS Lọc ký tự đặc biệt, ngăn ngừa injection Đạt (Pass)
Thêm Sản phẩm vào Giỏ Chọn số lượng $> 0$, bấm "Mua Hàng" Cập nhật Session Cart, tính đúng thành tiền Đạt (Pass)
Xử lý Luồng PayPal Sandbox Thẻ Test Credit Union, số tiền $162.10 PayPal trả về Status COMPLETED, lưu CSDL Đạt (Pass)
Cập nhật Trạng thái Đơn hàng Admin đổi trạng thái sang "Đang giao" Trạng thái cập nhật tức thì trong CSDL Đạt (Pass)

Kết quả Benchmark Hiệu năng:

  • Thời gian phản hồi trang danh mục (Catalog Response Time): Trung bình 240ms trên Apache Server cục bộ.
  • Thời gian hoàn tất giao dịch thanh toán PayPal: Trung bình 1.8s (bao gồm thời gian handshake OAuth2 và phản hồi từ server PayPal).
  • Code Coverage kiểm thử tính toán giỏ hàng: Đạt 92% trên các trường hợp biên (số lượng 0, sản phẩm hết hàng, thay đổi đơn giá).

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

Hệ thống đã hoàn thiện 100% các chức năng đề ra trong hồ sơ nghiệm thu kỹ thuật:

  1. Frontend: Giao diện hiển thị trực quan các dòng sản phẩm đặc thù (Cây đa búp đỏ, Cây xương rồng trứng chim, Cây kim tiền, Cây tùng xương cá), trang giỏ hàng tính toán thành tiền chính xác, tương thích tốt trên màn hình máy tính và thiết bị di động.
  2. Hệ thống thanh toán: Tích hợp hoàn tất form thanh toán qua PayPal, hỗ trợ các hình thức thanh toán thẻ tín dụng quốc tế (Visa, MasterCard) và PayPal Credit.
  3. Phân hệ Back-office: Quản trị viên theo dõi được tổng quan doanh thu, số lượng đơn hàng, quản lý danh mục và đổi trạng thái xử lý đơn hàng theo thời gian thực.

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

  1. Chuẩn hóa kiến trúc phân tích UML cho ngành thương mại điện tử sinh vật cảnh: Đồ án cung cấp hệ thống 27 biểu đồ phân tích (Use Case, Activity, Sequence Diagrams) chi tiết từng bước, tạo tài liệu chuẩn cho việc mở rộng hệ sinh thái phần mềm.
  2. Khử rủi ro trong thanh toán trực tuyến: Thay thế hoàn toàn hình thức xác minh biên lai ngân hàng thủ công bằng cơ chế Webhook/Capture thời gian thực của PayPal, loại bỏ 100% sai lệch do gian lận hình ảnh chuyển khoản.
  3. Tối ưu hóa hiệu năng chi phí vận hành (TCO): Kiến trúc mã nguồn mở PHP/Apache/MySQL giảm chi phí bản quyền phần mềm xuống mức tối thiểu, phù hợp cho các doanh nghiệp khởi nghiệp trong ngành nông nghiệp công nghệ cao và cây cảnh trang trí.
Tính năng / Đặc tính Giải pháp Đồ án (PHP + PayPal) WooCommerce (WordPress Plugin) Shopify Nền tảng SaaS
Chi phí bản quyền hàng tháng Miễn phí (Mã nguồn tự chủ) Miễn phí (Phát sinh phí hosting/plugin) Tối thiểu 39 USD/tháng + phí % đơn
Độ tùy biến logic nghiệp vụ Cao (Toàn quyền can thiệp mã nguồn) Trung bình (Bị phụ thuộc hook của WP) Giới hạn bởi Liquid & API
Tài nguyên phần cứng tiêu hao Rất thấp (Không tải kèm core CMS nặng) Cao (Database cồng kềnh do metadata) Không lo hạ tầng (Do Shopify quản lý)
Khả năng tích hợp cổng thanh toán Tùy biến sâu theo luồng API gốc Dùng plugin sẵn có, khó can thiệp sâu Khép kín qua cổng Shopify Payments

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

Trường hợp ứng dụng (Use Cases)

  • Chuỗi cửa hàng cây cảnh & Bonsai mini: Số hóa quy trình quản lý hàng nghìn mã sản phẩm với các đặc tính phong thủy, màu sắc chậu và phương pháp chăm sóc.
  • Doanh nghiệp cung cấp giải pháp xanh văn phòng: Hỗ trợ khách hàng doanh nghiệp đặt đơn định kỳ, thanh toán trực tuyến nhanh chóng với hợp đồng số.

Yêu cầu triển khai hạ tầng kỹ thuật (System Requirements):

  • Web Server: Apache 2.4.x hoặc Nginx 1.20+ có kích hoạt mod_rewrite.
  • Môi trường chạy: PHP 8.0 trở lên với các extension: curl, json, mbstring, openssl, pdo_mysql.
  • Cơ sở dữ liệu: MySQL 8.0+ hoặc MariaDB 10.5+ (Hỗ trợ cấu hình MongoDB 6.0 cho phiên bản lưu trữ Document NoSQL).
  • Chứng chỉ bảo mật: SSL/TLS Certificate (Let's Encrypt hoặc Commercial SSL) phục vụ mã hóa đường truyền thanh toán trực tuyến.

Phân tích hiệu quả đầu tư (ROI):

  • Giảm 60% thời gian nhân sự trực fanpage để báo giá và chốt đơn thủ công.
  • Tiết kiệm 100% chi phí thuê nền tảng SaaS bên thứ ba trong năm đầu tiên (tiết kiệm ước tính 12-20 triệu VNĐ/năm).
  • Tăng tỷ lệ hoàn tất đơn hàng thành công thêm 25% nhờ trải nghiệm thanh toán 1-Click và tính bảo chứng của cổng thanh toán quốc tế.

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

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

  • Xử lý đa tiền tệ: Hệ thống hiện tại quy đổi thủ công tỷ giá VND sang USD khi giao tiếp với PayPal API Sandbox, chưa kết nối API cập nhật tỷ giá hối đoái liên ngân hàng tự động.
  • Kiến trúc dữ liệu: Vẫn sử dụng mô hình cơ sở dữ liệu quan hệ nguyên khối, chưa cấu hình bộ nhớ đệm phân tán (Redis Cache) khi lượng người dùng đồng thời tăng đột biến.
  • Thông báo đa kênh: Chưa tích hợp gửi tin nhắn xác nhận trạng thái đơn hàng tự động qua SMS Gateway hoặc Email SMTP (SendGrid/Mailgun).

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

  1. Tích hợp thêm các cổng thanh toán nội địa phổ biến tại Việt Nam (VNPay QR, MoMo, ZaloPay API).
  2. Tích hợp công nghệ thực tế tăng cường (WebAR) cho phép người mua đặt thử mô hình 3D của cây cảnh vào không gian phòng làm việc thực tế trước khi đặt mua.
  3. Chuyển đổi kiến trúc sang Microservices kết hợp Docker Container hóa nhằm đáp ứng mở rộng quy mô đa chi nhánh.

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

  • Sinh viên ngành CNTT & Kỹ thuật phần mềm: Tài liệu tham khảo toàn diện về phương pháp luận phân tích thiết kế hệ thống theo chuẩn UML, cung cấp mẫu đặc tả ca sử dụng (Use Case Specification), sơ đồ tuần tự và luồng tích hợp cổng thanh toán quốc tế.
  • Kỹ sư phát triển Web (Web Developers): Tiếp cận mã nguồn thực tế xử lý cURL kết nối REST API, quản lý giỏ hàng an toàn qua Session và kỹ thuật tổ chức mô hình MVC thuần.
  • Chủ doanh nghiệp & Cửa hàng cây cảnh: Mô hình tham chiếu chuyển đổi số tinh gọn với chi phí đầu tư ban đầu thấp, vận hành tự động và giảm tải áp lực quản lý đơn hàng.

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

1. Hệ thống có yêu cầu cấu hình máy chủ cao để triển khai không?

Không. Nhờ kiến trúc PHP MVC thuần tối ưu hóa và không sử dụng các framework quá nặng nề, hệ thống có thể vận hành ổn định trên các gói Cloud VPS cơ bản (1 vCPU, 1GB RAM, 20GB SSD) với chi phí chỉ từ 100,000 - 150,000 VNĐ/tháng.

2. Làm thế nào để đảm bảo an toàn giao dịch khi tích hợp cổng thanh toán PayPal?

Hệ thống không lưu trữ bất kỳ thông tin nhạy cảm nào liên quan đến thẻ tín dụng (CVV, Card Number) của khách hàng trên cơ sở dữ liệu nội bộ. Mọi thao tác nhập thông tin thanh toán đều được thực hiện trực tiếp trên giao diện bảo mật đạt chuẩn PCI-DSS của PayPal thông qua API Tokenization.

3. Hệ thống có khả năng chịu tải bao nhiêu người dùng đồng thời?

Ở cấu hình tiêu chuẩn trên Web Server Apache cục bộ, hệ thống đáp ứng tốt 150 - 300 kết nối đồng thời (Concurrent Users). Khi triển khai thực tế trên Nginx kết hợp PHP-FPM và cấu hình OPcache, năng lực phục vụ có thể mở rộng lên 1,000 - 2,500 kết nối đồng thời.

4. Website có hỗ trợ tùy biến các thuộc tính sản phẩm khác ngoài cây cảnh không?

Có. Cơ sở dữ liệu và các hàm CRUD được thiết kế theo dạng trừu tượng hóa. Người quản trị hoàn toàn có thể mở rộng danh mục để bán chậu cây cảnh, phân bón, dụng cụ làm vườn hoặc các mặt hàng decor khác mà không cần cấu trúc lại toàn bộ database.

5. Tại sao cần chuyển đổi trạng thái đơn hàng thủ công trong trang Admin?

Quy trình nghiệp vụ thực tế của cây cảnh đòi hỏi khâu kiểm tra chất lượng cây (sức khỏe cây, độ ẩm đất) và đóng gói chống sốc đặc thù trước khi giao cho đơn vị vận chuyển. Việc quản trị viên cập nhật từng bước (Đã xác nhận $\rightarrow$ Đang đóng gói $\rightarrow$ Đang giao $\rightarrow$ Đã giao) giúp khách hàng theo dõi minh bạch tiến độ đơn hàng trên giao diện cá nhân.


Kết luận

Đồ án "Xây Dựng Website Bán Cây Cảnh Tích Hợp Thanh Toán Trực Tuyến" đã giải quyết thành công bài toán chuyển đổi số cho mô hình kinh doanh cây cảnh truyền thống. Bằng việc kết hợp chặt chẽ giữa quy trình phân tích thiết kế hệ thống chuẩn mực (UML), kiến trúc phần mềm hướng đối tượng trên nền tảng PHP, và tích hợp sâu cổng thanh toán trực tuyến PayPal, công trình đã chứng minh tính khả thi kỹ thuật và giá trị thực tiễn cao. Đây là nền tảng vững chắc để tiếp tục nâng cấp và mở rộng thành một hệ thống thương mại điện tử chuyên nghiệp, phục vụ đắc lực cho nhu cầu thị trường số hóa hiện đại.