WordPressプラグインのライセンスシステムを構築する方法
商用WordPressプラグインを販売するには、ライセンスシステムが必要です。
顧客のサイトでキーを有効化する必要があります。キーを特定のドメインに紐付ける必要があります。また、ユーザーが1つのキーを複数のサイトで使い回すのを防がなければなりません。
多くの人はFreemiusやEDDを使用しています。これらのツールはうまく機能しますが、収益シェア(手数料)が発生します。また、サードパーティへの依存が生じます。つまり、プロセスを完全にコントロールすることはできません。
私たちはRideCab WPのために独自のシステムを構築しました。ここでは、カスタムシステムをゼロから構築する方法を紹介します。
システムは2つの部分で構成されます。
ライセンスサーバー これは自身のインフラ上で動作します。マーケティングサイトにWordPressのMust-Use(MU)プラグインを使用します。データベースにキーを保存し、有効化と検証のためにREST APIを使用します。また、キーを管理するためのダッシュボードを提供します。
クライアント これは商用プラグイン内に含まれるPHPクラスです。設定ページを追加し、有効化のためにサーバーを呼び出します。検証結果をキャッシュし、バックグラウンドで定期的に再検証を行います。
主要な要件:
- 購入時に一意のキーを生成する。
- 顧客がキーを有効化できるようにする。
- キーを特定のドメインに紐付ける。
- 定期的にキーを検証する。
- 顧客がサイトを移転した際のライセンス解除に対応する。
- サーバーがダウンした場合に、適切にエラーを処理する(Fail gracefully)。
最も重要なルールは、「Fail open(オープンに失敗する)」ことです。
もしライセンスサーバーがダウンしても、顧客を締め出さないでください。「Fail closed(クローズに失敗する)」、つまり検証に失敗した際にアクセスを遮断してしまうと、顧客のサイトが壊れた状態になります。これはあなたの評判を落とします。「Fail open」であれば、プラグインは動作し続けます。少数の海賊版利用者が無料で使うかもしれませんが、有料顧客の満足度は維持されます。
ベストプラクティス:
- すべてのAPI呼び出しにHTTPSを使用する。
- パフォーマンス向上のため、検証結果をキャッシュする。
- 安全なキーのために
random_bytes()を使用する。rand()は使用しないでください。 - 顧客自身でキーを解除できる手段を提供する。
- ステージング環境や開発用ドメインを許可する。
このセットアップはライセンスの基本をカバーしています。アップデートの配信については含んでいません。それについては今後の投稿で説明します。