𝗛𝗼𝘄 𝘁𝗼 𝗕𝘂𝗶𝗹𝗱 𝗮 𝗪𝗼𝗿𝗱𝗣𝗿𝗲𝘀𝘀 𝗣𝗹𝘂𝗴𝗶𝗻 𝗟𝗶𝗰𝗲𝗻𝘀𝗶𝗻𝗴 𝗦𝘆𝘀𝘁𝗲𝗺
Việc bán một plugin WordPress thương mại đòi hỏi phải có một hệ thống cấp phép.
Bạn cần kích hoạt các mã (key) trên trang web của khách hàng. Bạn cần khóa các mã vào các tên miền cụ thể. Bạn phải ngăn người dùng chia sẻ một mã cho nhiều trang web khác nhau.
Hầu hết mọi người sử dụng Freemius hoặc EDD. Những công cụ này hoạt động rất tốt. Tuy nhiên, chúng sẽ thu một phần doanh thu. Chúng là các phụ thuộc bên thứ ba. Bạn không sở hữu quy trình này.
Chúng tôi đã xây dựng hệ thống riêng cho RideCab WP. Dưới đây là cách bạn xây dựng một hệ thống tùy chỉnh từ con số không.
Hệ thống gồm hai phần.
Máy chủ Cấp phép (The License Server) Phần này chạy trên hạ tầng riêng của bạn. Hãy sử dụng một WordPress must-use plugin trên trang web marketing của bạn. Nó lưu trữ các mã trong cơ sở dữ liệu. Nó sử dụng một REST API để kích hoạt và xác thực. Nó cung cấp một bảng điều khiển (dashboard) để quản lý các mã.
Phía Khách hàng (The Client) Đây là một lớp (class) PHP nằm bên trong plugin thương mại của bạn. Nó thêm một trang cài đặt. Nó gọi máy chủ của bạn để kích hoạt. Nó lưu bộ nhớ đệm (cache) các kết quả xác thực. Nó thực hiện xác thực lại trong nền (background).
Các yêu cầu cốt lõi:
- Tạo các mã duy nhất trong quá trình mua hàng.
- Cho phép khách hàng kích hoạt mã.
- Ràng buộc mã với các tên miền cụ thể.
- Xác thực mã định kỳ.
- Xử lý việc hủy kích hoạt khi khách hàng chuyển trang web.
- Xử lý lỗi một cách mượt mà nếu máy chủ của bạn gặp sự cố.
Quy tắc quan trọng nhất là "fail open" (cho phép hoạt động khi gặp lỗi).
Nếu máy chủ cấp phép của bạn bị sập, đừng khóa quyền truy cập của khách hàng. Nếu bạn chọn "fail closed" (khóa khi gặp lỗi), khách hàng sẽ thấy một trang web bị hỏng. Điều này sẽ hủy hoại uy tín của bạn. Nếu bạn chọn "fail open", plugin vẫn tiếp tục hoạt động. Một vài kẻ dùng lậu có thể sử dụng nó miễn phí, nhưng những khách hàng trả phí của bạn vẫn sẽ hài lòng.
Các thực hành tốt nhất (Best Practices):
- Sử dụng HTTPS cho tất cả các lệnh gọi API.
- Lưu bộ nhớ đệm kết quả xác thực để tiết kiệm hiệu năng.
- Sử dụng
random_bytes()để tạo mã bảo mật. Đừng sử dụngrand(). - Cho phép khách hàng tự hủy kích hoạt mã.
- Cho phép các tên miền staging hoặc dev.
Thiết lập này xử lý các bước cơ bản của việc cấp phép. Nó không bao gồm việc phân phối bản cập nhật. Tôi sẽ đề cập đến vấn đề đó trong một bài viết tương lai.