Cách xây dựng một sàn thương mại điện tử đa người bán với Laravel

Xây dựng một sàn thương mại điện tử là một bài toán về dữ liệu.

Hầu hết các nhà phát triển đều nghĩ rằng phần khó nhất là bảng điều khiển dành cho người bán (seller dashboard). Không phải vậy. Thách thức thực sự nằm ở tính đa người dùng (multi-tenancy). Bạn phải đảm bảo mọi truy vấn đều trả lời được một câu hỏi: Ai là chủ sở hữu của dữ liệu này?

Nếu bạn xây dựng một cửa hàng tiêu chuẩn rồi mới cố gắng thêm người bán sau đó, bạn sẽ phải viết lại toàn bộ. Bạn sẽ phải lồng ghép một vendor ID vào mọi model, mọi truy vấn và mọi giỏ hàng. Nếu bạn bỏ lỡ dù chỉ một bộ lọc, một người bán có thể nhìn thấy đơn hàng của người bán khác. Đó chính là rò rỉ dữ liệu.

Bạn có ba lựa chọn:

  • Tự xây dựng: Bạn phải viết mọi mệnh đề phạm vi (scoping clause). Việc này vừa tốn kém vừa rủi ro.
  • Sử dụng cửa hàng đơn người dùng (single-tenant) với các tiện ích bổ sung: Bạn phải ghép các cột người bán vào một lược đồ (schema) vốn không được thiết kế cho chúng. Sự cô lập dữ liệu sẽ luôn mong manh.
  • Sử dụng nền tảng đa người dùng (multi-tenant): Sử dụng một gói như Aimeos, nơi sự cô lập được xây dựng sẵn vào mô hình dữ liệu ngay từ ngày đầu tiên.

Dưới đây là cách chuyển đổi một cửa hàng đơn lẻ thành một sàn thương mại điện tử bằng cách sử dụng Aimeos:

1. Cài đặt nền tảng

Chạy lệnh này để bắt đầu: composer create-project aimeos/aimeos myshop

2. Kích hoạt chế độ đa người bán

Bạn không cần phải viết lại cơ sở dữ liệu của mình. Chỉ cần thay đổi một dòng trong tệp .env: SHOP_MULTISHOP=true

Cờ (flag) này sẽ tự động giới hạn phạm vi của mọi route, API và bảng điều khiển quản trị cho một trang web cụ thể. Hệ thống sẽ tự xử lý việc phân tách dữ liệu cho bạn.

3. Kích hoạt quy trình đăng ký tự phục vụ

Để mở rộng quy mô, hãy để người bán tự đăng ký. Thêm dòng này vào tệp .env: SHOP_REGISTRATION=true

Những người bán mới chỉ có quyền truy cập vào danh mục sản phẩm, đơn hàng và khách hàng của riêng họ. Họ không thể thấy bất kỳ thứ gì khác.

Tại sao cách này hiệu quả:

Aimeos tổ chức mọi thứ xoay quanh "site" (trang web). Mọi sản phẩm, giá cả và đơn hàng đều mang một site ID. Lớp dữ liệu sẽ tự động lọc điều này. Bạn không cần phải viết "where site_id = ?" vì hệ thống đã làm thay bạn.

Cách tiếp cận này giải quyết ba vấn đề lớn:

  • Bảo mật: Sự cô lập dữ liệu là một đặc tính của cơ sở dữ liệu, chứ không phải là một đoạn mã mà bạn có thể vô tình bỏ quên.
  • Độ phức tạp: Người bán có thể quản lý các sản phẩm phức tạp như gói đăng ký (subscriptions) hoặc các gói sản phẩm (bundles) mà bạn không cần phải thay đổi lược đồ (schema).
  • Thanh toán: Bạn có thể sử dụng các tiện ích mở rộng như Stripe để chia tách thanh toán ngay lập tức. Nền tảng sẽ thu một khoản hoa hồng và người bán nhận phần còn lại.

Đừng tốn thời gian xây dựng "đường ống" nữa. Hãy bắt đầu xây dựng sàn thương mại điện tử của bạn.

Source: https://dev.to/aimeos/how-to-implement-a-multi-vendor-e-commerce-marketplace-397a