ソフトウェアライセンス拡張機能に含まれるAPIを使用すると、ライセンスキーをリモートでアクティブ化したり、キーが有効(期限切れでない)かどうかを確認したり、ソフトウェアの最新バージョンに関する情報を取得したりできます。このAPIは、WordPressプラグインやテーマだけでなく、ほとんどのソフトウェアに実装できます。
この記事の内容
利用可能なAPIリクエストとパラメータ
WordPressプラグインとテーマの統合
ライセンスキーのアクティブ化
ライセンスの有効性/アクティブ状態を確認
バージョン情報の取得
複数の製品のバージョンを一度に取得する
他の言語でのAPI例
FAQ / トラブルシューティング
利用可能なAPIリクエストタイプは4種類あります:
- activate_license – ライセンスキーをリモートでアクティブ化するために使用します
- deactivate_license – ライセンスキーをリモートで非アクティブ化するために使用します
- check_license – ライセンスキーがアクティブ化されているか、有効か、期限切れでないかを確認するためにリモートで使用します
- get_version – 製品の最新バージョン情報をリモートで取得するために使用します
以下の各メソッドは同じように機能します。Easy Digital Downloads + Software LicensingがインストールされているウェブサイトのURLがAPIエンドポイントとして機能します。APIへのすべてのリクエストは、GETまたはPOSTリクエストとして行われ、次の形式に従います:
https://YOURSITE.com/?edd_action={request type}&item_id={download ID here}&license=cc22c1ec86304b36883440e2e84cddff&url={url of the site being licensed}
リクエストには3つの必須パラメータと1つのオプションパラメータがあります:
- edd_action – リクエストのタイプです(下記参照)
- item_id – ダウンロード製品のダウンロードIDを使用します。item_nameを使用するよりも正確です。
- item_idの代わりにitem_nameを使用することもできます。これはIDではなくダウンロードの名前です。item_idを渡す方が推奨されます。変更される可能性が低いためです。item_nameが変更された場合、ソフトウェアを更新して古い名前を参照するようにする必要があり、そうしないと機能しなくなります。
- license – アクションを実行するライセンスキーです
- url – (オプション)APIリクエストの発信元サイトのURLです
デスクトップソフトウェアのURLのヒント:
urlパラメータはURLに限定されません。たとえば、デスクトップソフトウェアでは、urlパラメータをシステムIDまたは任意のユニークなテキストに使用できます。
ライセンスキー:
- ライセンスキーAPIは、次の文字のみをサポートします [a-z, A-Z, 0-9, -, _]。
- ライセンスキーの最大長は256文字です。
WordPressプラグインとテーマの統合:
WordPressプラグインとテーマでSoftware Licensing APIを統合する方法については、次のドキュメントを参照してください:
WordPressプラグインの自動アップグレードを統合する方法に関するドキュメントをご覧ください。
WordPressテーマの自動アップグレードを統合する方法に関するドキュメントをご覧ください
ライセンスキーのアクティブ化
ライセンスをリモートでアクティブ化するには、次のURLを使用します:
https://YOURSITE.com/?edd_action=activate_license&item_id=8&license=cc22c1ec86304b36883440e2e84cddff&url=https://licensedsite.com
item_id パラメータ(item_id=8)は、製品の実際のIDに置き換えられます。これはダッシュボードの製品の横にあります:

ライセンスパラメータは、アクティブ化したいライセンスキーに設定されます。
このリクエストのレスポンスはJSONオブジェクトになります。ライセンスが正常にアクティブ化された場合、レスポンスは次のようになります。
{
"success": true,
"license": "valid",
"item_id": false (or Item ID if passed)
"item_name": "EDD Product Name",
"license_limit": 0,
"site_count": 2,
"expires": "2020-06-30 23:59:59",
"activations_left": "unlimited",
"checksum": "<md5 checksum>",
"payment_id": 12345,
"customer_name": "John Doe",
"customer_email": "[email protected]",
"price_id": "2"
}
ライセンスが無効でアクティブ化に失敗した場合、レスポンスは次のようになります。
{
"success": false,
"license": "invalid",
"item_id": false (or Item ID if passed)
"item_name": "EDD Product Name",
"error": "expired",
"expires": "2020-04-28 23:59:59",
"license_limit": 0,
"site_count": 1,
"activations_left": "unlimited",
"checksum": "<md5 checksum>",
"payment_id": 12345,
"customer_name": "John Doe",
"customer_email": "[email protected]",
"price_id": "2"
}
考えられるエラー:
"missing" - License doesn't exist "missing_url" - URL not provided "license_not_activable" - Attempting to activate a bundle's parent license "disabled" - License key revoked "no_activations_left" - No activations left "expired" - License has expired "key_mismatch" - License is not valid for this product "invalid_item_id" - Invalid Item ID "item_name_mismatch" - License is not valid for this product "site_inactive" - Site is not active for this license "invalid" - License key does not match "valid" - License is valid
ライセンスが有効/アクティブか確認する
ライセンスが有効で期限切れでないかを確認することは、アクティブ化と非常によく似ています。このリクエストは通常、ライセンスがアクティブ化された後にライセンスがまだ有効であることを確認する必要がある場合に行われます。ライセンスは(デフォルトで)1年後に期限切れになるため、ライセンスが期限切れになったかどうかを確認するために使用するのはこれです。
ライセンスをリモートで確認するには、使用するURLは次のとおりです。
https://YOURSITE.com/?edd_action=check_license&item_id=8&license=cc22c1ec86304b36883440e2e84cddff&url=https://licensedsite.com
item_id パラメータ (item_id=8) は、製品の実際のIDに置き換えられます。これはダッシュボードの製品の横にあります。

ライセンスパラメータは、確認したいライセンスキーに設定されます。
このリクエストのレスポンスはJSONオブジェクトになります。ライセンスがアクティブでまだ有効な場合、レスポンスは次のようになります。
{
"success": true,
"license": "valid",
"item_id": false, (or Item ID if passed)
"item_name": "EDD Product Name",
"checksum": "",
"expires": "2020-06-30 23:59:59",
"payment_id": 12345,
"customer_name": "John Doe",
"customer_email": "[email protected]",
"license_limit": 0,
"site_count": 2,
"activations_left": "unlimited",
"price_id": "2"
}
ライセンスが無効な場合、レスポンスは次のようになります。
{
"success": false,
"license": "invalid",
"item_id": false, (or Item ID if passed)
"item_name": "EDD Product Name",
"expires": "2014-10-23 00:00:00",
"license_limit": 0,
"site_count": 1,
"activations_left": "unlimited",
"checksum": "checksum",
"payment_id": 54224,
"customer_name": "John Doe",
"customer_email": "[email protected]",
"price_id": "2"
}
考えられるライセンスステータス:
"disabled" - License key revoked "expired" - License has expired "key_mismatch" - License is not valid for this product "invalid_item_id" - Invalid Item ID "item_name_mismatch" - License is not valid for this product
バージョン情報の取得
バージョン情報を取得すると、最新バージョン番号(変更ログやアップデートファイルのダウンロードリンクを含む)に関するデータをリモートで取得できます。
ライセンスキーのバージョン情報を取得するには:
https://YOURSITE.com/?edd_action=get_version&item_id=8&license=cc22c1ec86304b36883440e2e84cddff&url=https://licensedsite.com
item_id パラメータ (item_id=8) は、製品の実際のIDに置き換えられます。これはダッシュボードの製品の横にあります。

リクエストに関する注意点:
- item_idの代わりにitem_nameを使用する場合、Easy Digital Downloadsの製品のタイトルを正確に入力してください。item_idを使用する方が正確です。
- ライセンスおよびurlパラメータはオプションです。省略した場合、最新のバージョン情報が取得されますが、ダウンロードリンクは含まれません。
- Software Licensing 3.8以降では、リクエストにプラットフォームバージョンを含めることができます。プラットフォームバージョンがEasy Digital Downloadsで製品に設定された最小要件を満たしていない場合、レスポンスの
new_versionは新しいバージョン番号の代わりにfalseになります。php_versionとwp_versionはデフォルトでサポートされています。
レスポンスは次のようなJSONオブジェクトになります。
{
"new_version": "2.0",
"stable_version": "2.0",
"name": "Restrict Content Pro",
"slug": "restrict-content-pro",
"url": "https://edd.com/downloads/restrict-content-pro/?changelog=1",
"last_updated": "2017-01-03 11:59:46",
"homepage": "https://edd.com/downloads/restrict-content-pro/",
"package": "",
"download_link": "",
"sections": "a:2:{s:11:"description";s:793:"<p>Placerat porta in enim, urna cras, adipiscing augue dis lorem, pulvinar, natoque phasellus eu tincidunt, dictumst nunc ut dignissim turpis ac, pulvinar! Massa! Sed, enim, eu ac augue placerat scelerisque! Eu cursus, ridiculus cum nec lorem, natoque lorem dictumst amet! Nunc placerat dapibus enim dignissim, nunc mattis vel? Dolor nascetur placerat ridiculus augue massa porttitor turpis auctor, etiam et nisi pid ridiculus nisi duis ac. Turpis et non, dapibus diam! Placerat vel? Et, velit turpis mus sociis arcu, vel magna. Habitasse elementum elit cum nec est, eu, montes egestas est mattis lacus, turpis urna parturient, egestas, integer augue, penatibus natoque elit, rhoncus mid elementum, integer vut turpis. Et? Nisi pid. Nec, placerat ut tristique lorem a nunc velit nunc est.</p>n";s:9:"changelog";s:0:"";}",
"banners": "a:2:{s:4:"high";s:0:"";s:3:"low";s:0:"";}"
}
レスポンスに関する注意点:
- get_versionリクエストでライセンスキーが提供されない場合でも、バージョン情報は返されますが、packageおよびdownloadの値は空になります。逆に、ライセンスキーが提供されても、それがリクエストのitem_idまたはitem_nameに属さない場合、msg値として理由を示すエラーレスポンスが返されます。
- ライセンスの状態に関係なく、ファイルが存在する場合はdownload_linkが含まれます。ただし、ライセンスがアクティブでない限り、ダウンロードは機能しません。これにより、期限切れのライセンスを持つサイトでも、更新キャッシュがクリアされるのを待たずに更新を取得できます。
- sections プロパティは、完全な製品説明と変更履歴を含むシリアライズされた配列です。WordPressプラグインのReadMe.txt解析を使用している場合、ReadMeファイルを通じて提供される追加情報も含まれます。
ベータ版に関する情報を取得したい場合は、APIリクエストURLに&beta=1 を追加します。例:
https://YOURSITE.com/?edd_action=get_version&item_id=8&license=cc22c1ec86304b36883440e2e84cddff&url=https://licensedsite.com&beta=1
複数の製品のバージョンを一度に取得する
products引数を使用して、複数の製品のバージョンを1回の要求で取得します。この引数はアイテムの配列を受け入れます。各アイテムには、単一の要求で送信されるのと同じ引数を含める必要があります。
cURLを使用した例を次に示します。
curl -d edd_action=get_version -d products[0][item_id]=356 -d products[0][license]=59cc77ea94a2d867069a9d96142a35b8 -d products[0][url]="https://licensedsite.com" -d products[1][item_id]=46 -d products[1][license]=5cdd12a966c498fc6e423e261fe05303 -d products[1][url]="https://licensedsite.com" https://YOURSITE.com
WordPressのwp_remote_post()関数を使用した例を次に示します。
$response = wp_remote_post( 'https://YOURSITE.com', array( 'body' => array( 'edd_action' => 'get_version', 'products' => array( 'my-first-plugin' => array( 'item_id' => 356, 'license' => '59cc77ea94a2d867069a9d96142a35b8', 'url' => 'https://licensedsite.com' ), 'my-second-plugin' => array( 'item_id' => 46, 'license' => '5cdd12a966c498fc6e423e261fe05303', 'url' => 'https://licensedsite.com' ) ) ) ) );
応答は、提供された各製品の結果を含むJSONオブジェクトになります。要求で提供した製品キーは、応答で保持されます。例を次に示します。
{
"my-first-plugin": {
"new_version": "2.0",
"stable_version": "2.0",
"name": "My First Plugin",
"slug": "my-first-plugin",
"url": "https://edd.com/downloads/my-first-plugin/?changelog=1",
"last_updated": "2021-01-03 11:59:46",
"homepage": "https://edd.com/downloads/my-first-plugin/",
"package": "",
"download_link": "",
"sections": "a:2:{s:11:"description";s:793:"<p>Placerat porta in enim, urna cras, adipiscing augue dis lorem, pulvinar, natoque phasellus eu tincidunt, dictumst nunc ut dignissim turpis ac, pulvinar! Massa! Sed, enim, eu ac augue placerat scelerisque! Eu cursus, ridiculus cum nec lorem, natoque lorem dictumst amet! Nunc placerat dapibus enim dignissim, nunc mattis vel? Dolor nascetur placerat ridiculus augue massa porttitor turpis auctor, etiam et nisi pid ridiculus nisi duis ac. Turpis et non, dapibus diam! Placerat vel? Et, velit turpis mus sociis arcu, vel magna. Habitasse elementum elit cum nec est, eu, montes egestas est mattis lacus, turpis urna parturient, egestas, integer augue, penatibus natoque elit, rhoncus mid elementum, integer vut turpis. Et? Nisi pid. Nec, placerat ut tristique lorem a nunc velit nunc est.</p>n";s:9:"changelog";s:0:"";}",
"banners": "a:2:{s:4:"high";s:0:"";s:3:"low";s:0:"";}"
},
"my-second-plugin": {
"new_version": "1.3",
"stable_version": "1.3",
"name": "My Second Plugin",
"slug": "my-second-plugin",
"url": "https://edd.com/downloads/my-second-plugin/?changelog=1",
"last_updated": "2021-03-08 11:59:46",
"homepage": "https://edd.com/downloads/my-second-plugin/",
"package": "",
"download_link": "",
"sections": "a:2:{s:11:"description";s:793:"<p>Placerat porta in enim, urna cras, adipiscing augue dis lorem, pulvinar, natoque phasellus eu tincidunt, dictumst nunc ut dignissim turpis ac, pulvinar! Massa! Sed, enim, eu ac augue placerat scelerisque! Eu cursus, ridiculus cum nec lorem, natoque lorem dictumst amet! Nunc placerat dapibus enim dignissim, nunc mattis vel? Dolor nascetur placerat ridiculus augue massa porttitor turpis auctor, etiam et nisi pid ridiculus nisi duis ac. Turpis et non, dapibus diam! Placerat vel? Et, velit turpis mus sociis arcu, vel magna. Habitasse elementum elit cum nec est, eu, montes egestas est mattis lacus, turpis urna parturient, egestas, integer augue, penatibus natoque elit, rhoncus mid elementum, integer vut turpis. Et? Nisi pid. Nec, placerat ut tristique lorem a nunc velit nunc est.</p>n";s:9:"changelog";s:0:"";}",
"banners": "a:2:{s:4:"high";s:0:"";s:3:"low";s:0:"";}"
}
}
他の言語でのAPIへのアクセス
APIは単純なHTTP POSTリクエストを使用するため、ほぼすべての言語からアクセスできます。以下に例を示します。
- ソフトウェアライセンスAPI – cURLを使用した例
- ソフトウェアライセンスAPI – Perlを使用した例
- ソフトウェアライセンスAPI – Pythonを使用した例
- ソフトウェアライセンスAPI – Rubyを使用した例
- ソフトウェアライセンスAPI – C#を使用した例
- ソフトウェアライセンスAPI – JavaScriptを使用した例
- ソフトウェアライセンスAPI – jQueryを使用した例
FAQ / トラブルシューティング
カスタムフォーマットキーを作成できますか?
デフォルトのキーフォーマットは単純なmd5ハッシュです。
そのフォーマットを好きなように変更できます。
ライセンスが期限切れまたは無効になっている場合に、ソフトウェア、プラグイン、またはテーマへのアクセスを防止するにはどうすればよいですか?
このライセンスのステータスはソフトウェアに影響を与えず、キーのステータスを示すだけです。開発者がそのステータスを読み取って何かを行うかどうかは、開発者次第です。たとえば、キーが期限切れの場合、ソフトウェアは動作を停止するか、警告を表示することを選択できます。
これに関する唯一の例外は、EDDがダウンロードに関連付けられた期限切れまたは無効なキーを検出した場合、get_versionリンクを含むダウンロードリンクが機能しなくなることです。したがって、get_version応答を介したアップデートは機能しなくなります。
Software Licensingの実装でライセンスキーのアクティベーションに問題がある場合は、一般的な問題を解決するためのヒントをいくつかご紹介します。
セキュリティプラグインによってブロックされたリクエスト
WordPressのセキュリティプラグインには、ライセンスキーAPIリクエストを妨げる機能がよくあります。これらの機能は、アクティベーション(およびその他のAPIリクエスト)が予期しない応答を返す原因となり、アクティベーションルーチンが失敗します。
たとえば、セキュリティプラグインが干渉している場合、サーバーから次のような応答が得られる可能性があります。
[response] => Array ( [code] => 403 [message] => Forbidden )
iThemes Securityプラグインには、この問題を引き起こす可能性のある設定があります。その設定は
Filter Suspicious Query Strings in the URLと呼ばれています。
問題を解決するには、
Filter Suspicious Query Strings in the URL設定を無効にするだけです。iThemes Securityを使用していない場合は、名前は異なりますが、同様の設定になります。
特別な.htaccessルールによってブロックされたリクエスト
一部のサイトでは、特定のIPアドレスをブロックしたり、サイトに追加の保護を追加したりするために、.htaccessファイルに特別なルールを追加します。
特別な.htaccessルールが設定されていてライセンスキーがアクティブ化されていない場合は、ルールを削除してからライセンスキーをアクティブ化してみてください。ライセンスキーが正常にアクティブ化された場合は、ライセンスAPIルーチンが機能するようにルールを調整する必要があります。
メンテナンス中または近日公開プラグインによってブロックされたリクエスト
メンテナンス中または近日公開モードプラグインを使用している場合、メンテナンス中/近日公開モードプラグインがリクエストをブロックするため、ライセンスキーをアクティブ化できない可能性が高いです。問題を解決するには、メンテナンスモードまたは近日公開プラグインを無効にするだけです。アクティブのままにする必要がある場合は、ライセンスキーのアクティブ化プロセスをテストするために一時的に無効にしてから、プラグインを再度有効にしてください。
