Skip to main content
Nguyen Ngoc Han
ProfileProjectsActivityContact
← Activity
Avatar Nguyen Ngoc Han
Nguyen Ngoc Han
11 October at 12:10·

EriHub

EriHub — Digital Products & Software License E-Commerce Platform

Nền tảng thương mại điện tử chuyên biệt phân phối sản phẩm số, key bản quyền phần mềm, tài khoản dịch vụ với cơ chế xác thực thanh toán tự động (VietQR / SePay / MoMo) và bàn giao tức thì.


⚡ Tech Stack

  • Framework: Next.js 16 (App Router) + React 19 + TypeScript
  • Styling: Tailwind CSS v4 + Lucide Icons + Base UI
  • Database & ORM: PostgreSQL + Prisma ORM
  • Authentication: NextAuth.js v4 + BCrypt
  • Payment Gateways: SePay Webhook, VietQR, MoMo API
  • Data Security: AES-256-GCM Credential Encryption

📋 Yêu cầu hệ thống (Prerequisites)

  • Node.js: phiên bản >= 18.18.0 (Khuyên dùng Node 20 LTS)
  • Cơ sở dữ liệu: PostgreSQL (Cloud: Neon, Supabase, Vercel Postgres, Railway hoặc Local PostgreSQL)
  • Package Manager: npm, pnpm hoặc yarn

🔑 Hướng dẫn lấy API & Cấu hình Biến môi trường

Tạo file .env từ file mẫu .env.example:

cp .env.example .env

Điền các thông số theo bảng hướng dẫn chi tiết dưới đây:

Biến môi trườngBắt buộcMô tả & Cách lấy
DATABASE_URLCóChuỗi kết nối PostgreSQL dạng postgresql://user:pass@host:5432/dbname?sslmode=require. 👉 Lấy miễn phí tại Neon.tech hoặc Supabase.
NEXTAUTH_SECRETCóKhóa bí mật dùng để mã hóa session và JWT của NextAuth. 👉 Tạo nhanh bằng terminal: openssl rand -base64 32
NEXTAUTH_URLCóURL gốc của website (http://localhost:3000 khi dev, hoặc domain Vercel/VPS khi deploy).
NEXT_PUBLIC_APP_URLCóURL công khai của ứng dụng (trùng với NEXTAUTH_URL).
ENCRYPTION_KEYTùy chọnKhóa mã hóa AES-256 bảo vệ kho mã thẻ/tài khoản số (nếu để trống hệ thống sẽ tự dùng NEXTAUTH_SECRET).
SEPAY_API_KEYTùy chọnAPI Key cổng thanh toán SePay để đối soát giao dịch tự động. 👉 Đăng ký tại my.sepay.vn → Tích hợp Webhook → Copy API Key.
VIETQR_BANK_IDCóMã ngân hàng nhận tiền (vd: MB, VCB, ACB, TCB).
VIETQR_ACCOUNT_NOCóSố tài khoản ngân hàng thụ hưởng.
VIETQR_ACCOUNT_NAMECóTên chủ tài khoản (in hoa không dấu, vd: NGUYEN VAN A).
VIETQR_TEMPLATETùy chọnMẫu giao diện mã VietQR (mặc định: compact2).
MOMO_PARTNER_CODETùy chọnMã đối tác MoMo Business (hoặc MoMo Test Portal).
MOMO_ACCESS_KEYTùy chọnKhóa truy cập MoMo Payment Gateway.
MOMO_SECRET_KEYTùy chọnKhóa bí mật tạo chữ ký HMAC SHA256 cho MoMo.
MOMO_ENDPOINTTùy chọnEndpoint API MoMo (Sandbox: https://test-payment.momo.vn/v2/gateway/api/create).

🚀 Hướng dẫn Cài đặt & Khởi chạy (Local Development)

Bước 1: Cài đặt dependencies

npm install

Bước 2: Đồng bộ cấu trúc Database

Khởi tạo cấu trúc bảng dữ liệu Prisma vào database PostgreSQL của bạn:

npx prisma db push

(Tùy chọn: Chạy npx prisma studio để mở giao diện quản trị database trực quan trên browser)

Bước 3: Khởi tạo tài khoản Quản trị viên (Admin Seed)

Chạy script để tạo tài khoản Admin đầu tiên:

node seed-admin.js
  • Tài khoản mặc định: admin / AdminPassword123!
  • Truy cập trang quản trị tại: http://localhost:3000/admin

Bước 4: Chạy môi trường Development

npm run dev

Mở trình duyệt truy cập: http://localhost:3000


📦 Hướng dẫn Build Production

1. Kiểm tra và Build ứng dụng

Lệnh build sẽ tự động chạy prisma generate và biên dịch Next.js:

npm run build

2. Chạy ứng dụng Production

npm run start

🔗 Cấu hình Webhook Thanh toán tự động (Production)

Để kích hoạt tính năng tự động xác nhận đơn hàng khi khách chuyển khoản:

  1. Đăng nhập SePay Dashboard.
  2. Tạo Webhook mới trỏ về endpoint:
    POST https://<your-domain.com>/api/webhooks/sepay
    
  3. Cấu hình xác thực với SEPAY_API_KEY tương ứng trong file .env.

📁 Cấu trúc thư mục chính

├── src/
│   ├── app/                # Next.js App Router (Storefront, Admin, API Routes)
│   │   ├── (store)/        # Giao diện người dùng (Sản phẩm, Giỏ hàng, Thanh toán)
│   │   ├── admin/          # Quản trị hệ thống (Đơn hàng, Kho mã, Thống kê)
│   │   └── api/            # API Endpoints (Auth, Webhook SePay, Upload, Orders)
│   ├── components/         # UI Components dùng chung
│   ├── features/           # Logic theo module tính năng (Cart, Checkout, Payment)
│   └── lib/                # Database client (Prisma), Auth config, Encryption utils
├── prisma/
│   └── schema.prisma       # Cấu trúc Database & Data Models
├── docs/                   # Tài liệu kiến trúc & API quy chuẩn
└── seed-admin.js           # Script khởi tạo tài khoản quản trị

🛡️ Giấy phép (License)

Dự án được phát triển nội bộ bởi đội ngũ EriHub. Mọi quyền được bảo lưu.

↗ https://github.com/Ericismee/EriHub

About the author

Avatar Nguyen Ngoc Han
Nguyen Ngoc Han

Software Engineer

Explore my experience, projects and source code.

View profile →GitHub →
—
ProfileProjectsActivityContact