A API incluída na extensão Software Licensing permite ativar remotamente chaves de licença, verificar se as chaves são válidas (e não expiradas), e também recuperar informações sobre as últimas versões de software. Esta API pode ser implementada com a maioria dos softwares, não apenas com Plugins e Temas do WordPress.
Neste Artigo
Requisições de API Disponíveis & Parâmetros
Integração de Plugins e Temas do WordPress
Ativar uma Chave de Licença
Verificar se uma Licença é Válida / Ativa
Obtendo informações de versão
Recuperando versões para múltiplos produtos de uma vez
Exemplos de API em outras linguagens
FAQ / Solução de Problemas
Existem quatro tipos de requisição de API disponíveis:
- activate_license – Usado para ativar remotamente uma chave de licença
- deactivate_license – Usado para desativar remotamente uma chave de licença
- check_license – Usado para verificar remotamente se uma chave de licença está ativada, é válida e não expirou
- get_version – Usado para recuperar remotamente as informações da última versão de um produto
Cada um dos métodos abaixo funciona da mesma maneira. O URL do site onde você tem o Easy Digital Downloads + Software Licensing instalado atuará como o endpoint da API. Todas as requisições para a API são feitas como requisições GET ou POST e seguem este formato:
https://YOURSITE.com/?edd_action={request type}&item_id={download ID here}&license=cc22c1ec86304b36883440e2e84cddff&url={url of the site being licensed}
A requisição requer três parâmetros e tem um parâmetro opcional:
- edd_action – Este é o tipo de requisição (veja abaixo)
- item_id – Use o ID do Download do seu produto. Isso é mais preciso do que usar item_name.
- Em vez de item_id, você também pode usar item_name, que é o nome do download em vez do ID. Passar item_id é preferível, pois é menos provável que mude. Se o item_name mudar, seu software precisará ser atualizado e referências passadas com o nome antigo não funcionarão mais.
- license – Esta é a chave de licença para a qual você está realizando uma ação
- url – (opcional) Este é o URL do site de onde a requisição da API está vindo
Dica de URL para Software Desktop:
O parâmetro url não se limita a URLs. Por exemplo, software desktop poderia usar o parâmetro url para um ID de Sistema ou qualquer texto único.
Chaves de Licença:
- A API de chaves de licença suporta apenas os seguintes caracteres [a-z, A-Z, 0-9, -, _].
- As chaves de licença podem ter um comprimento máximo de 256 caracteres.
Integração de Plugins e Temas do WordPress:
Consulte os seguintes documentos sobre como integrar a API de Licenciamento de Software com Plugins e Temas do WordPress:
Veja nossa documentação sobre como integrar atualizações automáticas para seus plugins do WordPress.
Veja nossa documentação sobre como integrar atualizações automáticas para seus temas do WordPress
Ativar uma Chave de Licença
Para ativar uma licença remotamente, o URL que você usará é:
https://YOURSITE.com/?edd_action=activate_license&item_id=8&license=cc22c1ec86304b36883440e2e84cddff&url=https://licensedsite.com
O parâmetro item_id (item_id=8) será substituído pelo ID real do seu produto. Você pode encontrá-lo em seu painel ao lado do produto:

O parâmetro license é definido como a chave de licença que você deseja ativar.
A resposta para esta solicitação será um objeto JSON. Se a licença foi ativada com sucesso, a resposta será:
{
"success": true,
"license": "valid",
"item_id": false (or Item ID if passed)
"item_name": "EDD Product Name",
"license_limit": 0,
"site_count": 2,
"expires": "2020-06-30 23:59:59",
"activations_left": "unlimited",
"checksum": "<md5 checksum>",
"payment_id": 12345,
"customer_name": "John Doe",
"customer_email": "[email protected]",
"price_id": "2"
}
Se a licença for inválida e falhar na ativação, a resposta será:
{
"success": false,
"license": "invalid",
"item_id": false (or Item ID if passed)
"item_name": "EDD Product Name",
"error": "expired",
"expires": "2020-04-28 23:59:59",
"license_limit": 0,
"site_count": 1,
"activations_left": "unlimited",
"checksum": "<md5 checksum>",
"payment_id": 12345,
"customer_name": "John Doe",
"customer_email": "[email protected]",
"price_id": "2"
}
Erros possíveis:
"missing" - License doesn't exist "missing_url" - URL not provided "license_not_activable" - Attempting to activate a bundle's parent license "disabled" - License key revoked "no_activations_left" - No activations left "expired" - License has expired "key_mismatch" - License is not valid for this product "invalid_item_id" - Invalid Item ID "item_name_mismatch" - License is not valid for this product "site_inactive" - Site is not active for this license "invalid" - License key does not match "valid" - License is valid
Verificar se uma Licença é Válida / Ativa
Verificar se uma licença é válida e não expirou é muito semelhante à ativação. Esta solicitação é geralmente feita se você precisar confirmar que uma licença ainda é válida após ter sido ativada. As licenças expiram após um ano (por padrão), então é isso que você usará para verificar se a licença expirou.
Para verificar uma licença remotamente, o URL que você usará é:
https://YOURSITE.com/?edd_action=check_license&item_id=8&license=cc22c1ec86304b36883440e2e84cddff&url=https://licensedsite.com
O parâmetro item_id (item_id=8) será substituído pelo ID real do seu produto. Você pode encontrá-lo em seu painel ao lado do produto:

O parâmetro license é definido como a chave de licença que você deseja verificar.
A resposta para esta solicitação será um objeto JSON. Se a licença estiver ativa e ainda válida, a resposta será:
{
"success": true,
"license": "valid",
"item_id": false, (or Item ID if passed)
"item_name": "EDD Product Name",
"checksum": "",
"expires": "2020-06-30 23:59:59",
"payment_id": 12345,
"customer_name": "John Doe",
"customer_email": "[email protected]",
"license_limit": 0,
"site_count": 2,
"activations_left": "unlimited",
"price_id": "2"
}
Se a licença for inválida, a resposta será:
{
"success": false,
"license": "invalid",
"item_id": false, (or Item ID if passed)
"item_name": "EDD Product Name",
"expires": "2014-10-23 00:00:00",
"license_limit": 0,
"site_count": 1,
"activations_left": "unlimited",
"checksum": "checksum",
"payment_id": 54224,
"customer_name": "John Doe",
"customer_email": "[email protected]",
"price_id": "2"
}
Status possíveis da licença:
"disabled" - License key revoked "expired" - License has expired "key_mismatch" - License is not valid for this product "invalid_item_id" - Invalid Item ID "item_name_mismatch" - License is not valid for this product
Obtendo informações de versão
Recuperar as informações de versão permite que você recupere remotamente dados sobre o número da última versão, incluindo changelogs e links de download para arquivos de atualização.
Para obter informações de versão para uma chave de licença:
https://YOURSITE.com/?edd_action=get_version&item_id=8&license=cc22c1ec86304b36883440e2e84cddff&url=https://licensedsite.com
O parâmetro item_id (item_id=8) será substituído pelo ID real do seu produto. Você pode encontrá-lo em seu painel ao lado do produto:

Observações sobre a solicitação:
- Se estiver usando item_name em vez de item_id, insira o título do produto no Easy Digital Downloads exatamente. Usar item_id é mais preciso.
- Os parâmetros license e url são opcionais. Se forem omitidos, as informações da versão mais recente serão recuperadas, mas nenhum link de download será incluído.
- A partir do Software Licensing 3.8, você pode incluir versões de plataforma na solicitação. Se a versão da plataforma não atender aos requisitos mínimos definidos para o produto no Easy Digital Downloads, o
new_versionna resposta seráfalseem vez do número da nova versão.php_versionewp_versionsão suportados por padrão.
A resposta será um objeto JSON que se parece com isto:
{
"new_version": "2.0",
"stable_version": "2.0",
"name": "Restrict Content Pro",
"slug": "restrict-content-pro",
"url": "https://edd.com/downloads/restrict-content-pro/?changelog=1",
"last_updated": "2017-01-03 11:59:46",
"homepage": "https://edd.com/downloads/restrict-content-pro/",
"package": "",
"download_link": "",
"sections": "a:2:{s:11:"description";s:793:"<p>Placerat porta in enim, urna cras, adipiscing augue dis lorem, pulvinar, natoque phasellus eu tincidunt, dictumst nunc ut dignissim turpis ac, pulvinar! Massa! Sed, enim, eu ac augue placerat scelerisque! Eu cursus, ridiculus cum nec lorem, natoque lorem dictumst amet! Nunc placerat dapibus enim dignissim, nunc mattis vel? Dolor nascetur placerat ridiculus augue massa porttitor turpis auctor, etiam et nisi pid ridiculus nisi duis ac. Turpis et non, dapibus diam! Placerat vel? Et, velit turpis mus sociis arcu, vel magna. Habitasse elementum elit cum nec est, eu, montes egestas est mattis lacus, turpis urna parturient, egestas, integer augue, penatibus natoque elit, rhoncus mid elementum, integer vut turpis. Et? Nisi pid. Nec, placerat ut tristique lorem a nunc velit nunc est.</p>n";s:9:"changelog";s:0:"";}",
"banners": "a:2:{s:4:"high";s:0:"";s:3:"low";s:0:"";}"
}
Observações sobre a resposta:
- Se nenhuma chave de licença for fornecida na solicitação get_version, as informações de versão ainda serão retornadas; no entanto, os valores de pacote e download estarão vazios. Inversamente, se uma chave de licença for fornecida, mas ela não pertencer ao item_id ou item_name na solicitação, uma resposta de erro será retornada com um motivo como valor msg.
- Um download_link será incluído se um arquivo existir, independentemente do estado da licença. No entanto, o download não funcionará a menos que a licença esteja ativa. Isso permite que sites com licença expirada a renovem, mas não tenham que esperar o cache de atualização limpar antes de obter a atualização.
- A propriedade seções é um array serializado que inclui a descrição completa do produto e o changelog. Se estiver usando análise de ReadMe.txt para plugins do WordPress, também incluirá informações adicionais fornecidas através do arquivo readme.
Se desejar recuperar informações sobre uma versão beta, anexe &beta=1 ao URL da sua solicitação de API, assim:
https://YOURSITE.com/?edd_action=get_version&item_id=8&license=cc22c1ec86304b36883440e2e84cddff&url=https://licensedsite.com&beta=1
Recuperando versões para múltiplos produtos de uma vez
Recupere versões para vários produtos em uma única solicitação, usando o argumento products. Este argumento aceita um array de itens. Cada item deve conter os mesmos argumentos enviados em uma única solicitação.
Aqui está um exemplo usando cURL:
curl -d edd_action=get_version -d products[0][item_id]=356 -d products[0][license]=59cc77ea94a2d867069a9d96142a35b8 -d products[0][url]="https://licensedsite.com" -d products[1][item_id]=46 -d products[1][license]=5cdd12a966c498fc6e423e261fe05303 -d products[1][url]="https://licensedsite.com" https://YOURSITE.com
E aqui está um exemplo usando a função do WordPresswp_remote_post():
$response = wp_remote_post( 'https://YOURSITE.com', array( 'body' => array( 'edd_action' => 'get_version', 'products' => array( 'my-first-plugin' => array( 'item_id' => 356, 'license' => '59cc77ea94a2d867069a9d96142a35b8', 'url' => 'https://licensedsite.com' ), 'my-second-plugin' => array( 'item_id' => 46, 'license' => '5cdd12a966c498fc6e423e261fe05303', 'url' => 'https://licensedsite.com' ) ) ) ) );
A resposta será um objeto JSON contendo resultados para cada um dos produtos fornecidos. As chaves de produto que você forneceu na solicitação serão mantidas na resposta. Aqui está um exemplo:
{
"my-first-plugin": {
"new_version": "2.0",
"stable_version": "2.0",
"name": "My First Plugin",
"slug": "my-first-plugin",
"url": "https://edd.com/downloads/my-first-plugin/?changelog=1",
"last_updated": "2021-01-03 11:59:46",
"homepage": "https://edd.com/downloads/my-first-plugin/",
"package": "",
"download_link": "",
"sections": "a:2:{s:11:"description";s:793:"<p>Placerat porta in enim, urna cras, adipiscing augue dis lorem, pulvinar, natoque phasellus eu tincidunt, dictumst nunc ut dignissim turpis ac, pulvinar! Massa! Sed, enim, eu ac augue placerat scelerisque! Eu cursus, ridiculus cum nec lorem, natoque lorem dictumst amet! Nunc placerat dapibus enim dignissim, nunc mattis vel? Dolor nascetur placerat ridiculus augue massa porttitor turpis auctor, etiam et nisi pid ridiculus nisi duis ac. Turpis et non, dapibus diam! Placerat vel? Et, velit turpis mus sociis arcu, vel magna. Habitasse elementum elit cum nec est, eu, montes egestas est mattis lacus, turpis urna parturient, egestas, integer augue, penatibus natoque elit, rhoncus mid elementum, integer vut turpis. Et? Nisi pid. Nec, placerat ut tristique lorem a nunc velit nunc est.</p>n";s:9:"changelog";s:0:"";}",
"banners": "a:2:{s:4:"high";s:0:"";s:3:"low";s:0:"";}"
},
"my-second-plugin": {
"new_version": "1.3",
"stable_version": "1.3",
"name": "My Second Plugin",
"slug": "my-second-plugin",
"url": "https://edd.com/downloads/my-second-plugin/?changelog=1",
"last_updated": "2021-03-08 11:59:46",
"homepage": "https://edd.com/downloads/my-second-plugin/",
"package": "",
"download_link": "",
"sections": "a:2:{s:11:"description";s:793:"<p>Placerat porta in enim, urna cras, adipiscing augue dis lorem, pulvinar, natoque phasellus eu tincidunt, dictumst nunc ut dignissim turpis ac, pulvinar! Massa! Sed, enim, eu ac augue placerat scelerisque! Eu cursus, ridiculus cum nec lorem, natoque lorem dictumst amet! Nunc placerat dapibus enim dignissim, nunc mattis vel? Dolor nascetur placerat ridiculus augue massa porttitor turpis auctor, etiam et nisi pid ridiculus nisi duis ac. Turpis et non, dapibus diam! Placerat vel? Et, velit turpis mus sociis arcu, vel magna. Habitasse elementum elit cum nec est, eu, montes egestas est mattis lacus, turpis urna parturient, egestas, integer augue, penatibus natoque elit, rhoncus mid elementum, integer vut turpis. Et? Nisi pid. Nec, placerat ut tristique lorem a nunc velit nunc est.</p>n";s:9:"changelog";s:0:"";}",
"banners": "a:2:{s:4:"high";s:0:"";s:3:"low";s:0:"";}"
}
}
Acessando a API em outras linguagens
Como a API usa solicitações HTTP POST simples, ela pode ser acessada em praticamente qualquer idioma. Aqui estão alguns exemplos.
- API de Licenciamento de Software – Exemplo usando cURL
- API de Licenciamento de Software – Exemplo usando Perl
- API de Licenciamento de Software – Exemplo usando Python
- API de Licenciamento de Software – Exemplo usando Ruby
- API de Licenciamento de Software – Exemplo usando C#
- API de Licenciamento de Software – Exemplo usando JavaScript
- API de Licenciamento de Software – Exemplo usando jQuery
FAQ / Solução de Problemas
Posso criar Chaves com Formato Personalizado?
O formato padrão da chave é uma soma md5 simples.
Você pode alterar esse formato para praticamente qualquer coisa que desejar.
Como faço para impedir o acesso ao meu software, plugin ou tema se a licença estiver expirada ou desativada?
O status desta licença não afeta o software, apenas indica o status da chave. Cabe ao desenvolvedor ler esse status para fazer algo. Por exemplo, se uma chave estiver Expirada, o software pode optar por parar de funcionar ou exibir um aviso.
Uma exceção a isso é que, quando o EDD vê uma chave expirada ou desativada anexada a um download, os links de download, incluindo o link get_version, não funcionarão. Portanto, as atualizações não funcionarão mais através da resposta get_version.
Se você está tendo problemas para ativar chaves de licença em sua implementação do
Software Licensing, aqui estão algumas dicas para ajudar a resolver problemas comuns.
Solicitações bloqueadas por um plugin de segurança
Plugins de segurança para WordPress frequentemente têm recursos que interferem nas solicitações da API de chave de licença. Esses recursos tendem a fazer com que a ativação (e outras solicitações de API) retorne uma resposta inesperada, fazendo com que a rotina de ativação falhe.
Por exemplo, você pode obter uma resposta como esta do servidor se tiver um plugin de segurança que esteja interferindo:
[response] => Array ( [code] => 403 [message] => Forbidden )
O plugin iThemes Security é conhecido por ter uma configuração que pode causar esse problema. A configuração é chamada
Filtrar Strings Suspeitas na URL
Para resolver o problema, simplesmente desative a configuração
Filtrar Strings Suspeitas na URL. Se você não estiver usando o iThemes Security, ele terá um nome diferente, embora semelhante.
Requisições bloqueadas por regras especiais do .htaccess
Alguns sites adicionam regras especiais ao arquivo .htaccess para bloquear certos endereços IP ou adicionar proteção adicional ao site.
Se você tem regras especiais no .htaccess e as chaves de licença não estão ativadas, tente remover as regras e então ativar as chaves de licença. Se as chaves de licença ativarem corretamente agora, você precisará ajustar as regras para permitir que as rotinas da API de licenciamento funcionem.
Requisições bloqueadas por um plugin de "em breve" ou "manutenção"
Se você está usando um plugin de "em breve" ou "modo de manutenção", é provável que as chaves de licença não possam ser ativadas, pois o plugin de "em breve" / "modo de manutenção" bloqueará as requisições. Para resolver o problema, simplesmente desative o modo de manutenção ou o plugin "em breve". Se precisar deixá-lo ativo, desative-o temporariamente para testar o processo de ativação da chave de licença e então reative o plugin.
