ProjectWebAPI_Ecommerce
là một hệ thống Web API cho ứng dụng thương mại điện tử, được được xây dựng bằng ASP.NET Core và phát triển theo kiến trúc Clean Architecture, sử dụng CQRS, Entity Framework Core, JWT và xử lý tác vụ nền bằng Hangfire. Dự án tích hợp các tính năng chính như xác thực, phân quyền theo Role và Permission, quản lý sản phẩm, xử lý đơn hàng, thanh toán Stripe.
- ASP.NET Core 8.0
- Entity Framework Core (Code-First ,Fluent API)
- SQL Server (lưu trữ dữ liệu)
- Clean Architecture + CQRS + MediatR
- Xác thực JWT Authentication
- AutoMapper (Chuyển đổi dữ liệu giữa DTO và Model)
- Swagger UI (Tài liệu API)
- Repository Pattern (Quản lý dữ liệu)
- Validation (Kiểm tra dữ liệu đầu vào sử dụng Fluent Validation)
- Hangfire & MailKit: Gửi email xác nhận đơn hàng sau khi thanh toán thành công
- Stripe API cho thanh toán
Dự án được tổ chức theo nguyên tắc Clean Architecture:
- ECommerce.API: Chứa các controller API, middleware, template email và cấu hình
- ECommerce.Application: Chứa logic nghiệp vụ, handler CQRS, DTO và service
- ECommerce.Domain: Định nghĩa các entity, enum
- ECommerce.Infrastructure: Triển khai repository, DbContext, JWT và tích hợp dịch vụ bên ngoài như Hangfire, Stripe, MailKit
ECommerce/
├── WebAPI
│ ├── Controllers
│ └── Middleware
│ └── Templates
├── Application
│ ├── Common
│ ├── Features (CQRS: Commands / Queries / Handlers)
│ └── Interfaces
├── Domain
│ ├── Entities
│ └── Enums
├── Infrastructure
│ ├── Authentication
│ ├── BackgroundJobs
│ ├── Data
│ ├── Migrations
│ ├── Repositories
│ ├── Services
- Đăng ký và đăng nhập người dùng với xác thực JWT (JSON Web Tokens)
- Quản lý người dùng: Xác thực, phân quyền và quản lý thông tin người dùng
- Quản lý danh mục
- Quản lý sản phẩm (API công khai để lấy danh sách sản phẩm hoặc sản phẩm theo ID)
- Tạo và quản lý đơn hàng (Phân trang, lọc, tìm kiếm đơn hàng theo trạng thái, theo thời gian)
- Xác thực: JWT Authentication (JSON Web Tokens), Refresh Token
- Phân quyền theo Role & Permission (Admin, Customer, Manager) với Custom Authorization
- Xử lý thanh toán qua Stripe (sử dụng Stripe Webhook để cập nhật trạng thái đơn hàng)
- Quản lý khuyến mãi (Tạo, thêm, xóa sản phẩm trong khuyến mãi)
- Đặt lịch gửi email thông báo khuyến mãi cho tất cả user và cập nhật trạng thái khi khuyến mãi hết hạn (BackgroundJob Hangfire + MailKit)
- Gửi email xác nhận đơn hàng và cập nhật trạng thái đơn hàng (Hangfire + MailKit)
Hệ thống sử dụng bảng Roles
, Permissions
, RolePermissions
, UserRoles
.
Tất cả được ánh xạ tự động và kiểm tra bằng Attribute HasPermission("View.Order")
.
Áp dụng CustomAuthorizationHandler
để xử lý logic kiểm tra quyền dựa vào JWT + cơ sở dữ liệu.
Dự án sử dụng Hangfire để xử lý các tác vụ nền, bao gồm:
- Gửi email xác nhận đơn hàng sau khi thanh toán thành công
- Hủy đơn hàng nếu chưa thanh toán sau 15 phút với MailKit
- Gửi email thông báo khuyến mãi cho tất cả user theo thời gian bắt đầu
- Cập nhật trạng thái khi khuyến mãi hết hạn
Có thể truy cập dashboard tại/hangfire
để theo dõi job
Cách gọi và sử dụng thanh toán Stripe và webhook Stripe:
- Cấu hình StripeSettings trong appsettings.json
- Chạy Stripe CLI
- Gọi API tạo hóa đơn (api/Order/checkout)
- Gọi API tạo thanh toán (api/Payment/create-payment-intent) sử dụng orderId vừa tạo
- Dùng clientSecret paste vào code frontend (stripepayment.html) để test nhập trên giao diện
- Chạy web và nhập thông tin card -> Submit
Lưu ý: Thanh toán Stripe test mode không nhận giá trị quá 8 chữ số (VND/USD)
- Với USD: 0.50 USD đến 999,999.99 USD
- Với VND: tối đa 99,999,999 VND.
Các bước sử dụng Stripe CLI
-
Tải file stripe mới nhất từ link: https://github.com/stripe/stripe-cli/releases/tag/v1.26.1
-
Cài đặt biến môi trường cho Stripe
-
Chạy stripe listen
stripe listen --forward-to https://localhost:xxxxx/api/stripe/webhook
-
Clone repository:
git clone https://github.com/phanthethanh0209/ProjectWebAPI_Ecommerce.git
-
Cấu hình database trong
appsettings.json
:"ConnectionStrings": { "DefaultConnection": "Data Source=YOUR_SQLSERVER;Initial Catalog=ECommerceDB;User=YOUR_USER;Password=YOUR_PASSWORD;" }
-
Mở Package Manager Console (Tools > NuGet Package Manager > Package Manager Console) và chạy lệnh sau để tạo migration:
Add-Migration InitialCreate
- Sau đó, cập nhật database:
Update-Database
Sử dụng Swagger để xem tài liệu API Hoặc sử dụng Postman để kiểm thử API
Nếu bạn muốn đóng góp, hãy tạo Pull Request hoặc báo lỗi trong mục Issues của GitHub.
Để biết thêm chi tiết hoặc gửi phản hồi, liên hệ qua [phanthethanh0209@gmail.com].