[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fAfAm6SxPh1exPJ_WdI9d_OSXpiRE_P3moJZlLoeu808":3,"$fwE-uoEy7SU-WlMulRwPzf8hBzgRaQBiiAluocIbmU88":252,"$frSId2mlAG7NkL27kzHcR_Ihcbh-ih8DCyrrWUndWQMM":257},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":11,"num_ratings":11,"last_updated":13,"tested_up_to":14,"requires_at_least":15,"requires_php":16,"tags":17,"homepage":23,"download_link":24,"security_score":25,"vuln_count":11,"unpatched_count":11,"last_vuln_date":26,"fetched_at":27,"discovery_status":28,"vulnerabilities":29,"developer":30,"crawl_stats":26,"alternatives":37,"analysis":126,"fingerprints":206},"eacsoftwareregistry-software-taxonomy","{eac}SoftwareRegistry Software Taxonomy","2.0.12","Kevin Burkholder","https:\u002F\u002Fprofiles.wordpress.org\u002Fkevinburkholder\u002F","\u003Cp>\u003Cstrong>{eac}SoftwareRegistry Software Taxonomy\u003C\u002Fstrong> is an extension plugin to \u003Ca href=\"https:\u002F\u002Fswregistry.earthasylum.com\u002Fsoftware-registration-server\u002F\" rel=\"nofollow ugc\">{eac}SoftwareRegistry Software Registration Server\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Now with \u003Ca href=\"https:\u002F\u002Fswregistry.earthasylum.com\u002Fgithub-hosting\u002F\" rel=\"nofollow ugc\">plugin hosting on Github\u003C\u002Fa> to provide complete, automated plugin information and updates in WordPress.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>{eac}SoftwareRegistry Software Taxonomy\u003C\u002Fstrong> is a simple plugin extension that allows you to set and override {eac}SoftwareRegistry options for specific software products. It both defines the software product as well as the server parameters used when that product is registered via the software registration application program interface.\u003C\u002Fp>\n\u003Cp>When an API request is received by the registry server, the \u003Ccode>registry_product\u003C\u002Fcode> is matched to the software taxonomy slug. When a match is found, the parameters entered in the software taxonomy meta data are used to override the registry server default parameters.\u003C\u002Fp>\n\u003Ch4>Options set on a per-product basis by this extension\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\n\u003Cp>\u003Cem>Software Product\u003C\u002Fem>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cem>Registry Title\u003C\u002Fem>            – The Software Product display name\u003C\u002Fli>\n\u003Cli>\u003Cem>Registry Description\u003C\u002Fem>      – The Software Product Description\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cem>Registrar Contact\u003C\u002Fem> (override existing global options in {eac}SoftwareRegistry)\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cem>Registrar Name\u003C\u002Fem>            – Sending client email from this name\u003C\u002Fli>\n\u003Cli>\u003Cem>Registrar Telephone\u003C\u002Fem>       – Include telephone in client notifications\u003C\u002Fli>\n\u003Cli>\u003Cem>Registrar Support Email\u003C\u002Fem>   – Include support email address in client notifications\u003C\u002Fli>\n\u003Cli>\u003Cem>Registrar Web Address\u003C\u002Fem>     – Include web address in client notifications\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cem>Registration Defaults\u003C\u002Fem> (override existing global options in {eac}SoftwareRegistry)\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cem>Default Status\u003C\u002Fem>            – The default status to assign to newly created registrations\u003C\u002Fli>\n\u003Cli>\u003Cem>Default Initial Term\u003C\u002Fem>      – The initial term when creating a new registration (pending or trial)\u003C\u002Fli>\n\u003Cli>\u003Cem>Default Full Term\u003C\u002Fem>         – The full term when activating a registration\u003C\u002Fli>\n\u003Cli>\u003Cem>Default License\u003C\u002Fem>           – The default license level (L1-L5, LD) to assign to newly created registrations\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cem>Client Notification\u003C\u002Fem> (Customize the email message and API response notifications sent to the client)\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cem>Client Email Message\u003C\u002Fem>      – Message sent to client on creation, activation or update of registration.\u003C\u002Fli>\n\u003Cli>\u003Cem>Client API Message\u003C\u002Fem>        – Short message included with all API responses.\u003C\u002Fli>\n\u003Cli>\u003Cem>Client Success Notice\u003C\u002Fem>     – Success notification sent via API response.\u003C\u002Fli>\n\u003Cli>\u003Cem>Client Error Notice\u003C\u002Fem>       – Error notification sent via API response.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cem>License Limitations\u003C\u002Fem>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cem>see below\u003C\u002Fem>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cem>GitHub Hosting\u003C\u002Fem>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cem>WordPress Plugin Slug\u003C\u002Fem>     – The {directory}\u002F{plugin.php} slug of the WordPress plugin.\u003C\u002Fli>\n\u003Cli>\u003Cem>GitHub Repository\u003C\u002Fem>         – The {owner}\u002F{repository} id of the github repository.\u003C\u002Fli>\n\u003Cli>\u003Cem>Repository Source\u003C\u002Fem>         – Select which source to use from the repository (branch, release).\u003C\u002Fli>\n\u003Cli>\u003Cem>Tag Name\u003C\u002Fem>                  – (Optional) Specific release or branch tag name (or id).\u003C\u002Fli>\n\u003Cli>\u003Cem>Path to readme.txt\u003C\u002Fem>        – Pathname within the repository to the readme.txt file.\u003Cbr \u002F>\nIf blank, the json file will be generated from information available in the GitHub repository.\u003C\u002Fli>\n\u003Cli>\u003Cem>GitHub Access Token\u003C\u002Fem>       – Your GitHub personal access token, Increases the github rate limit and is required for private repositories.\u003C\u002Fli>\n\u003Cli>\u003Cem>Plugin URLs\u003C\u002Fem>               – Displays the URL(s) you will need for your plugin file and readme.txt file.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cem>License Limitations\u003C\u002Fem>\u003C\u002Fp>\n\u003Cp>Based on the license level assigned to a registration, we can limit the optional values in the registration API (count, variations, options, domains & sites). This allows APIs (possibly from multiple sources) to register any\u002Fall values for these options while filtering on the registration server, providing an effective (albeit rudimentary) licensing validation.\u003C\u002Fp>\n\u003Cp>For each license level ( L1=Lite, L2=Basic, L3=Standard, L4=Professional, L5=Enterprise, LD=Developer ) you may set a limit for count, variations, options, domains, and sites.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cem>count\u003C\u002Fem>        – Number of licenses (users\u002Fseats\u002Fdevices)\u003C\u002Fli>\n\u003Cli>\u003Cem>variations\u003C\u002Fem>   – List of custom name\u002Fvalue pairs\u003C\u002Fli>\n\u003Cli>\u003Cem>options\u003C\u002Fem>      – List of custom registry options\u003C\u002Fli>\n\u003Cli>\u003Cem>domains\u003C\u002Fem>      – List of valid\u002Fregistered domains\u003C\u002Fli>\n\u003Cli>\u003Cem>sites\u003C\u002Fem>        – List of valid\u002Fregistered sites\u002Furis\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>For count, the value passed through the API is limited to a maximum value.\u003Cbr \u002F>\nFor variations, options, domains, and sites, the arrays passed through the API are sliced to a maximum number of elements.\u003C\u002Fp>\n\u003Ch4>GitHub Hosting\u003C\u002Fh4>\n\u003Cblockquote>\n\u003Cp>* GitHub hosting requires installation of the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Feacreadme\u002F\" rel=\"ugc\">{eac}Readme plugin\u003C\u002Fa> in order to process readme.txt files.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Wether you’re using software registration or not, you can use Github Hosting to manage your software releases and provide automated updates for your WordPress plugins.\u003C\u002Fp>\n\u003Cp>New in version 2.0, these options allow for the “self-hosting” of WordPress plugins on GitHub in a way similar to and meeting the requirements of the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Feacsoftwareregistry-software-taxonomy\u002F\" rel=\"ugc\">WordPress plugin repository\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>More details may be found in the included \u003Ca href=\"https:\u002F\u002Fswregistry.earthasylum.com\u002Fgithub-hosting\u002F\" rel=\"nofollow ugc\">readme_github.md\u003C\u002Fa> file.\u003C\u002Fp>\n\u003Ch4>See Also\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fswregistry.earthasylum.com\u002Fsoftware-registration-server\u002F\" rel=\"nofollow ugc\">{eac}SoftwareRegistry – Software Registration Server\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fswregistry.earthasylum.com\u002Fsoftware-registry-sdk\u002F\" rel=\"nofollow ugc\">Implementing the Software Registry SDK\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Copyright\u003C\u002Fh3>\n\u003Ch4>Copyright © 2019-2025, EarthAsylum Consulting, distributed under the terms of the GNU GPL.\u003C\u002Fh4>\n\u003Cp>This program is free software: you can redistribute it and\u002For modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\u003C\u002Fp>\n\u003Cp>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\u003C\u002Fp>\n\u003Cp>You should receive a copy of the GNU General Public License along with this program. If not, see \u003Ca href=\"https:\u002F\u002Fwww.gnu.org\u002Flicenses\u002F\" rel=\"nofollow ugc\">https:\u002F\u002Fwww.gnu.org\u002Flicenses\u002F\u003C\u002Fa>.\u003C\u002Fp>\n","Software Product Taxonomy - Customize {eac}SoftwareRegistry with options, licensing, client messaging, and Github hosting for each software product.",0,2285,"2025-07-21T21:40:00.000Z","6.8.5","5.8","7.4",[18,19,20,21,22],"github-hosting","software-license","software-product","software-registration","software-registry","https:\u002F\u002Fswregistry.earthasylum.com\u002Fsoftware-taxonomy\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feacsoftwareregistry-software-taxonomy.2.0.12.zip",100,null,"2026-04-16T10:56:18.058Z","no_bundle",[],{"slug":31,"display_name":7,"profile_url":8,"plugin_count":32,"total_installs":33,"avg_security_score":25,"avg_patch_time_days":34,"trust_score":35,"computed_at":36},"kevinburkholder",11,60,30,94,"2026-05-20T01:13:33.502Z",[38,52,65,89,106],{"slug":39,"name":40,"version":41,"author":7,"author_profile":8,"description":42,"short_description":43,"active_installs":11,"downloaded":44,"rating":11,"num_ratings":11,"last_updated":45,"tested_up_to":14,"requires_at_least":15,"requires_php":16,"tags":46,"homepage":49,"download_link":50,"security_score":25,"vuln_count":11,"unpatched_count":11,"last_vuln_date":26,"fetched_at":51},"eacsoftwareregistry-distribution-sdk","{eac}SoftwareRegistry Distribution SDK","1.1.3","\u003Cp>\u003Cstrong>{eac}SoftwareRegistry Distribution SDK\u003C\u002Fstrong> is an extension plugin to \u003Ca href=\"https:\u002F\u002Fswregistry.earthasylum.com\u002Fsoftware-registration-server\u002F\" rel=\"nofollow ugc\">{eac}SoftwareRegistry Software Registration Server\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>The Software Registry Distribution SDK is used to generate a custom PHP package that you can include in your software project to register your product with your registration server and manage that registration.\u003C\u002Fp>\n\u003Cp>\u003Cem>A custom version of this document is included in the generated SDK package.\u003C\u002Fem>\u003C\u002Fp>\n\u003Cp>The SDK provides most of the PHP code you will need to implement the Application Program Interface with your Software Registration Server.\u003C\u002Fp>\n\u003Cp>Included with the Software Registration SDK package…\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>(your_productid)_registration.(wordpress_or_filebased).trait.php\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>(your_productid)_registration.includes.php\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>(your_productid)_registration.interface.php\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>(your_productid)_registration.interface.trait.php\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>(your_productid)_registration.refresh.php\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>(your_productid)_registration.readme.md\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Software Registry Implementation\u003C\u002Fh4>\n\u003Cp>After extracting the \u003Ccode>(your_productid)_registration.zip\u003C\u002Fcode> file, move the \u003Ccode>(your_productid)_registration\u003C\u002Fcode> folder to your project.\u003C\u002Fp>\n\u003Cp>In your project or class file, include \u003Ccode>(your_productid)_registration\u002F(your_productid)_registration.includes.php\u003C\u002Fcode> to load the required interface and traits.\u003C\u002Fp>\n\u003Cp>Your class file must then:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>implement \u003Ccode>\\(your_namespace)\\Interfaces\\(your_productid)_registration\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>use \u003Ccode>\\(your_namespace)\\Traits\\(your_productid)_registration_(wordpress_or_filebased)\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>include \"(your_productid)_registration\u002F(your_productid)_registration.includes.php\";\n\nclass \u003Cyour_classname> implements \\(your_namespace)\\Interfaces\\(your_productid)_registration\n{\n    use \\(your_namespace)\\Traits\\(your_productid)_registration_(wordpress_or_filebased);\n        ...\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>(your_productid)_registration.interface.php will have your product and registration server API constants.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>const SOFTWARE_REGISTRY_PRODUCTID   = '{your_software_registry_productid}';\nconst SOFTWARE_REGISTRY_HOST_URL    = '{your_software_registry_host_url}';\nconst SOFTWARE_REGISTRY_CREATE_KEY  = '{your_software_registry_create_key}';\nconst SOFTWARE_REGISTRY_UPDATE_KEY  = '{your_software_registry_update_key}';\nconst SOFTWARE_REGISTRY_READ_KEY    = '{your_software_registry_read_key}';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Using The API\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>API Parameters\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>API parameters are passed as an array:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$apiParams =\n[\n    'registry_key'          => 'unique ID',                     \u002F\u002F * registration key (assigned by registry server)\n    'registry_name'         => 'Firstname Lastname',            \u002F\u002F   registrant's full name\n    'registry_email'        => 'email@domain.com',              \u002F\u002F * registrant's email address\n    'registry_company'      => 'Comapny\u002FOrganization Name',     \u002F\u002F   registrant's company name\n    'registry_address'      => 'Street\\n City St Zip',          \u002F\u002F   registrant's full address (textarea)\n    'registry_phone'        => 'nnnnnnnnnn',                    \u002F\u002F   registrant's phone\n    'registry_product'      => 'productId',                     \u002F\u002F * your product name\u002Fid ((your_productid))\n    'registry_title'        => 'Product Title',                 \u002F\u002F   your product title\n    'registry_description'  => 'Product Description',           \u002F\u002F   your product description\n    'registry_version'      => 'M.m.p',                         \u002F\u002F   your product version\n    'registry_license'      => 'Lx',                            \u002F\u002F   'L1'(Lite), 'L2'(Basic), 'L3'(Standard), 'L4'(Professional), 'L5'(Enterprise), 'LD'(Developer), 'LU'(Unlimited)\n    'registry_count'        => int,                             \u002F\u002F   Number of licenses (users\u002Fseats\u002Fdevices)\n    'registry_variations'   => array('name'=>'value',...),      \u002F\u002F   array of name\u002Fvalue pairs\n    'registry_options'      => array('value',...),              \u002F\u002F   array of registry options\n    'registry_domains'      => array('domain',...),             \u002F\u002F   array of valid\u002Fregistered domains\n    'registry_sites'        => array('url',...),                \u002F\u002F   array of valid\u002Fregistered sites\u002Furis\n    'registry_transid'      => '',                              \u002F\u002F   external transaction id\n    'registry_timezone'     => '',                              \u002F\u002F   standard timezone string (client timezone)\n    'registry_locale'       => '',                              \u002F\u002F   standard locale\u002Flanguage code\n];\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>* \u003Cem>Required values (registry_key not required when creating a new registration).\u003C\u002Fem>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>If setting registry_transid, the recommended (not required) format is \u003Ccode>{id}|{source}|{suffix}\u003C\u002Fcode> where {id} is the transaction id, {source} indicates the source of the transaction, and {suffix} may be used as needed.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Any additional fields passed wil be saved as custom fields.\u003C\u002Fp>\n\u003Cp>Although typically set by the Software Registry server, with the proper option setting, the API \u003Cem>may\u003C\u002Fem> override:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[\n    'registry_status'       => 'status',                        \u002F\u002F 'pending', 'trial', 'active', 'inactive', 'expired', 'terminated'\n    'registry_effective'    => 'DD-MMM-YYYY',                   \u002F\u002F Effective date\n    'registry_expires'      => 'DD-MMM-YYYY',                   \u002F\u002F Expiration date or term ('30 days', '1 year',... added to effective date)\n];\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Payment information may be posted with:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[\n    'registry_paydue'       => float,                           \u002F\u002F amount to be paid\u002Fbilled,\n    'registry_payamount'    => float,                           \u002F\u002F amount paid,\n    'registry_paydate'      => 'DD-MMM-YYYY',                   \u002F\u002F date paid\n    'registry_payid'        => 'payment id'                     \u002F\u002F transaction id\u002Fcheck #, etc.\n    'registry_nextpay'      => 'DD-MMM-YYYY',                   \u002F\u002F next payment\u002Frenewal date\n];\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>API Requests\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Create\u002Frequest a new registration…\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$response = $this->registryApiRequest('create',$apiParams);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Activate an existing registration…\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$response = $this->registryApiRequest('activate',['registry_key' => '\u003CregistrationKeyValue>']);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Activate and Update an existing registration…\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$response = $this->registryApiRequest('activate',$apiParams);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Deactivate an existing registration…\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$response = $this->registryApiRequest('deactivate',['registry_key' => '\u003CregistrationKeyValue>']);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Verify or Refresh an existing registration…\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$response = $this->registryApiRequest('verify',['registry_key' => '\u003CregistrationKeyValue>']);\n$response = $this->registryApiRequest('refresh',$apiParams);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Revise an existing registration…\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$response = $this->registryApiRequest('revise',$apiParams);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>API Response\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>The API response is a standard object. status->code is an http status, 200 indicating success.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>status      ->\n(\n    code                  -> 200,             \u002F\u002F HTTP status code\n    message               -> '(action) ok'    \u002F\u002F (action) = 'create', 'activate', 'deactivate', 'verify', 'revise'\n),\nregistration ->\n(\n    registry_key          -> string           \u002F\u002F UUID,\n    registry_status       -> string,          \u002F\u002F 'pending', 'trial', 'active', 'inactive', 'expired', 'terminated', 'invalid'\n    registry_effective    -> string,          \u002F\u002F DD-MMM-YYYY effective date\n    registry_expires      -> string,          \u002F\u002F DD-MMM-YYYY expiration date\n    registry_name         -> string,\n    registry_email        -> string,\n    registry_company      -> string,\n    registry_address      -> string,\n    registry_phone        -> string,\n    registry_product      -> string,\n    registry_title        -> string,\n    registry_description  -> string,\n    registry_version      -> string,\n    registry_license      -> string,\n    registry_count        -> int,\n    registry_variations   -> array,\n    registry_options      -> array,\n    registry_domains      -> array,\n    registry_sites        -> array,\n    registry_transid      -> string,\n    registry_timezone     -> string,\n    registry_locale       -> string,\n    registry_valid        -> bool,\n),\nregistrar ->\n(\n    contact               -> object(\n        name              -> string           \u002F\u002F Registrar Name\n        email             -> string           \u002F\u002F Registrar Support Email\n        phone             -> string           \u002F\u002F Registrar Telephone\n        web               -> string           \u002F\u002F Registrar Web Address\n    ),\n    timezone              -> string,          \u002F\u002F standard timezone string\n    locale                -> string,          \u002F\u002F WordPress locale\n    cacheTime             -> int,             \u002F\u002F in seconds, time to cache the registration response (Default Cache Time)\n    refreshInterval       -> int,             \u002F\u002F in seconds, time before refreshing the registration (Default Refresh Time)\n    refreshSchedule       -> string,          \u002F\u002F 'hourly', 'twicedaily', 'daily', 'twiceweekly', 'weekly',  'twicemonthly', 'monthly' - corresponding to refreshInterval\n    options               -> array(           \u002F\u002F from settings page, registrar_options (Allow API to...)\n        'allow_set_key',\n        'allow_set_status',\n        'allow_set_effective',\n        'allow_set_expiration',\n        'allow_activation_update'\n    ),\n    licenseCodes          -> object(          \u002F\u002F may be changed by filter on registration server\n        L1                -> 'Lite'\n        L2                -> 'Basic'\n        L3                -> 'Standard'\n        L4                -> 'Professional'\n        L5                -> 'Enterprise'\n        LD                -> 'Developer'\n        LU                -> 'Unlimited'\n    ),\n    notices               -> object(\n        info              -> string,          \u002F\u002F information message text\n        warning           -> string,          \u002F\u002F warning message text\n        error             -> string,          \u002F\u002F error message text\n        success           -> string,          \u002F\u002F success message text\n    ),\n    message               -> string,          \u002F\u002F html message\n),\nregistryHtml              -> string,          \u002F\u002F html (table) of human-readable registration values\nsupplemental              -> mixed,           \u002F\u002F supplemental data\u002Fhtml assigned via filters (developer's discretion).\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>On a successful response (status->code = 200), the SDK will automatically cache the registration data and schedule the next refresh event (you do not have to do this).\u003C\u002Fp>\n\u003Cp>\u003Cem>notices\u003C\u002Fem> may be set (according to severity) to indicate an expiration or pending expiration and should be displayed to the user. Typically, only one notice will be set but they can be set via the \u003Ccode>eacSoftwareRegistry_api_registration_notices\u003C\u002Fcode> filter.\u003C\u002Fp>\n\u003Cp>\u003Cem>message\u003C\u002Fem> is set via the \u003Ccode>eacSoftwareRegistry_api_registration_message\u003C\u002Fcode> filter.\u003C\u002Fp>\n\u003Cp>\u003Cem>supplemental\u003C\u002Fem> is set via the \u003Ccode>eacSoftwareRegistry_api_registration_supplemental\u003C\u002Fcode> filter.\u003C\u002Fp>\n\u003Cp>On an error response, an additional element is included:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>error      ->\n(\n    code                  -> 'error_code',\n    message               -> 'error message'\n),\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>error->message may be more informative than status->message.\u003Cbr \u002F>\nErrors may be handled with something like:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>if ($this->is_api_error($response))\n{\n    echo \"\u003Cdiv class='notice notice-error'>\u003Ch4>Error \".$response->error->code.\" : \".$response->error->message.\"\u003C\u002Fh4>\u003C\u002Fdiv>\";\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Methods, Hooks, and Callbacks\u003C\u002Fh4>\n\u003Cp>Useful methods built into the SDK…\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$this->isValidRegistration();\n    \u002F\u002F Returns boolean\n    if ( $this->isValidRegistration() ) {...}\n\n$this->getRegistrationKey();\n    \u002F\u002F Returns the current registration key\n    $registrationKey = $this->getRegistrationKey();\n\n$this->getCurrentRegistration();\n    \u002F\u002F Returns the current registration object (above response object)\n    $currentRegistration = $this->getCurrentRegistration();\n\n$this->isRegistryValue($keyName);\n    \u002F\u002F Returns the value of a specific registry key\n    $regStatus = $this->isRegistryValue( 'status ');\n\n$this->isRegistryValue($keyName, $value, $test);\n    \u002F\u002F Returns boolean comparison of the value of a registry key ($test is '=|eq' (default), '\u003C|lt', '>|gt', '\u003C=|le', '>=|ge')\n    if ( $this->isRegistryValue('license', 'L3', '>=') ) {...}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Several hooks are available to customize or react to registration events.\u003Cbr \u002F>\nIn WordPresss, there are several actions and filters, for file based projects there are corresponding callback methods…\u003C\u002Fp>\n\u003Cpre>\u003Ccode> filter\u002Fcallback: (your_productid)_api_remote_request( $request, $endpoint )\n    @param  array $request ['method'=>, 'timeout'=>, 'redirection'=>, 'sslverify'=>, 'headers'=>, 'body'=>]\n    @param  string $endpoint create, activate, deactivate, verify, refresh, revise\n    @return array request body\n\n action\u002Fcallback: (your_productid)_api_remote_response( $body, $request, $endpoint )\n    @param  array $body response body\n    @param  array $request ['method'=>, 'timeout'=>, 'redirection'=>, 'sslverify'=>, 'headers'=>, 'body'=>]\n    @param  string $endpoint create, activate, deactivate, verify, refresh, revise\n\n action\u002Fcallback: (your_productid)_api_remote_$endpoint( $body, $request, $endpoint )\n    @param  array $body response body\n    @param  array $request ['method'=>, 'timeout'=>, 'redirection'=>, 'sslverify'=>, 'headers'=>, 'body'=>]\n    @param  string $endpoint create, activate, deactivate, verify, refresh, revise\n\n action\u002Fcallback: (your_productid)_api_remote_error( $error, $request, $endpoint )\n    @param  object $error {status:{}, error: {}}\n    @param  array $request ['method'=>, 'timeout'=>, 'redirection'=>, 'sslverify'=>, 'headers'=>, 'body'=>]\n    @param  string $endpoint create, activate, deactivate, verify, refresh, revise\n\n action\u002Fcallback: (your_productid)_update_registration($registration)\n    @param  array $registration registration object\n\n action\u002Fcallback: (your_productid)_purge_registration()\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>What You Need To Do\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>For WordPress Projects\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>In your class constructor\u002Finitialization, add an action to fulfill the registration refresh scheduled by the \u003Ccode>scheduleRegistryRefresh()\u003C\u002Fcode> method in \u003Ccode>(your_productid).wordpress.trait.php\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\\add_action( '(your_productid)_registry_refresh', array($this, 'refreshRegistration') );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>You can add this and other hooks with:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$this->addSoftwareRegistryHooks();\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The \u003Ccode>addSoftwareRegistryHooks()\u003C\u002Fcode> method adds:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\\add_action( '(your_productid)_registry_refresh',     array($this, 'refreshRegistration') );\n\\add_filter( '(your_productid)_is_registered',        array($this, 'isValidRegistration') );\n\\add_filter( '(your_productid)_registration_key',     array($this, 'getRegistrationKey') );\n\\add_filter( '(your_productid)_registration',         array($this, 'getCurrentRegistration') );\n\\add_filter( '(your_productid)_registry_value',       array($this, 'isRegistryValue'), 10, 4 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>include \"(your_productid)_registration\u002F(your_productid)_registration.includes.php\";\n\nclass \u003Cyour_classname> implements \\(your_namespace)\\Interfaces\\(your_productid)_registration\n{\n    use \\(your_namespace)\\Traits\\(your_productid)_registration_wordpress;\n        ...\n    public function __construct()\n    {\n        $this->addSoftwareRegistryHooks();\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Note:\u003C\u002Fp>\n\u003Cp>If your primary plugin file name is not the same as the product id, edit your \u003Ccode>(your_productid).interface.tpl\u003C\u002Fcode> file and change the \u003Ccode>SOFTWARE_REGISTRY_FILENAME\u003C\u002Fcode> constant.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>    const SOFTWARE_REGISTRY_FILENAME    = 'myPluginName';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>For Other File Based Projects\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>The \u003Ccode>scheduleRegistryRefresh()\u003C\u002Fcode> method in \u003Ccode>(your_productid)_registration.filebased.trait.php\u003C\u002Fcode> is called to schedule the next registration refresh. This method can be modified to schedule a cron event to execute the refresh at a future time. The scheduled event may run \u003Ccode>(your_productid)_registration.refresh.php \u003CregistrationKeyValue>\u003C\u002Fcode> from the command line to refresh the registration.\u003C\u002Fp>\n\u003Cp>When left as is, the \u003Ccode>checkRegistryRefreshEvent()\u003C\u002Fcode> method uses the key file to check for a needed registration refresh.\u003C\u002Fp>\n\u003Cp>In your class constructor or destructor add:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$this->checkRegistryRefreshEvent();\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>to trigger the refresh check.\u003C\u002Fp>\n\u003Cp>Example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>include \"(your_productid)_registration\u002F(your_productid)_registration.includes.php\";\n\nclass \u003Cyour_classname> implements \\(your_namespace)\\Interfaces\\(your_productid)_registration\n{\n    use \\(your_namespace)\\Traits\\(your_productid)_registration_filebased;\n        ...\n    public function __destruct()\n    {\n        \u002F* if necessary, set HOME\u002FUSERPROFILE and\u002For TMP\u002FTMPDIR\u002FTEMP directories *\u002F\n        \u002F\u002F putenv('HOME={your home directory}');   \u002F\u002F where the registration key is stored, otherwise use $_SERVER['DOCUMENT_ROOT']\n        \u002F\u002F putenv('TMP={your temp directory}');    \u002F\u002F where the registration data is stored, otherwise use sys_get_temp_dir()\n        $this->checkRegistryRefreshEvent();\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>User Interface\u003C\u002Fh4>\n\u003Cp>Of course, the user interface is up to you, the developer, but you may look at (and maybe use) the registration UI trait included  with \u003Cem>{eac}Doojigger\u003C\u002Fem> and used by \u003Cem>{eac}SoftwareRegistry\u003C\u002Fem> as an example.\u003C\u002Fp>\n\u003Cp>see:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>…\u002FTraits\u002FswRegistrationUI.trait.php in the eacDoojigger folder.\u003C\u002Fli>\n\u003Cli>…\u002FExtensions\u002Fclass.eacSoftwareRegistry_registration.extension.php in the eacSoftwareRegistry folder.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>See Also\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fswregistry.earthasylum.com\u002Fsoftware-registration-server\u002F\" rel=\"nofollow ugc\">{eac}SoftwareRegistry – Software Registration Server\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fswregistry.earthasylum.com\u002Fsoftware-registry-hooks\u002F\" rel=\"nofollow ugc\">{eac}SoftwareRegistry Custom Hooks\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Copyright\u003C\u002Fh3>\n\u003Ch4>Copyright © 2019-2025, EarthAsylum Consulting, distributed under the terms of the GNU GPL.\u003C\u002Fh4>\n\u003Cp>This program is free software: you can redistribute it and\u002For modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\u003C\u002Fp>\n\u003Cp>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\u003C\u002Fp>\n\u003Cp>You should receive a copy of the GNU General Public License along with this program. If not, see \u003Ca href=\"https:\u002F\u002Fwww.gnu.org\u002Flicenses\u002F\" rel=\"nofollow ugc\">https:\u002F\u002Fwww.gnu.org\u002Flicenses\u002F\u003C\u002Fa>.\u003C\u002Fp>\n","{eac}SoftwareRegistry Distribution SDK for the Software Registration Server - Implementing the Software Registry SDK Package.",2421,"2025-07-25T15:37:00.000Z",[47,48,19,21,22],"license-manager","registration-api","https:\u002F\u002Fswregistry.earthasylum.com\u002Fsoftware-registry-sdk\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feacsoftwareregistry-distribution-sdk.1.1.3.zip","2026-04-06T09:54:40.288Z",{"slug":53,"name":54,"version":55,"author":7,"author_profile":8,"description":56,"short_description":57,"active_installs":11,"downloaded":58,"rating":11,"num_ratings":11,"last_updated":59,"tested_up_to":14,"requires_at_least":15,"requires_php":16,"tags":60,"homepage":63,"download_link":64,"security_score":25,"vuln_count":11,"unpatched_count":11,"last_vuln_date":26,"fetched_at":27},"eacsoftwareregistry-webhook-endpoints","{eac}SoftwareRegistry WooCommerce Webhook Endpoints","1.1.5","\u003Cp>\u003Cstrong>{eac}SoftwareRegistry Webhook Endpoints\u003C\u002Fstrong> is an extension plugin to \u003Ca href=\"https:\u002F\u002Fswregistry.earthasylum.com\u002Fsoftware-registration-server\u002F\" rel=\"nofollow ugc\">{eac}SoftwareRegistry Software Registration Server\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>WooCommerce Webhooks are used to create or update a software registration in {eac}SoftwareRegistry when a WooCommerce order is created or updated.\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>A Webhook is an event notification sent to a URL of your choice. Users can configure them to trigger events on one site to invoke behavior on another.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>The Software Registration Webhooks use the same internal methods as the Software Registry API (see \u003Ca href=\"https:\u002F\u002Fswregistry.earthasylum.com\u002Fsoftware-registry-sdk\u002F\" rel=\"nofollow ugc\">Implementing the Software Registry SDK\u003C\u002Fa>).\u003C\u002Fp>\n\u003Cp>We use webhooks so that you may sell your software on a different site then where you register your software. When an order is created or updated on your WooCommerce site, that order information is sent to your registration server via a webhook so that the registration server may create or update the registration.\u003C\u002Fp>\n\u003Cp>WooCommerce Webhooks are created by going to: \u003Cstrong>WooCommerce \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Advanced \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Webhooks\u003C\u002Fstrong> from the dashboard of your WooCommerce shop site.\u003C\u002Fp>\n\u003Cp>To get to the settings for this extension, go to \u003Cstrong>Software Registry \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Settings \u003Cspan aria-hidden=\"true\" class=\"wp-exclude-emoji\">→\u003C\u002Fspan> Woocommerce\u003C\u002Fstrong> from the dashboard of your software registration server.\u003C\u002Fp>\n\u003Cp>On your WooCommerce site, use the \u003Cstrong>Webhook Secret\u003C\u002Fstrong> and \u003Cstrong>Order Delivery URL\u003C\u002Fstrong> defined by this extension when creating your webhooks. The \u003Cstrong>Webhook Secret\u003C\u002Fstrong> is used to authenticate the webhook and the \u003Cstrong>Delivery URL\u003C\u002Fstrong> is the webhook end-point (your registration server).\u003C\u002Fp>\n\u003Cp>You should create a WooCommerce Webhook for \u003Cstrong>Order created\u003C\u002Fstrong> and \u003Cstrong>Order updated\u003C\u002Fstrong>, and you may optionally create webhooks for \u003Cstrong>Order deleted\u003C\u002Fstrong> and \u003Cstrong>Order restored\u003C\u002Fstrong> if your want registrations to be terminated or reactivated when an order is moved to the trash or restored.\u003C\u002Fp>\n\u003Cp>* See \u003Ca href=\"#subscriptions\" rel=\"nofollow ugc\">Subscriptions\u003C\u002Fa> below.\u003C\u002Fp>\n\u003Cp>On your registration server, select the appropriate \u003Cstrong>Webhook Endpoints\u003C\u002Fstrong> in this extension based on the WooCommerce webhooks created.\u003C\u002Fp>\n\u003Ch4>Product Variations and Registry Values\u003C\u002Fh4>\n\u003Cp>On your shop site, you may create a variable product with a product attribute (‘Used for variations’ checked), like:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>registry_license    ->  'Lite' | 'Basic' | 'Standard' | 'Professional' | 'Enterprise' | 'Developer'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>— and\u002For —\u003C\u002Fp>\n\u003Cpre>\u003Ccode>registry_count      ->  '1-User' | '10-Users' | '50-Users' | '100-Users' | 'Unlimited Users'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Then configure (or remove) each of the variations accordingly.\u003Cbr \u002F>\nThis produces a product variation for each license level (or user count) and passes \u003Ccode>registry_license\u003C\u002Fcode> (or \u003Ccode>registry_count\u003C\u002Fcode>) through the webhook overriding the default registration server settings.\u003C\u002Fp>\n\u003Cp>As well, you may create an attribute and variation like:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>registry_expires    ->  '14 Days' | '30 Days' | '6 Months' | '1 Year'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>To override the default registration term.\u003C\u002Fp>\n\u003Cp>These variations may be combined to create a large number of variable products, each passing the given registry values through the webhooks. For example, one variable product may have a variation combination of \u003Ccode>'Basic', '10-users', '6 Months'\u003C\u002Fcode>\u003C\u002Fp>\n\u003Ch4>Item Mapping\u003C\u002Fh4>\n\u003Cp>On your registration server, you may specify the items (SKUs) that are to be registered in the \u003Cstrong>Registration Item Mapping\u003C\u002Fstrong> as:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>item_sku=package_name or `item_sku=package_name1,package_name2` (to create a bundle).\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Even if the item sku is the product to be registered, enter \u003Ccode>item_sku=item_sku\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Items that don’t match these SKU(s) will be ignored.\u003C\u002Fp>\n\u003Cp>Since WooCommerce won’t allow duplicate SKUs, regular expressions may be used for “item_sku” matching. For example: \u003Ccode>MyItemSku*=MyPackage\u003C\u002Fcode> Will match any SKU in the order beginning with “MyItemSku” (e.g. “MyItemSku_1”, “MyItemSku_2”) and map (register) it as “MyPackage”.\u003C\u002Fp>\n\u003Ch4>Subscriptions\u003C\u002Fh4>\n\u003Cp>By adding \u003Ca href=\"https:\u002F\u002Fswregistry.earthasylum.com\u002Fsubscriptions-for-woocommerce\u002F\" rel=\"nofollow ugc\">{eac}SoftwareRegistry Subscriptions for WooCommerce\u003C\u002Fa> to your WooCommerce store site, subscription orders and updates (when using \u003Ca href=\"https:\u002F\u002Fwoocommerce.com\u002Fdocument\u002Fsubscriptions\u002F\" rel=\"nofollow ugc\">Woo Subscriptions\u003C\u002Fa> or \u003Ca href=\"https:\u002F\u002Fcodecanyon.net\u002Fitem\u002Fsumo-subscriptions-woocommerce-subscription-system\u002F16486054\" rel=\"nofollow ugc\">SUMO Subscription\u003C\u002Fa>), as well as product meta data, may also be passed to your registration server.\u003C\u002Fp>\n\u003Cp>\u003Cem>{eac}SoftwareRegistry Subscriptions for WooCommerce\u003C\u002Fem> is a plugin, installed on your WooCommerce site, that adds a custom Webhook topic for subscription updates to the WooCommerrce webhooks, and adds subscription and product data to WooCommerce order webhooks.\u003C\u002Fp>\n\u003Cp>On your WooCommerce site, add a new Webhook using \u003Cstrong>{eac}SoftwareRegistry WC Subscription\u003C\u002Fstrong> or \u003Cstrong>{eac}SoftwareRegistry Sumo Subscription\u003C\u002Fstrong> for the topic; the same \u003Cstrong>Webhook Secret\u003C\u002Fstrong> used for the order webhooks; and the \u003Cstrong>Subscription Delivery URL\u003C\u002Fstrong> rather than the \u003Cstrong>Order Delivery URL\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>With this plugin enabled, not only can you update registrations by order updates, but also by subscription updates, including renewals, expirations, and cancelations, making it easy to keep your registrations in sync with your subscriptions.\u003C\u002Fp>\n\u003Cp>In addition, this plugin will add product meta data to the orders and subscriptions passed through the webhooks so that you may define registry values as custom fields at the product level.\u003C\u002Fp>\n\u003Cp>For example, rather than needing to create variable products, you can simply add custom fields:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>registry_license    ->  'Basic'\nregistry_count      ->  '10-Users'\nregistry_expires    ->  '6 Months'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>And, rather than relying on the \u003Ccode>item_sku\u003C\u002Fcode> list in the \u003Cem>Registration Item Mapping\u003C\u002Fem>, you can add a custom field…\u003C\u002Fp>\n\u003Cpre>\u003Ccode>registry_product    ->  'package_name'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>…that will register or update any subscription for the given item as \u003Ccode>package_name\u003C\u002Fcode> regardless of the item’s SKU or the \u003Cem>Registration Item Mapping\u003C\u002Fem> list.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>If all of your orders are subscriptions…\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>With this plugin enabled on your shop site, there’s a high probability you don’t need to use the “order” webhooks. Your subscriptions will be updated more efficiently from the shop subscription records.\u003C\u002Fp>\n\u003Cp>When a new (or renewal) subscription order is created, it will trigger the “Order created”, “Order updated” (payment processed) and the “Subscription updated” webhooks when all you need is the subscription to create or update the registration.\u003C\u002Fp>\n\u003Cp>On the other hand, since this plugin adds an array of subscription records to the orders passed through the webhooks, you may prefer to use only the order webhooks and not the subscription webhook.\u003C\u002Fp>\n\u003Ch4>Return Value\u003C\u002Fh4>\n\u003Cp>As of version 1.1, this plugin now returns a result array which can be retrieved via the \u003Ccode>woocommerce_webhook_delivery\u003C\u002Fcode> action:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>array(\n    'action'    => string       \u002F\u002F the webhook action,\n    'resource'  => int          \u002F\u002F the webhook resource id (order\u002Fsubscription id),\n    'status'    => string       \u002F\u002F 'success' | 'ignored' | 'error',\n    'result'    => array|string \u002F\u002F success: array of [ sku => [status => registry_key | error_message] ]\n                                \u002F\u002F ignored|error: string error_message\n)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cem>Note that ‘success’ means the webhook was succesfull, ‘result’ could contain an error status\u002Fmessage from {eac}SoftwareRegistry.\u003C\u002Fem>\u003C\u002Fp>\n\u003Cp>Examples:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>array(\n     'action' => 'order.created',\n     'resource' => 2715,\n     'status' => 'ignored',\n     'result' => 'order with subscription',\n),\n\narray(\n    'action' => 'action.wc_eacswregistry_sumosub',\n    'resource' => 2715,\n    'status' => 'success',\n    'result' => array (\n        0 => array(\n            'eacDoojigger' =>  array(\n                '200' => 'bad53cd3-f397-4f47-9d28-xxxxxxxxxxxx',\n            ),\n        ),\n        1 => array(\n            'eacSoftwareRegistry' => array(\n                '406' => 'registration with this email and product already exists',\n            ),\n        ),\n    ),\n),\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>See Also\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fswregistry.earthasylum.com\u002Fsoftware-registration-server\u002F\" rel=\"nofollow ugc\">{eac}SoftwareRegistry – Software Registration Server\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fswregistry.earthasylum.com\u002Fsubscriptions-for-woocommerce\u002F\" rel=\"nofollow ugc\">{eac}SoftwareRegistry Subscriptions for WooCommerce\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fswregistry.earthasylum.com\u002Fsoftware-registry-sdk\u002F\" rel=\"nofollow ugc\">Implementing the Software Registry SDK\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Copyright\u003C\u002Fh3>\n\u003Ch4>Copyright © 2019-2025, EarthAsylum Consulting, distributed under the terms of the GNU GPL.\u003C\u002Fh4>\n\u003Cp>This program is free software: you can redistribute it and\u002For modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\u003C\u002Fp>\n\u003Cp>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\u003C\u002Fp>\n\u003Cp>You should receive a copy of the GNU General Public License along with this program. If not, see \u003Ca href=\"https:\u002F\u002Fwww.gnu.org\u002Flicenses\u002F\" rel=\"nofollow ugc\">https:\u002F\u002Fwww.gnu.org\u002Flicenses\u002F\u003C\u002Fa>.\u003C\u002Fp>\n","Enables the use of WooCommerce Webhooks to create or update a software registration in {eac}SoftwareRegistry when an order or subscription is created  &hellip;",1677,"2025-09-04T14:29:00.000Z",[19,21,22,61,62],"webhooks","woocommerce","https:\u002F\u002Fswregistry.earthasylum.com\u002Fwebhooks-for-woocommerce\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feacsoftwareregistry-webhook-endpoints.1.1.5.zip",{"slug":66,"name":67,"version":68,"author":69,"author_profile":70,"description":71,"short_description":72,"active_installs":73,"downloaded":74,"rating":75,"num_ratings":76,"last_updated":77,"tested_up_to":78,"requires_at_least":79,"requires_php":80,"tags":81,"homepage":84,"download_link":85,"security_score":86,"vuln_count":87,"unpatched_count":11,"last_vuln_date":88,"fetched_at":27},"license-manager-for-woocommerce","License Manager for WooCommerce","3.0.15","Saad Iqbal","https:\u002F\u002Fprofiles.wordpress.org\u002Fsaadiqbal\u002F","\u003Cp>Running a digital store on WooCommerce? \u003Cstrong>\u003Ca href=\"https:\u002F\u002Flicensemanager.at\u002F?utm_source=wp_org&utm_medium=readme&utm_campaign=title\" rel=\"nofollow ugc\">License Manager for WooCommerce\u003C\u002Fa>\u003C\u002Fstrong> gives you everything you need to sell and manage software license keys and digital licenses, including a serial key and software license, securely.\u003Cbr \u002F>\nFrom automatic license key generation and instant email delivery to encrypted storage and powerful REST API endpoints, this WooCommerce automation plugin acts as a complete key manager and license management system. It streamlines software license management for WordPress developers, SaaS vendors, and digital product shops requiring software license keys.\u003Cbr \u002F>\nThe License Manager for WooCommerce allows you to easily sell and manage all of your digital license keys, serial key inventories, and software license records from one centralized license management dashboard.\u003Cbr \u002F>\nWith features like the bulk importer, automatic license delivery, automatic stock management, and database encryption, your shop can handle every key, software license, and digital license more efficiently than ever.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>\u003Ca href=\"https:\u002F\u002Flicensemanager.at\u002Fpricing\u002F?utm_source=wp_org&utm_medium=readme&utm_campaign=go_pro\" rel=\"nofollow ugc\">🚀 Go Pro\u003C\u002Fa>\u003C\u002Fstrong> | \u003Cstrong>\u003Ca href=\"https:\u002F\u002Ftastewp.com\u002Fcreate\u002FNMS\u002F8.4\u002Flatest_wp\u002Flicense-manager-for-woocommerce%2Cwoocommerce\u002Ftastewp-default\u002F?redirect=admin.php%3Fpage=wc-settings%26tab=lmfwc_settings&ni=true\" rel=\"nofollow ugc\">💻 Live Demo\u003C\u002Fa>\u003C\u002Fstrong> | \u003Cstrong>\u003Ca href=\"https:\u002F\u002Flicensemanager.at\u002Fdocs\u002F?utm_source=wp_org&utm_medium=readme&utm_campaign=documentation\" rel=\"nofollow ugc\">📘  Documentation\u003C\u002Fa>\u003C\u002Fstrong> | \u003Cstrong>\u003Ca href=\"https:\u002F\u002Flicensemanager.at\u002Fget-in-touch\u002F?utm_source=wp_org&utm_medium=readme&utm_campaign=contact_us\" rel=\"nofollow ugc\">💬 Support\u003C\u002Fa>\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cspan class=\"embed-youtube\" style=\"text-align:center; display: block;\">\u003Ciframe loading=\"lazy\" class=\"youtube-player\" width=\"750\" height=\"422\" src=\"https:\u002F\u002Fwww.youtube.com\u002Fembed\u002FE_GWMqzYLcs?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\">\u003C\u002Fiframe>\u003C\u002Fspan>\n\u003Ch4>Who WooCommerce License Manager is For\u003C\u002Fh4>\n\u003Cp>This automation license management plugin is for:\u003Cbr \u002F>\n* WordPress plugin and theme developers who need a secure license key or serial key system\u003Cbr \u002F>\n* SaaS providers selling subscription-based software license products\u003Cbr \u002F>\n* Digital product stores needing secure license delivery and serial key verification\u003Cbr \u002F>\n* Agencies distributing client licenses using a centralized key manager\u003C\u002Fp>\n\u003Ch4>Key Features of License Manager for WooCommerce\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Automated License Delivery – Generate and send WooCommerce digital license keys and serial key access instantly after checkout.\u003C\u002Fli>\n\u003Cli>Secure Storage – Every license key and software license record is encrypted and protected inside WordPress.\u003C\u002Fli>\n\u003Cli>Stock Control – Track, assign, and update license key availability automatically with built-in key manager functionality.\u003C\u002Fli>\n\u003Cli>REST API Integration – Validate, activate, or revoke licenses, software license keys, and serial key activations directly via API.\u003C\u002Fli>\n\u003Cli>Customer Dashboard – Buyers can manage activations, view software license details, and monitor serial key usage inside My Account.\u003C\u002Fli>\n\u003Cli>Bulk Tools – Import, export, and generate license and serial key batches in a few clicks.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Highlights of License Manager for WooCommerce\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Display the license keys and serial key section inside WooCommerce ‘s My Account Page\u003C\u002Fli>\n\u003Cli>Allow users to activate\u002Fdeactivate their software license keys\u003C\u002Fli>\n\u003Cli>Allow users to download software license certificates\u003C\u002Fli>\n\u003Cli>Admins can add a company logo on a software license certificate\u003C\u002Fli>\n\u003Cli>Admins can do a one-click migration of the license key from Digital License Manager or any existing key manager\u003C\u002Fli>\n\u003Cli>Admin can generate licenses and serial key entries for all past orders\u003C\u002Fli>\n\u003Cli>Automatically sell and deliver software license keys through WooCommerce\u003C\u002Fli>\n\u003Cli>Automatically manage the stock for licensed products and serial key inventory\u003C\u002Fli>\n\u003Cli>Activate, deactivate, and check your software license status through the REST API\u003C\u002Fli>\n\u003Cli>Manually resend license keys and serial key delivery emails\u003C\u002Fli>\n\u003Cli>Add and import software license keys and assign them to WooCommerce products\u003C\u002Fli>\n\u003Cli>All licenses and serial key data are encrypted to prevent unauthorized use\u003C\u002Fli>\n\u003Cli>Administrators can activate or deactivate user accounts tied to a software license\u003C\u002Fli>\n\u003Cli>Allows users to add duplicate license keys or serial key entries into the database\u003C\u002Fli>\n\u003Cli>The order status tab provides software license and serial key delivery settings\u003C\u002Fli>\n\u003Cli>Import license key and serial key batches by file upload\u003C\u002Fli>\n\u003Cli>Export license key and software license records as PDF or CSV\u003C\u002Fli>\n\u003Cli>Manage the status of your license keys, software license lifecycle, and serial key usage\u003C\u002Fli>\n\u003Cli>Create license key generators with custom parameters to produce unique software license and serial key combinations\u003C\u002Fli>\n\u003Cli>Assign a generator to one or more WooCommerce products; these products then automatically create a software license key and serial key whenever they are sold\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>License Manager for WooCommerce Pro\u003C\u002Fh4>\n\u003Cp>License Manager for WooCommerce Pro allows you to enhance the capabilities for your eCommerce website with advanced license management, software license, and key manager features:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Download Expires\u003C\u002Fstrong> – Download expired products and generate new software license keys and serial key entries.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Product Download Detail\u003C\u002Fstrong> – Enter a change log and product version from the settings tied to each software license.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Validate Customer Licenses\u003C\u002Fstrong> – Validate customer software license access using their ID or assigned serial key.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Ping Request\u003C\u002Fstrong> – Create a ping request to check the client-server connection and confirm software license validity.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>New License Key Upon Subscription Renewal\u003C\u002Fstrong> – Issue a new software license key and serial key upon each subscription renewal.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Extend License Key Upon Subscription\u003C\u002Fstrong> – Extend the existing software license and associated serial key with each subscription renewal.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Webhooks Integration\u003C\u002Fstrong> – Automate external actions with real-time event-based software license and serial key triggers.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>QR Code Activation\u003C\u002Fstrong> – Simplify activation with scannable license QR codes linked to each software license and serial key for instant access.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>View License Manager for WooCommerce Pro \u003Cstrong>\u003Ca href=\"https:\u002F\u002Fwww.licensemanager.at\u002Fpricing\u002F\" rel=\"nofollow ugc\">pricing plans\u003C\u002Fa>\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Ch3>Feature Breakdown of WooCommerce License Manager\u003C\u002Fh3>\n\u003Ch4>License Key Management & Delivery\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Assign a WooCommerce license key or serial key to any digital product as part of your software license management workflow.\u003C\u002Fli>\n\u003Cli>Automatically generate licenses during checkout using built-in key manager generators.\u003C\u002Fli>\n\u003Cli>Deliver licenses, software license credentials, and serial key access instantly by email and within the customer’s WooCommerce account.\u003C\u002Fli>\n\u003Cli>Re-issue or revoke licenses and serial key access directly from the admin dashboard using the integrated key manager.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Security & Compliance\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Keys and serial key data are stored with encryption. No plain-text exposure of any software license.\u003C\u002Fli>\n\u003Cli>Admin can hide or partially mask serial key values for additional software license privacy.\u003C\u002Fli>\n\u003Cli>Built-in cryptographic files secure license operations and the automation license management system, ensuring your software license manager and key manager remain reliable.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>REST API & Integrations\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Validate, activate, or deactivate licenses and serial key activations via the REST API.\u003C\u002Fli>\n\u003Cli>Connect your apps, plugins, or external services to WooCommerce for software license and serial key verification.\u003C\u002Fli>\n\u003Cli>API supports license checks, ping requests, serial key validation, and software license expiry validation for complete control.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Stock & Reporting Tools\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Track license key inventory and serial key usage across products in real time with the built-in key manager.\u003C\u002Fli>\n\u003Cli>Bulk import or export keys and serial key records with CSV for fast software license migration.\u003C\u002Fli>\n\u003Cli>Generate custom license certificates tied to each software license and serial key, including branding and customer details.\u003C\u002Fli>\n\u003Cli>View activation history and logs to keep your WooCommerce software license and serial key workflow transparent.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Upgrade to License Manager Pro\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Automation for WooCommerce License Manager Pro extends functionality with advanced software license, serial key, and key manager controls.\u003C\u002Fli>\n\u003Cli>Features include versioning and changelogs, subscription renewal support, software license validation by customer ID, and advanced reporting.\u003C\u002Fli>\n\u003Cli>Ideal for scaling stores needing enterprise-level WooCommerce license management and key manager capabilities for handling large software license and serial key volumes.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Compatibility and Requirements of This License Key Management Software\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Fully compatible with WooCommerce license management workflows for managing software license keys and serial key delivery for digital products.\u003C\u002Fli>\n\u003Cli>This automation license management plugin works with the latest WordPress and WooCommerce versions (tested up to current release) and supports centralized key manager operations.\u003C\u002Fli>\n\u003Cli>Requires WordPress 5.0+ and WooCommerce 5.0+ for stable software license and serial key management performance.\u003C\u002Fli>\n\u003Cli>Lightweight codebase built for speed, security, and scalable license management and key manager operations.\u003C\u002Fli>\n\u003Cli>Trusted by 6,000+ active installs as a reliable software license manager and key manager for WordPress.\u003C\u002Fli>\n\u003Cli>Regular updates and dedicated support ensure long-term software license and serial key reliability.\u003C\u002Fli>\n\u003Cli>Backward compatible with Digital License Manager for smooth migration of existing software license and serial key records.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>API For License Key Management\u003C\u002Fh4>\n\u003Cp>The plugin also offers additional endpoints for manipulating licenses, software license records, generator resources, and serial key assignments. These routes are authorized via API keys (generated through the plugin settings) and accessed via the WordPress API using the built-in WooCommerce license key manager infrastructure. An extensive \u003Cstrong>\u003Ca href=\"https:\u002F\u002Fwww.licensemanager.at\u002Fdocs\u002Frest-api\u002Fgetting-started\u002Fapi-keys\" rel=\"nofollow ugc\">API documentation\u003C\u002Fa>\u003C\u002Fstrong> is also available.\u003C\u002Fp>\n\u003Ch4>Need help?\u003C\u002Fh4>\n\u003Cp>If you have any feature requests, need more hooks, or have even found a bug related to your software license, serial key, or key manager, please let us know in the support forum or e-mail us at support@wpexperts.io.\u003C\u002Fp>\n\u003Cp>You can also check out the \u003Cstrong>\u003Ca href=\"https:\u002F\u002Fwww.licensemanager.at\u002Fdocs\u002F\" rel=\"nofollow ugc\">documentation\u003C\u002Fa>\u003C\u002Fstrong>, which contains the most essential information on what the plugin can do to manage your software license, serial key, and complete key manager workflow.\u003C\u002Fp>\n\u003Ch4>Important\u003C\u002Fh4>\n\u003Cp>The plugin will create two files inside the \u003Ccode>wp-content\u002Fuploads\u002Flmfwc-files\u003C\u002Fcode> folder. These files (\u003Ccode>defuse.txt\u003C\u002Fcode> and \u003Ccode>secret.txt\u003C\u002Fcode>) contain cryptographic secrets which are automatically generated if they don’t exist. These cryptographic secrets are used to encrypt, decrypt and hash your license keys. Once they are generated please \u003Cstrong>back them up somewhere safe\u003C\u002Fstrong>. In case you lose these two files your encrypted license keys inside the database will remain forever lost!\u003C\u002Fp>\n\u003Cp>If you would like to contribute to any of these \u003Ca href=\"https:\u002F\u002Fwww.licensemanager.at\u002Fdocs\u002Frest-api\u002Flibraries\u002Fnode-js\" rel=\"nofollow ugc\">libraries\u003C\u002Fa> in these languages (Node.js, Python, PHP, Ruby, .NET, C, C#, C++, and Golang), please visit our library page for more details.\u003C\u002Fp>\n\u003Ch4>Note\u003C\u002Fh4>\n\u003Cp>Few features like user license display on account page and license certification are fork from Digital License Manager plugin by Darko Gjorgjijoski and we have changed the code according to our need.\u003C\u002Fp>\n","Easily sell and manage software license keys through your WooCommerce shop",6000,154091,92,147,"2026-03-12T06:45:00.000Z","6.9.4","4.7","7.0",[82,47,83,19,62],"license-key","serial-key","https:\u002F\u002Fwww.wpexperts.io\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Flicense-manager-for-woocommerce.3.0.15.zip",95,4,"2025-09-05 00:00:00",{"slug":90,"name":91,"version":92,"author":93,"author_profile":94,"description":95,"short_description":96,"active_installs":97,"downloaded":98,"rating":35,"num_ratings":34,"last_updated":99,"tested_up_to":78,"requires_at_least":79,"requires_php":80,"tags":100,"homepage":101,"download_link":102,"security_score":103,"vuln_count":104,"unpatched_count":11,"last_vuln_date":105,"fetched_at":27},"digital-license-manager","Digital License Manager","1.8.4","CodeVerve","https:\u002F\u002Fprofiles.wordpress.org\u002Fcodeverve\u002F","\u003Cp>The \u003Cstrong>\u003Ca href=\"https:\u002F\u002Fcodeverve.com\u002Fproduct\u002Fdigital-license-manager-pro\u002F\" rel=\"nofollow ugc\">Digital License Manager\u003C\u002Fa>\u003C\u002Fstrong> is a licensing plugin that allows you to efficiently sell and manage license keys that also supports bulk import, export, stock synchronization, separate activations table and much more.\u003C\u002Fp>\n\u003Cp>The plugin is actively maintained, secure, well documented and very extendable.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002F\" rel=\"nofollow ugc\">Plugin & API Documentation\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch3>✔️ Core Features\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Manage Licenses efficiently (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Flicenses\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Manage License Activations – See activation ip, useragent, label… (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Factivations\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Manage License Generators – Customize the look of the licenses (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fgenerators\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Supports Simple and Variable products for License key delivery (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fwoocommerce\u002Fproducts\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Deliver License key on product purchase from stock (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fwoocommerce\u002Fdeliver-from-stock\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Deliver License key on product purchase based on the Generator (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fwoocommerce\u002Fproducts\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Synchronizes stock with licenses assigned to product (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fwoocommerce\u002Fstock-synchronization\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Configure the order status on which License is delivered (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fget-started\u002Fconfiguration\u002F#WooCommerce\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Show purchased Licenses in WooCommerce > MyAccount (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fwoocommerce\u002Fmy-account\u002Flicenses\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Single License page in WooCommerce My Account page (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fwoocommerce\u002Fmy-account\u002Fsingle-license\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Activate License from WooCommerce MyAccount page (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fwoocommerce\u002Fmy-account\u002Fsingle-license\u002Fmanual-activations\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Allow\u002FDisallow Customers to download PDF License Certificate (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fwoocommerce\u002Fmy-account\u002Fsingle-license\u002Fpdf-certificates\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Adds purchased License Keys in the Order Confirmation email (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fwoocommerce\u002Femails\u002Forder-confirmation\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Manually re-send License Key to customer via email (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fwoocommerce\u002Femails\u002Fmanual-email\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Rest API endpoints for working with Licenses. (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Frest-api\u002Flicenses\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Rest API endpoints for working with Generators. (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Frest-api\u002Fgenerators\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Rest API endpoints for working with Software. (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Frest-api\u002Fsoftware\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Rest API protected by API Key & Endpoint permissions (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Frest-api\u002Fauthentication\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Option to Import Licenses (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Flicenses\u002Fimport-export\u002F#import\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Option to Export Licenses (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Flicenses\u002Fimport-export\u002F#export\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Effortless migration from License Manager for WooCommerce (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fmigration\u002Fmigrate-from-license-manager-for-woocommerce\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Support for “WooCommerce PDF Invoices and Packing Slips” (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fintegrations\u002Fpdf-invoices-and-packing-slips\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Licenses List Block – Lists licenses assigned to the current user (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fblocks\u002Flicenses-table\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>License Check Block – Show a form for checking license key (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fblocks\u002Flicense-check\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Licenses Shortcode – Lists Licenses assigned to the current user (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fblocks\u002Flicenses-table\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>License Check Shortcode – Show a form for checking license key (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fblocks\u002Flicense-check\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Customizable WooCommerce templates (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fcodex\u002Ftemplates\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>For a full list of features, please check \u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002F\" rel=\"nofollow ugc\">Documentation\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3>✨ Pro Features\u003C\u002Fh3>\n\u003Cp>Our PRO version focuses on support for WooCommerce Subscriptions, detailed software showcase in the product page tabs, software update delivery through special REST API endpoints and more.\u003C\u002Fp>\n\u003Cp>List of features:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>WooCommerce Subscriptions Support (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fintegrations\u002Fwoocommerce-subscriptions\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Subscriptions for WooCommerce support (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fintegrations\u002Fsubscriptions-for-woocommerce\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Register License Keys in WooCommerce > My Account (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fwoocommerce\u002Fmy-account\u002Fregister-license\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>License Revealing (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Flicenses\u002Flicense-revealing\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>WPML Translation Plugin support (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fintegrations\u002Fwpml\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Software Management – Set up gallery, support, documentation… (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fsoftware\u002Fmanaging-software\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Software Releases – Publish releases for each software (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fsoftware\u002Fmanage-releases\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Software Product Details – Assign software to products. (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fsoftware\u002Fproduct-details\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Software Product Details – Show last updated, version, etc. (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fsoftware\u002Fproduct-details\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Software Product Details – Show gallery, support, docs, changelog (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fsoftware\u002Fproduct-details\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Software Download Page in WooCommerce My Account (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fwoocommerce\u002Fmy-account\u002Fsingle-license\u002Fdownloads\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Software Download RestAPI endpoint (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Frest-api\u002Fsoftware\u002Fdownload\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Software Details RestAPI endpoint (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Frest-api\u002Fsoftware\u002Fsingle\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>License Activation Enable\u002FDisable in WooCommerce > My Account (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fwoocommerce\u002Fmy-account\u002Fsingle-license\u002Factivations-table\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>WordPress Premium Theme & Plugin Updater (\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fwordpress-theme-plugin-updates\u002F\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>)\u003C\u002Fli>\n\u003Cli>Software Analytics (Coming soon)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fcodeverve.com\u002Fproduct\u002Fdigital-license-manager-pro\u002F\" rel=\"nofollow ugc\">[GET PRO VERSION]\u003C\u002Fa> 🔥\u003C\u002Fp>\n\u003Cp>For a full list of features, please check \u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002F\" rel=\"nofollow ugc\">Documentation\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3>📃 REST API Documentation\u003C\u002Fh3>\n\u003Cp>The REST API is one of the crucial features that this plugin provides.\u003C\u002Fp>\n\u003Cp>It allows developers to create, update, activate, deactivate, validate licenses through the API.\u003C\u002Fp>\n\u003Cp>The full REST API documentation can be found on the link below:\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Frest-api\u002F\" rel=\"nofollow ugc\">[See Documentation]\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch3>📃 Complete Documentation\u003C\u002Fh3>\n\u003Cp>The complete documentation can be found on the link below:\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fdocs.codeverve.com\u002Fdigital-license-manager\u002Fhandbook\u002Fwoocommerce\u002Fproducts\u002F\" rel=\"nofollow ugc\">[See Documentation]\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch3>📃 Client Libraries\u003C\u002Fh3>\n\u003Cp>The following client libraries and integrations are available:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdigital-license-manager\u002Fdlm-php\" rel=\"nofollow ugc\">PHP Library\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdigital-license-manager\u002Fdlm-cpp\" rel=\"nofollow ugc\">C++ Client (Libcurl)\u003C\u002Fa> \u002F \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdigital-license-manager\u002Fdlm-cpp-example\" rel=\"nofollow ugc\">C++ Example\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdigital-license-manager\u002FDLM-NET\" rel=\"nofollow ugc\">C# Library\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdigital-license-manager\u002Fdlm-python\" rel=\"nofollow ugc\">Python Library\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdigital-license-manager\u002Fdlm-plugin-pro\" rel=\"nofollow ugc\">Premium WordPress Updater (Requires PRO)\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdigital-license-manager\u002Fdlm-plugin-pro\" rel=\"nofollow ugc\">Premium Plugin Example (Requires PRO)\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdigital-license-manager\u002Fdlm-theme-pro\" rel=\"nofollow ugc\">Premium Theme Example (Requires PRO)\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>➕ Issues \u002F Feature Requests\u003C\u002Fh3>\n\u003Cp>The development can be tracked on our \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgdarko\u002Fdigital-license-manager\" rel=\"nofollow ugc\">Github Repository\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Any contributions are welcome! Feel free to submit pull requests or report issues.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgdarko\u002Fdigital-license-manager\" rel=\"nofollow ugc\">Digital License Manager on GitHub\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>👏 Acknowledgements\u003C\u002Fh3>\n\u003Cp>This plugin was early fork of License Manager for WooCommerce by Drazen Bebic and WPExperts. However, nowadays, the code has been completely rewritten in order to modernize it and provide better support, stability and new features.\u003C\u002Fp>\n\u003Cp>Other acknowledgments: Micromodal, Tom-Select, Flatpickr, defuse\u002FPHP-Encryption, spipu\u002Fhtml2pdf, tecnickcom\u002Ftcpdf, 10quality\u002Fwp-query-builder, ignitekit\u002Fwp-notices.\u003C\u002Fp>\n\u003Cp>Props to \u003Ca href=\"https:\u002F\u002Fprofiles.wordpress.org\u002Fpondermatic\u002F\" rel=\"nofollow ugc\">@pondermatic\u003C\u002Fa> for contributing to our plugin.\u003C\u002Fp>\n\u003Ch3>⚠️ Important Note\u003C\u002Fh3>\n\u003Cp>The plugin will create \u003Ccode>wp-content\u002Fuploads\u002Fdlm-files\u003C\u002Fcode> directory which stores the cryptographic secrets that are required to decrypt the licenses. If you lose this file, you will lose your license keys as well. \u003Cstrong>Make sure you backup those files!\u003C\u002Fstrong>\u003C\u002Fp>\n","Efficiently sell and manage software license keys \u002F codes on your WooCommerce webshop",700,20619,"2026-02-03T20:23:00.000Z",[82,47,83,19,62],"https:\u002F\u002Fcodeverve.com\u002Fproduct\u002Fdigital-license-manager-pro\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fdigital-license-manager.1.8.4.zip",99,1,"2025-03-24 20:55:16",{"slug":107,"name":108,"version":109,"author":110,"author_profile":111,"description":112,"short_description":113,"active_installs":114,"downloaded":115,"rating":25,"num_ratings":116,"last_updated":117,"tested_up_to":78,"requires_at_least":118,"requires_php":16,"tags":119,"homepage":124,"download_link":125,"security_score":25,"vuln_count":11,"unpatched_count":11,"last_vuln_date":26,"fetched_at":27},"wc-key-manager","Key Manager – Effortlessly sell license keys, game keys, pin codes, gift cards, and more with WooCommerce","1.3.6","PluginEver","https:\u002F\u002Fprofiles.wordpress.org\u002Fpluginever\u002F","\u003Cp>\u003Ca href=\"https:\u002F\u002Fwckeymanager.com\u002F\" rel=\"nofollow ugc\">Key Manager\u003C\u002Fa> is the complete License Manager for WooCommerce. It lets you sell and manage software license keys, game keys, gift cards, PIN codes, serial numbers, and other secret codes.\u003C\u002Fp>\n\u003Cp>The plugin provides a secure and automated license key delivery system with options for custom key generation, bulk import\u002Fexport, expiry control, and key activation tracking.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwckeymanager.com\" rel=\"nofollow ugc\">\u003Cstrong>🚀 Upgrade to Pro\u003C\u002Fstrong>\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fdemo.pluginever.com\u002Fwc-key-manager\" rel=\"nofollow ugc\">\u003Cstrong>💻 Live Demo Site\u003C\u002Fstrong>\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fwckeymanager.com\u002Fdocs\" rel=\"nofollow ugc\">\u003Cstrong>📄 Plugin Documentation\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch3>💵 WHAT YOU CAN SELL USING KEY MANAGER:\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Software licenses, WordPress themes\u002Fplugins\u003C\u002Fli>\n\u003Cli>Game keys, digital gift cards, serial numbers, activation codes\u003C\u002Fli>\n\u003Cli>Login credentials, membership keys, access codes\u003C\u002Fli>\n\u003Cli>Online courses, eBooks, coaching sessions\u003C\u002Fli>\n\u003Cli>Any physical or digital product that requires a license or secret key\u003C\u002Fli>\n\u003Cli>API keys for SaaS products\u003C\u002Fli>\n\u003Cli>Custom PIN codes for promotions or giveaways\u003C\u002Fli>\n\u003Cli>And many more.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>🛠️ HOW IT WORKS:\u003C\u002Fh3>\n\u003Col>\n\u003Cli>Create a product in WooCommerce and configure it as a key product.\u003C\u002Fli>\n\u003Cli>Add keys for the product or let the plugin generate them automatically.\u003C\u002Fli>\n\u003Cli>When a customer places an order and completes the payment, the plugin automatically sends the key for that product.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3>🎯 Free Features\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Add and manage license keys manually or generate them in bulk\u003C\u002Fli>\n\u003Cli>Import keys from CSV or TXT files\u003C\u002Fli>\n\u003Cli>Define key patterns: alphanumeric, numeric, or fully custom\u003C\u002Fli>\n\u003Cli>Set license expiry: fixed date, relative date, or never expire\u003C\u002Fli>\n\u003Cli>Limit or allow unlimited activations per key\u003C\u002Fli>\n\u003Cli>View activation history: user, date, order ID, and activation count\u003C\u002Fli>\n\u003Cli>Reuse keys from canceled or refunded orders\u003C\u002Fli>\n\u003Cli>Auto-deliver keys on order completion or payment confirmation\u003C\u002Fli>\n\u003Cli>Display keys on the customer’s My Account and Order Details pages\u003C\u002Fli>\n\u003Cli>REST API access for external license validation and automation\u003C\u002Fli>\n\u003Cli>Manage stock levels based on available keys\u003C\u002Fli>\n\u003Cli>Enable or disable duplicate key selling per product\u003C\u002Fli>\n\u003Cli>Built-in software license manager for WooCommerce\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>🚀 Pro Features\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Sell license keys with variable products and variations\u003C\u002Fli>\n\u003Cli>Generate detailed license usage reports with filters\u003C\u002Fli>\n\u003Cli>Integrate with WooCommerce Subscriptions for recurring licensing\u003C\u002Fli>\n\u003Cli>Sync license key expiry with subscription expiration\u003C\u002Fli>\n\u003Cli>Encrypt license keys for secure storage and delivery\u003C\u002Fli>\n\u003Cli>Add custom metadata fields to each key (public or private)\u003C\u002Fli>\n\u003Cli>Create and assign custom product attributes to keys\u003C\u002Fli>\n\u003Cli>Upload unlimited keys per variation or product\u003C\u002Fli>\n\u003Cli>Generate QR codes and barcodes for each license key\u003C\u002Fli>\n\u003Cli>Send SMS notifications via Twilio with customizable templates\u003C\u002Fli>\n\u003Cli>Use webhooks to trigger external services on key events\u003C\u002Fli>\n\u003Cli>Bulk export license keys with advanced field filtering\u003C\u002Fli>\n\u003Cli>Priority customer support and regular feature updates\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Key Integrations\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>WooCommerce Subscriptions\u003C\u002Fstrong> – Link license key expiry with subscription status\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Dokan Multivendor\u003C\u002Fstrong> – Vendors can sell license-based products\u003C\u002Fli>\n\u003Cli>\u003Cstrong>PDF Invoices & Packing Slips\u003C\u002Fstrong> – Attach keys inside invoices\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Twilio SMS Gateway\u003C\u002Fstrong> – Send license keys via SMS to customers\u003C\u002Fli>\n\u003Cli>\u003Cstrong>WhatsApp Notification\u003C\u002Fstrong> – Notify customers via WhatsApp\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>REST API Support\u003C\u002Fh3>\n\u003Cp>Manage licenses through REST API for integration with external systems:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Generate, activate, deactivate, and validate license keys\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwckeymanager.com\u002Fdocs\u002Frest-api\u002F\" rel=\"nofollow ugc\">API documentation\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n","Sell and manage license keys, serial numbers, gift cards, PIN codes, activation codes, and digital access credentials effortlessly with Key Manager.",200,8278,2,"2026-03-16T09:04:00.000Z","5.2",[120,121,122,123,19],"gift-cards","key","key-manager","license","https:\u002F\u002Fwckeymanager.com\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwc-key-manager.1.3.6.zip",{"attackSurface":127,"codeSignals":176,"taintFlows":194,"riskAssessment":195,"analyzedAt":205},{"hooks":128,"ajaxHandlers":172,"restRoutes":173,"shortcodes":174,"cronEvents":175,"entryPointCount":11,"unprotectedCount":11},[129,135,139,143,147,152,156,159,163,168],{"type":130,"name":131,"callback":132,"file":133,"line":134},"action","current_screen","closure","Extensions\u002Fclass.software_taxonomy.extension.php",72,{"type":130,"name":136,"callback":137,"file":133,"line":138},"admin_enqueue_scripts","add_inline_style",76,{"type":130,"name":140,"callback":141,"priority":104,"file":133,"line":142},"admin_notices","plugin_admin_notices",77,{"type":130,"name":144,"callback":145,"file":133,"line":146},"options_settings_page","admin_options_settings",114,{"type":148,"name":149,"callback":149,"priority":150,"file":133,"line":151},"filter","registry_api_defaults",10,117,{"type":148,"name":153,"callback":153,"priority":154,"file":133,"line":155},"api_request_parameters",50,119,{"type":148,"name":157,"callback":157,"priority":150,"file":133,"line":158},"api_license_limitations",121,{"type":148,"name":160,"callback":161,"priority":150,"file":133,"line":162},"software_options","get_software_options",154,{"type":130,"name":164,"callback":165,"file":166,"line":167},"rest_api_init","init_register_routes","Extensions\u002Fclass.software_taxonomy.github_hosting.php",157,{"type":148,"name":169,"callback":132,"file":170,"line":171},"eacSoftwareRegistry_load_extensions","eacSoftwareRegistry_Software_Taxonomy.php",54,[],[],[],[],{"dangerousFunctions":177,"sqlUsage":182,"outputEscaping":184,"fileOperations":192,"externalRequests":11,"nonceChecks":11,"capabilityChecks":104,"bundledLibraries":193},[178],{"fn":179,"file":166,"line":180,"context":181},"set_time_limit",504,"set_time_limit(120);",{"prepared":11,"raw":11,"locations":183},[],{"escaped":185,"rawEcho":116,"locations":186},46,[187,190],{"file":133,"line":188,"context":189},569,"raw output",{"file":133,"line":191,"context":189},575,15,[],[],{"summary":196,"deductions":197},"The plugin \"eacsoftwareregistry-software-taxonomy\" v2.0.12 exhibits a generally strong security posture based on the provided static analysis. The absence of any known CVEs, coupled with a clean vulnerability history, suggests a well-maintained and security-conscious development approach.  The code analysis reveals an extremely limited attack surface with no exposed AJAX handlers, REST API routes, shortcodes, or cron events, and importantly, no unprotected entry points. The plugin also demonstrates good practices regarding SQL queries, with 100% using prepared statements, and a very high rate of proper output escaping (96%).\n\nHowever, a few areas warrant attention. The presence of the `set_time_limit` function, while not inherently a vulnerability, can sometimes be abused in specific scenarios to extend script execution time, potentially facilitating denial-of-service attacks if not carefully managed or if there are other exploitable weaknesses.  The lack of nonce checks and capability checks, while less concerning given the minimal attack surface, means that if any entry points were to be discovered or added in the future, they would be immediately unprotected. The limited number of file operations (15) is good, but the absence of external HTTP requests is also noted as a potentially positive indicator of reduced external attack vectors.\n\nOverall, this plugin appears to be securely developed with a focus on minimizing attack vectors. The lack of historical vulnerabilities is a significant strength. The main areas for improvement or consideration are the potential misuse of `set_time_limit` and the absence of broader authentication\u002Fauthorization checks on any potential future entry points, although the current design mitigates this risk significantly. The plugin's strengths outweigh its current weaknesses.",[198,201,203],{"reason":199,"points":200},"Dangerous function detected (set_time_limit)",5,{"reason":202,"points":200},"No nonce checks implemented",{"reason":204,"points":200},"No capability checks implemented","2026-04-16T15:07:19.342Z",{"wat":207,"direct":223},{"assetPaths":208,"generatorPatterns":215,"scriptPaths":216,"versionParams":217},[209,210,211,212,213,214],"\u002Fwp-content\u002Fplugins\u002Feacsoftwareregistry-software-taxonomy\u002Feacsoftwareregistry-software-taxonomy.php","\u002Fwp-content\u002Fplugins\u002Feacsoftwareregistry-software-taxonomy\u002Fcss\u002Feac-software-taxonomy-admin.css","\u002Fwp-content\u002Fplugins\u002Feacsoftwareregistry-software-taxonomy\u002Fcss\u002Feac-software-taxonomy.css","\u002Fwp-content\u002Fplugins\u002Feacsoftwareregistry-software-taxonomy\u002Fjs\u002Feac-software-taxonomy-admin.js","\u002Fwp-content\u002Fplugins\u002Feacsoftwareregistry-software-taxonomy\u002Fjs\u002Feac-software-taxonomy.js","\u002Fwp-content\u002Fplugins\u002Feacsoftwareregistry-software-taxonomy\u002Fjs\u002Feac-software-taxonomy-admin-settings.js",[],[213,212,214],[218,219,220,221,222],"eacsoftwareregistry-software-taxonomy\u002Fcss\u002Feac-software-taxonomy.css?ver=","eacsoftwareregistry-software-taxonomy\u002Fcss\u002Feac-software-taxonomy-admin.css?ver=","eacsoftwareregistry-software-taxonomy\u002Fjs\u002Feac-software-taxonomy.js?ver=","eacsoftwareregistry-software-taxonomy\u002Fjs\u002Feac-software-taxonomy-admin.js?ver=","eacsoftwareregistry-software-taxonomy\u002Fjs\u002Feac-software-taxonomy-admin-settings.js?ver=",{"cssClasses":224,"htmlComments":227,"htmlAttributes":244,"restEndpoints":247,"jsGlobals":249,"shortcodeOutput":251},[225,226],"eac-software-taxonomy","eac-software-taxonomy-admin",[228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243],"\u003C!-- EarthAsylum Consulting {eac} Software Registration Server - Software Product Taxonomy -->","\u003C!-- This simple plugin file responds to the 'eacSoftwareRegistry_load_extensions' filter to load additional extensions. -->","\u003C!-- Using this method prevents overwriting extensions when the plugin is updated or reinstalled. -->","\u003C!-- eacSoftwareRegistry_load_extensions - get the extensions directory to load -->","\u003C!-- Enable update notice (self hosted or wp hosted) -->","\u003C!-- Add links on plugins page -->","\u003C!-- Add our extension to load -->","\u003C!-- EarthAsylum Consulting {eac}SoftwareRegistration software product taxonomy -->","\u003C!-- Github API Constructor. -->","\u003C!-- called from eacSoftwareRegistry taxonomy register_taxonomy -->","\u003C!-- same prefix as main plugin ------- softwareregistry----------------- \u002Fv1 -->","\u003C!-- may override with shortcut constant -->","\u003C!-- see if we have any products (terms) with github hosting enables -->","\u003C!-- get the root folder(s) & urls for local storage -->","\u003C!-- excluded from plugin -->","\u003C!-- included in plugin -->",[245,246],"data-taxonomy-name=\"software_product\"","data-plugin-slug=\"eacSoftwareRegistry\"",[248],"\u002Fwp-json\u002Fsoftwareregistry\u002Fv1\u002Fswupdate",[250],"eacSoftwareRegistry",[],{"error":253,"url":254,"statusCode":255,"statusMessage":256,"message":256},true,"http:\u002F\u002Flocalhost\u002Fapi\u002Fplugins\u002Feacsoftwareregistry-software-taxonomy\u002Fbundle",404,"no bundle for this plugin yet",{"slug":4,"current_version":6,"total_versions":258,"versions":259},12,[260,266,273,280,287,294,301,308,315,322,329,336],{"version":6,"download_url":24,"svn_tag_url":261,"released_at":26,"has_diff":262,"diff_files_changed":263,"diff_lines":26,"trac_diff_url":264,"vulnerabilities":265,"is_current":253},"https:\u002F\u002Fplugins.svn.wordpress.org\u002Feacsoftwareregistry-software-taxonomy\u002Ftags\u002F2.0.12\u002F",false,[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.10&new_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.12",[],{"version":267,"download_url":268,"svn_tag_url":269,"released_at":26,"has_diff":262,"diff_files_changed":270,"diff_lines":26,"trac_diff_url":271,"vulnerabilities":272,"is_current":262},"2.0.10","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feacsoftwareregistry-software-taxonomy.2.0.10.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Feacsoftwareregistry-software-taxonomy\u002Ftags\u002F2.0.10\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.9&new_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.10",[],{"version":274,"download_url":275,"svn_tag_url":276,"released_at":26,"has_diff":262,"diff_files_changed":277,"diff_lines":26,"trac_diff_url":278,"vulnerabilities":279,"is_current":262},"2.0.9","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feacsoftwareregistry-software-taxonomy.2.0.9.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Feacsoftwareregistry-software-taxonomy\u002Ftags\u002F2.0.9\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.8&new_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.9",[],{"version":281,"download_url":282,"svn_tag_url":283,"released_at":26,"has_diff":262,"diff_files_changed":284,"diff_lines":26,"trac_diff_url":285,"vulnerabilities":286,"is_current":262},"2.0.8","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feacsoftwareregistry-software-taxonomy.2.0.8.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Feacsoftwareregistry-software-taxonomy\u002Ftags\u002F2.0.8\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.7&new_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.8",[],{"version":288,"download_url":289,"svn_tag_url":290,"released_at":26,"has_diff":262,"diff_files_changed":291,"diff_lines":26,"trac_diff_url":292,"vulnerabilities":293,"is_current":262},"2.0.7","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feacsoftwareregistry-software-taxonomy.2.0.7.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Feacsoftwareregistry-software-taxonomy\u002Ftags\u002F2.0.7\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.5&new_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.7",[],{"version":295,"download_url":296,"svn_tag_url":297,"released_at":26,"has_diff":262,"diff_files_changed":298,"diff_lines":26,"trac_diff_url":299,"vulnerabilities":300,"is_current":262},"2.0.5","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feacsoftwareregistry-software-taxonomy.2.0.5.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Feacsoftwareregistry-software-taxonomy\u002Ftags\u002F2.0.5\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.4&new_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.5",[],{"version":302,"download_url":303,"svn_tag_url":304,"released_at":26,"has_diff":262,"diff_files_changed":305,"diff_lines":26,"trac_diff_url":306,"vulnerabilities":307,"is_current":262},"2.0.4","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feacsoftwareregistry-software-taxonomy.2.0.4.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Feacsoftwareregistry-software-taxonomy\u002Ftags\u002F2.0.4\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.3&new_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.4",[],{"version":309,"download_url":310,"svn_tag_url":311,"released_at":26,"has_diff":262,"diff_files_changed":312,"diff_lines":26,"trac_diff_url":313,"vulnerabilities":314,"is_current":262},"2.0.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feacsoftwareregistry-software-taxonomy.2.0.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Feacsoftwareregistry-software-taxonomy\u002Ftags\u002F2.0.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.2&new_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.3",[],{"version":316,"download_url":317,"svn_tag_url":318,"released_at":26,"has_diff":262,"diff_files_changed":319,"diff_lines":26,"trac_diff_url":320,"vulnerabilities":321,"is_current":262},"2.0.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feacsoftwareregistry-software-taxonomy.2.0.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Feacsoftwareregistry-software-taxonomy\u002Ftags\u002F2.0.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.1&new_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.2",[],{"version":323,"download_url":324,"svn_tag_url":325,"released_at":26,"has_diff":262,"diff_files_changed":326,"diff_lines":26,"trac_diff_url":327,"vulnerabilities":328,"is_current":262},"2.0.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feacsoftwareregistry-software-taxonomy.2.0.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Feacsoftwareregistry-software-taxonomy\u002Ftags\u002F2.0.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.0&new_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.1",[],{"version":330,"download_url":331,"svn_tag_url":332,"released_at":26,"has_diff":262,"diff_files_changed":333,"diff_lines":26,"trac_diff_url":334,"vulnerabilities":335,"is_current":262},"2.0.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feacsoftwareregistry-software-taxonomy.2.0.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Feacsoftwareregistry-software-taxonomy\u002Ftags\u002F2.0.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F1.1.0&new_path=%2Feacsoftwareregistry-software-taxonomy%2Ftags%2F2.0.0",[],{"version":337,"download_url":338,"svn_tag_url":339,"released_at":26,"has_diff":262,"diff_files_changed":340,"diff_lines":26,"trac_diff_url":26,"vulnerabilities":341,"is_current":262},"1.1.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Feacsoftwareregistry-software-taxonomy.1.1.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Feacsoftwareregistry-software-taxonomy\u002Ftags\u002F1.1.0\u002F",[],[]]