<html lang="pt-br" dir="ltr"><head></head><body># Links de download inválidos devido à modificação da ordem das strings de consulta

O Easy Digital Downloads possui um sistema robusto para manter seus links de download de arquivos seguros e evitar abusos. Quando um link de download de arquivo é clicado, a ordem dos parâmetros fornecidos é importante. De tempos em tempos, certas configurações de hospedagem, camadas de cache ou provedores de CDN podem reordenar os parâmetros da string de consulta para permitir algum cache de nível básico. A reordenação desses itens fará com que o Easy Digital Downloads falhe na validação do token para o link de download de um cliente.

Como posso saber se este é o meu problema?
-----------------------------------

 Se, quando um usuário clica para baixar seus arquivos, ele recebe o erro "Você não tem permissão para baixar este arquivo", verifique se o URL ainda tem o seguinte formato, prestando muita atenção à ordem dos parâmetros.

```
https://example.org/index.php?eddfile=...&amp;ttl=...&amp;file=...&amp;token=...
```

 Se os parâmetros da string de consulta não estiverem na ordem acima, então você está enfrentando o problema descrito acima. Temos algumas soluções para ajudar a evitar que isso ocorra.

Se você configurou um sistema de cache de página, como Cloudflare ou Varnish, ainda poderá ver este erro, mesmo que seus parâmetros pareçam estar na ordem correta. Isso ocorre porque o sistema de cache de página classifica esses parâmetros antes de enviar sua solicitação ao servidor web para ser processada pelo PHP.

Como posso evitar este problema?
-----------------------------

### Alterações na configuração de hospedagem

A situação ***ideal*** é não ter seus provedores reordenando os parâmetros da string de consulta quando a solicitação é para um download de arquivo, impedindo que qualquer solicitação contendo o parâmetro de consulta *eddfile* passe pelas regras de reordenação.

Se você estiver usando o Cloudflare e ativou o recurso [Query String Sort](https://support.cloudflare.com/hc/en-us/articles/206776797-Understanding-Query-String-Sort), você poderá desativar esse recurso para permitir que os usuários baixem seus arquivos sem erros.

### Trecho de código personalizado

 Reconhecemos que isso nem sempre pode ser possível com alguns provedores, por isso escrevemos uma pequena função que executará qualquer validação falha uma segunda vez, para verificar se recebemos os itens na ordem correta.

```
function ck_custom_validate_url_token( $ret, $url, $query_args ) {
	// Se a validação básica falhou, vamos garantir que os parâmetros do URL estavam na ordem correta e tentar novamente
	if ( false === $ret ) {
		$parts   = parse_url( $url );
		wp_parse_str( $parts['query'], $query_args );

		$fix_arg_order = array(
			'eddfile' =&gt; $query_args['eddfile'],
			'ttl'     =&gt; $query_args['ttl'],
			'file'    =&gt; $query_args['file'],
			'token'   =&gt; $query_args['token'],
		);

		$fixed_url   = add_query_arg( $fix_arg_order, site_url() );
		$fixed_token = edd_get_download_token( $fixed_url );

		$ret         = $query_args['token'] === $fixed_token;
	}

	return $ret;
}
add_filter( 'edd_validate_url_token', 'ck_custom_validate_url_token', 10, 3 );
```

A função acima deve ser testada em um [ambiente de staging](https://easydigitaldownloads.com/blog/staging-site-e-commerce/) antes de ser usada em um ambiente de produção, para verificar se funciona corretamente em sua configuração específica.</body></html>