如何构建 WordPress 插件授权系统
销售商业 WordPress 插件需要一套授权系统。
你需要在客户网站上激活密钥。你需要将密钥锁定在特定域名下。你必须防止用户将一个密钥分享到多个网站。
大多数人使用 Freemius 或 EDD。这些工具效果很好。然而,它们会抽取收入分成。它们是第三方依赖项。你无法掌控整个流程。
我们为 RideCab WP 构建了自己的系统。以下是如何从零开始构建自定义系统的方法。
该系统分为两个部分。
授权服务器 (The License Server) 它运行在你自己的基础设施上。在你的营销网站上使用一个 WordPress must-use 插件。它将密钥存储在数据库中。它使用 REST API 进行激活和验证。它提供一个用于管理密钥的仪表板。
客户端 (The Client) 这是你商业插件内部的一个 PHP 类。它会添加一个设置页面。它会调用你的服务器进行激活。它会缓存验证结果。它会在后台重新进行验证。
核心需求:
- 购买时生成唯一的密钥。
- 允许客户激活密钥。
- 将密钥绑定到特定域名。
- 定期验证密钥。
- 处理客户迁移网站时的停用操作。
- 如果你的服务器宕机,需实现优雅降级。
最重要的规则是失效开放 (fail open)。
如果你的授权服务器宕机,不要将客户拒之门外。如果你选择“失效关闭 (fail closed)”,客户会看到一个损坏的网站,这会毁掉你的声誉。如果你选择“失效开放”,插件将继续工作。虽然可能会有少数盗版用户免费使用,但你的付费客户会保持满意。
最佳实践:
- 为所有 API 调用使用 HTTPS。
- 缓存验证结果以节省性能。
- 使用
random_bytes()生成安全密钥。不要使用rand()。 - 为客户提供自行停用密钥的方式。
- 允许使用 staging 或 dev 域名。
这种设置处理了授权的基础功能。它不包括更新分发。我将在未来的文章中介绍这一点。