<html lang="pt-br" dir="ltr"><head></head><body># API de Licenciamento de Software

A API incluída com a extensão [Software Licensing](https://easydigitaldownloads.com/extension/software-licensing/) permite ativar remotamente chaves de licença, verificar se as chaves são válidas (e não expiraram), e também recuperar informações sobre as últimas versões do software. Esta API pode ser implementada com a maioria dos softwares, não apenas com Plugins e Temas do WordPress.

##### Neste Artigo

[Requisições e Parâmetros da API Disponíveis](#api-requests-parameters "Requisições e Parâmetros da API Disponíveis
")[Integração com Plugins e Temas WordPress](#wordpress-intregration "Integração com Plugins e Temas WordPress
")[Ativar uma Chave de Licença](#activate_license "Ativar uma Chave de Licença
")[Verificar se uma Licença é Válida / Ativa](#check_license)[Obter informações de versão](#get_version "Obter informações de versão
")[Recuperar versões de múltiplos produtos de uma vez](#versions-for-multiple-products "Recuperar versões de múltiplos produtos de uma vez")
[Exemplos de API em outras linguagens](#examples "Acessando a API em outras linguagens")
[FAQ / Solução de Problemas](#faqs "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 Download + 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://SEUSITE.com/?edd_action={tipo de requisição}&amp;item_id={ID do download aqui}&amp;license=cc22c1ec86304b36883440e2e84cddff&amp;url={url do site que está sendo licenciado}
```

**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 as referências antigas 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, softwares desktop podem 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 com Plugins e Temas WordPress:** Consulte os seguintes documentos sobre a integração da API de Licenciamento de Software com Plugins e Temas WordPress: 
[Veja nossa documentação sobre como integrar atualizações automáticas para seus plugins WordPress](https://easydigitaldownloads.com/docs/software-licensing-updater-implementation-for-wordpress-plugins/).
[Veja nossa documentação sobre como integrar atualizações automáticas para seus temas WordPress](https://easydigitaldownloads.com/docs/software-licensing-updater-implementation-for-wordpress-themes/)

### Ativar uma Chave de Licença

Para ativar uma licença remotamente, o URL que você usará é:

```
https://SEUSITE.com/?edd_action=activate_license&amp;item_id=8&amp;license=cc22c1ec86304b36883440e2e84cddff&amp;url=https://sitesolicitado.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:

![](https://easydigitaldownloads.com/wp-content/uploads/2022/07/6184cd1d4b999.jpg)O parâmetro *license* é definido como a chave de licença que você deseja ativar.

A resposta para esta requisição será um objeto JSON. Se a licença foi ativada com sucesso, a resposta será:

```
{
    "success": true,
    "license": "valid",
    "item_id": false (ou ID do Item se passado)
    "item_name": "Nome do Produto EDD",
    "license_limit": 0,
    "site_count": 2,
    "expires": "2020-06-30 23:59:59",
    "activations_left": "unlimited",
    "checksum": "&lt;md5 checksum&gt;",
    "payment_id": 12345,
    "customer_name": "John Doe",
    "customer_email": "john@sample.org",
    "price_id": "2"
}
```

Se a licença for inválida e não puder ser ativada, a resposta será:

```
{
    "success": false,
    "license": "invalid",
    "item_id": false (ou ID do Item se passado)
    "item_name": "Nome do Produto EDD",
    "error": "expired",
    "expires": "2020-04-28 23:59:59",
    "license_limit": 0,
    "site_count": 1,
    "activations_left": "unlimited",
    "checksum": "&lt;md5 checksum&gt;",
    "payment_id": 12345,
    "customer_name": "John Doe",
    "customer_email": "john@sample.com",
    "price_id": "2" 
  } 
  
```

Erros possíveis:

```
"missing" - Licença não existe
"missing_url" - URL não fornecido
"license_not_activable" - Tentando ativar a licença principal de um pacote
"disabled" - Chave de licença revogada
"no_activations_left" - Sem ativações restantes
"expired" - Licença expirou
"key_mismatch" - Licença não é válida para este produto
"invalid_item_id" - ID do Item inválido
"item_name_mismatch" - Licença não é válida para este produto
"site_inactive" - Site não está ativo para esta licença
"invalid" - Chave de licença não corresponde
"valid" - Licença é válida
```

### Verificar se uma Licença é Válida / Ativa

Verificar se uma licença é válida e não expirou é muito semelhante a ativar. Esta requisiçã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://SEUSITE.com/?edd_action=check_license&amp;item_id=8&amp;license=cc22c1ec86304b36883440e2e84cddff&amp;url=https://sitesolicitado.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:

![](https://easydigitaldownloads.com/wp-content/uploads/2022/07/6184cd1d4b999.jpg)O parâmetro *license* é definido como a chave de licença que você deseja verificar.

A resposta para esta requisiçã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, (ou ID do Item se passado)
    "item_name": "Nome do Produto EDD",
    "checksum": "&lt;md5 checksum=""&gt;",
    "expires": "2020-06-30 23:59:59",
    "payment_id": 12345,
    "customer_name": "John Doe",
    "customer_email": "john@example.org",
    "license_limit": 0,
    "site_count": 2,
    "activations_left": "unlimited",
    "price_id": "2"
}
&lt;/md5&gt;
```

Se a licença for inválida, a resposta será:

```
{
    "success": false,
    "license": "invalid",
    "item_id": false, (ou ID do Item se passado)
    "item_name": "Nome do Produto EDD",
    "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": "john@sample.com",
    "price_id": "2"
}
```

Possíveis status de licença:

```
"disabled" - Chave de licença revogada
"expired" - Licença expirou
"key_mismatch" - Licença não é válida para este produto
"invalid_item_id" - ID do Item inválido
"item_name_mismatch" - Licença não é válida para este produto
```

### Obter 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://SEUSITE.com/?edd_action=get_version&amp;item_id=8&amp;license=cc22c1ec86304b36883440e2e84cddff&amp;url=https://sitesolicitado.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:

![](https://easydigitaldownloads.com/wp-content/uploads/2022/07/6184cd1d4b999.jpg)#### Notas sobre a requisição: 

- Se usar *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 omitidos, as informações da última versão serão recuperadas, mas nenhum link de download será incluído.
- A partir da versão 3.8 do Software Licensing, você pode incluir versões de plataforma na requisição. Se a versão da plataforma não atender aos requisitos mínimos definidos para o produto no Easy Digital Downloads, o `new_version` na resposta será `false` em vez do número da nova versão. `php_version` e `wp_version` sã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:"&lt;p&gt;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.&lt;/p&gt;n";s:9:"changelog";s:0:"";}",
  "banners": "a:2:{s:4:"high";s:0:"";s:3:"low";s:0:"";}"
}
```

#### Notas sobre a resposta:

- Se nenhuma chave de licença for fornecida na requisição get\_version, as informações da versão ainda serão retornadas; no entanto, os valores de package 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 requisição, uma resposta de erro será retornada com um motivo como valor da 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 ser limpo antes de obter a atualização.
- A propriedade *sections* é um array serializado que inclui a descrição completa do produto e o changelog. Se usar [Análise de ReadMe.txt para plugins WordPress](https://easydigitaldownloads.com/docs/software-licensing-parsing-readme-txt-files-in-wordpress-plugins/), também incluirá informações adicionais fornecidas através do arquivo readme.

Se você deseja recuperar informações sobre uma [versão beta](https://easydigitaldownloads.com/docs/software-licensing-releasing-beta-versions/), anexe *&amp;beta=1* ao URL da sua requisição de API, assim:

```
https://SEUSITE.com/?edd_action=get_version&amp;item_id=8&amp;license=cc22c1ec86304b36883440e2e84cddff&amp;url=https://sitesolicitado.com&amp;beta=1
```

### Recuperar versões de múltiplos produtos de uma vez

Recupere versões de múltiplos produtos em uma única requisição, usando o argumento `products`. Este argumento aceita um array de itens. Cada item deve conter os mesmos argumentos enviados em uma única requisiçã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://sitesolicitado.com" -d products[1][item_id]=46 -d products[1][license]=5cdd12a966c498fc6e423e261fe05303 -d products[1][url]="https://sitesolicitado.com" https://SEUSITE.com
```

E aqui está um exemplo usando a função WordPress
`wp_remote_post()`:

```
$response = wp_remote_post( 'https://SEUSITE.com', array(
	'body' =&gt; array(
		'edd_action' =&gt; 'get_version',
		'products'   =&gt; array(
			'meu-primeiro-plugin' =&gt; array(
				'item_id' =&gt; 356,
				'license' =&gt; '59cc77ea94a2d867069a9d96142a35b8',
				'url'     =&gt; 'https://sitesolicitado.com'
			),
			'meu-segundo-plugin' =&gt; array(
				'item_id' =&gt; 46,
				'license' =&gt; '5cdd12a966c498fc6e423e261fe05303',
				'url'     =&gt; 'https://sitesolicitado.com'
			)
		)
	)
) );
```

A resposta será um objeto JSON contendo os resultados para cada um dos produtos fornecidos. As chaves de produto que você forneceu na requisição serão mantidas na resposta. Aqui está um exemplo:

```
{
  "meu-primeiro-plugin": {
    "new_version": "2.0",
    "stable_version": "2.0",
    "name": "Meu Primeiro Plugin",
    "slug": "meu-primeiro-plugin",
    "url": "https://edd.com/downloads/meu-primeiro-plugin/?changelog=1",
    "last_updated": "2021-01-03 11:59:46",
    "homepage": "https://edd.com/downloads/meu-primeiro-plugin/",
    "package": "",
    "download_link": "",
    "sections": "a:2:{s:11:"description";s:793:"&lt;p&gt;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.&lt;/p&gt;n";s:9:"changelog";s:0:"";}",
    "banners": "a:2:{s:4:"high";s:0:"";s:3:"low";s:0:"";}"
  },
  "meu-segundo-plugin": {
    "new_version": "1.3",
    "stable_version": "1.3",
    "name": "Meu Segundo Plugin",
    "slug": "meu-segundo-plugin",
    "url": "https://edd.com/downloads/meu-segundo-plugin/?changelog=1",
    "last_updated": "2021-03-08 11:59:46",
    "homepage": "https://edd.com/downloads/meu-segundo-plugin/",
    "package": "",
    "download_link": "",
    "sections": "a:2:{s:11:"description";s:793:"&lt;p&gt;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.&lt;/p&gt;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 requisições HTTP POST simples, ela pode ser acessada em praticamente qualquer linguagem. Aqui estão alguns exemplos.

- [API de Licenciamento de Software - Exemplo usando cURL](https://easydigitaldownloads.com/docs/software-licensing-api-example-using-curl/)
- [API de Licenciamento de Software - Exemplo usando Perl](https://easydigitaldownloads.com/docs/software-licensing-api-example-using-perl/)
- [API de Licenciamento de Software - Exemplo usando Python](https://easydigitaldownloads.com/docs/software-licensing-api-example-using-python/)
- [API de Licenciamento de Software - Exemplo usando Ruby](https://easydigitaldownloads.com/docs/software-licensing-api-example-using-ruby/)
- [API de Licenciamento de Software - Exemplo usando C#](https://easydigitaldownloads.com/docs/software-licensing-api-example-using-c/)
- [API de Licenciamento de Software - Exemplo usando JavaScript](https://easydigitaldownloads.com/docs/software-licensing-api-example-using-javascript/)
- [API de Licenciamento de Software - Exemplo usando jQuery](https://easydigitaldownloads.com/docs/software-licensing-api-example-using-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](https://easydigitaldownloads.com/docs/software-licensing-common-issues-and-faqs/).

**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 associada 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](https://easydigitaldownloads.com/downloads/software-licensing/), aqui estão algumas dicas para ajudar a resolver problemas comuns.

##### **Requisições bloqueadas por um plugin de segurança**

Plugins de segurança para WordPress frequentemente têm recursos que interferem nas requisições da API de chave de licença. Esses recursos tendem a fazer com que a ativação (e outras requisições de API) retorne uma resposta inesperada, causando falha na rotina de ativação.

Por exemplo, você pode receber uma resposta como esta do servidor se tiver um plugin de segurança que esteja interferindo:

```
[response] =&gt; Array
	(
		[code] =&gt; 403
		[message] =&gt; Forbidden
)
```

O plugin iThemes Security é conhecido por ter uma configuração que pode causar esse problema. A configuração é chamada
*Filter Suspicious Query Strings in the URL*

Para resolver o problema, simplesmente desative a configuração 
*Filter Suspicious Query Strings in the URL*. Se você não estiver usando o iThemes Security, ele terá um nome diferente, embora semelhante.

##### Requisições bloqueadas por regras especiais de .htaccess

Alguns sites adicionam regras especiais ao arquivo .htaccess para bloquear certos endereços IP ou adicionar proteção adicional ao site.

Se você tiver alguma regra especial de .htaccess em vigor e as chaves de licença não estiverem sendo ativadas, tente remover as regras e, em seguida, 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 </body></html>