はじめに
Web サービスを構築していますが、その中で課金を行う為に、以前プラグインを2つ開発しました。課金を行って制限を解除するという事をやっています。ただ EC 関連は、日進月歩で目まぐるしく仕様が変化しそれに合わせていかねばなりません。そのあたりに限界を感じ、「餅は餅屋」ということわざにならい、EC 関連は、WooCommerce に任せる事にしました。
WooCommerce でサービス販売時にライセンスキーを発効して、ユーザーにライセンスキーを入力していただき制限を解除する事を考えてみました。テーマ販売や、プラグイン販売にも応用できると思います。
プラグイン
以下のプラグインを使用します。
販売
ライセンスキー管理
また、上記2つのプラグインの仲立ちをする以下のプラグイン2つを開発しました。
WooCommerce でライセンスキーを発効
ライセンスキーを有効化・無効化するフォームをショートコードで埋め込む
実際の流れ
WooCommerce で商品を作成
商品データーは、基本的な商品とし、バーチャルをチェックします。また、Add License Key をチェックし、以下の値を設定します。
- Max allowed domains : ライセンス認証可能ドメイン数です。1以上の整数を指定します。
- Expiry days : ライセンス認証の期限です。これは、ライセンスそのものの期限では無く認証の期限です。期限前に認証が済んでいれば、期限後もライセンスは継続されます。 日にちを指定します。
Software License Manager の設定画面でキーを確認
- Secret Key for License Creation は、ライセンスキーを1回毎に発効するための元のキーです。
Software License Manager for WooCommerce を設定
- License Server URL : Software License Manager が動作するサーバーの URL です。これは、別サーバーでも動作します。デフォルトでは、同サーバーの URL が入ります。
- Secret Key for License Creation : Software License Manager のものと同じものを入力します。
商品購入時の画面とメール
- 商品を購入すると、購入画面とメールに、ライセンスキーが付加されます。
受注
- 受注画面から、ライセンスキーが確認できます。
クライアント側でのライセンスキー認証
クライアント側で、 Software License Manager Client を利用します。ショートコードを投稿や固定ページ内においたり、プラグインやテーマ内に書き込んで使用します。
- Secret Key for License Verification Requests は、認証用のキーです。ライセンスキーとこのキーで認証を行います。
Software License Manager Client を設定
- 管理画面がありますが、 ライブラリとしてプラグインやテーマに組み込むことができます。 その場合は、「license-checker/class-slmclient.php」と「license-checker/jquery.slmclient.js」をプラグインやテーマにコピーし、以下のように使用してください。
/* Javascript を読み込む URL を指定してください。 */
class-slmclient.php 46 行
$this->script_url = *********** . 'license-checker/jquery.slmclient.js';
/* サンプル1 属性無しで書くと、管理画面で設定した値を利用します。 */
if ( ! class_exists( 'SlmClient' ) ) {
require_once dirname( __FILE__ ) . 'class-slmclient.php';
}
echo do_shortcode('[slmcl]');
/* サンプル2 属性を付加して書くと、その値を優先し、管理画面で設定した値は無視します。 */
if ( ! class_exists( 'SlmClient' ) ) {
require_once dirname( __FILE__ ) . 'class-slmclient.php';
}
echo do_shortcode('[slmcl item_reference="test_plugin" sales_site_url="https://test.com/product/test2/" license_server_url="https://test.com/" special_secretkey="5d1291a361ef14.63243498"]');
- ショートコードの属性は以下の通りです。
- item_reference : 名前です。ライセンスが認証されたら、オプションテーブルに、license_key_*** という名前で中身がライセンスキーのものを書き込みます。例えば、item_reference が、test だったら、 license_key_test になります。プラグインやテーマからライセンスの有無を調べるには、このオプションテーブルの有無を get_option で調べるだけです。管理画面では、Name に該当します。
- sales_site_url : WooCommerce の入ったショッピングサイトの商品の URL です。フォーム内の Purchase(購入)ボタンに対応します。管理画面では、Sales Site URL に該当します。
- license_server_url : Software License Manager が動作するサーバーの URL です。これは、別サーバーでも動作します。デフォルトでは、同サーバーの URL が入ります。管理画面では、License Server URL に該当します。
- special_secretkey : Software License Manager の設定画面にある、Secret Key for License Verification Requests です。管理画面では、Special Secret Key for License に該当します。
- また、ライセンスキーを無効化する際のアクションフックを提供しています。
/* サンプル1 配列無しで書くと、管理画面で設定した値を利用します。 */
do_action( 'deactive_slm_key', $arg = array() );
/* サンプル2 配列を付加して書くと、その値を優先し、管理画面で設定した値は無視します。 */
$arg = array( 'item_reference' => 'test_plugin', 'sales_site_url' => 'https://test.com/product/test2/', 'license_server_url' => 'https://test.com/', 'special_secretkey' => '5d1291a361ef14.63243498' );
do_action( 'deactive_slm_key', $arg );
- アクションフックの配列の属性値は、上記のショートコードの属性値と同じです。
ライセンス認証
実際に、ショートコードを組み込んだプラグインの認証画面を以下に示します。※ プラグインは、Add Mulitple User です。
- メールで送られてきたライセンスキーを入力して Activate ボタンで認証します。
- License Key が送信されると入力不可になり、Confirm(確認)ボタンを押します。
- 認証されると、License Key が表示されたままになります。
サーバー側でのライセンス管理
Software License Manager のライセンス管理画面を見るとライセンスキーがあり、ステータスが active になっているのが見てとれます。
終わりに
自分の以下の プラグインや Web サービスにこのシステムを適用させました。
コメントを残す