[Resolvido] Alternativas ao NAMESPACE

Prezados, preciso utilizar a biblioteca:
https://github.com/guzzle/guzzle

Mas como já vi no
https://forum.scriptcase.com.br/t/resolvido-nfephp-com-composer/17268?u=guipassos
O Scriptcase não funciona com NAMESPACE.

Tentei a alternativa de @evanjos
https://forum.scriptcase.com.br/t/resolvido-nfephp-com-composer/17268/18?u=guipassos

E também a de @Felipe_Ladislau
https://forum.scriptcase.com.br/t/resolvido-nfephp-com-composer/17268/21?u=guipassos

Mas todas retornam Error 500, porém se faço direto pelo PHP, fora do Scriptcase, funciona.

Alguém poderia me ajudar, mostrando o que estou fazendo de errado?

Arquivo index.php:

<?php
	require_once 'vendor/autoload.php';

	use GuzzleHttp\Client;
	use GuzzleHttp\Exception\RequestException;
	use GuzzleHttp\Psr7\Request;
	use GuzzleHttp\Psr7\Response;
	use Corviz\BrGpdpl\Anonymizer\CpfAnonymizer;
?>

onExecute:

sc_include_library("prj", "teste", "index.php", true, true);

// Initialize GuzzleHttp client
$client = new GuzzleHttp\Client();

// Define request parameters
$method = 'GET';
$url = 'https://gateway.apiserpro.serpro.gov.br/consulta-cpf-df-trial/v1/cpf/40442820135';
$headers = [
    'Authorization' => 'Bearer 06aef429-a981-3ec5-a1f8-71d38d86481e'
];
$body = '';

// Define exponential backoff parameters
$maxRetries = 5;
$retryDelay = 1000; // in milliseconds
$retryCount = 0;

// Perform the request with exponential backoff
do {
    try {
        // Create a new request
        $request = new Request($method, $url, $headers, $body);
        // Send the request asynchronously
        $response = $client->sendAsync($request)->wait();
        // Check if the response is successful
        if ($response->getStatusCode() === 200) {
            // Process the response
            echo $response->getBody();
            break; // Break out of the loop on success
        }
    } catch (RequestException $e) {
        // Handle request exceptions
        if ($e->hasResponse() && $e->getResponse()->getStatusCode() === 429) {
            // Retry if rate limit exceeded
            usleep($retryDelay * 1000); // Convert milliseconds to microseconds
            $retryDelay *= 2; // Double the retry delay for exponential backoff
            $retryCount++;
            continue; // Retry the request
        } else {
            // Handle other types of exceptions
            echo 'Error: ' . $e->getMessage();
            break; // Break out of the loop on error
        }
    }
} while ($retryCount < $maxRetries);

if ($retryCount === $maxRetries) {
    echo 'Exceeded maximum number of retries.';
}

Agradeço muito a ajuda, pois não sei mais o que fazer :pensive:

Remova os use e namespace e colocque o caminho no new

$obj = new \CLASSDIR\CLASSNAME;

2 Curtidas

Olá, @InfinitusWeb

Testei assim:

sc_include_library("prj", "teste", "vendor/autoload.php", true, true);

// Initialize GuzzleHttp client
$client = new \GuzzleHttp\Guzzle\Src\Client;

// Define request parameters
(...)

Tentei assim:

sc_include_library("prj", "teste", "vendor/autoload.php", true, true);

// Initialize GuzzleHttp client
$client = new \GuzzleHttp\Guzzle\Client;

// Define request parameters
(...)

Tentei assim:

sc_include_library("prj", "teste", "vendor/autoload.php", true, true);

// Initialize GuzzleHttp client
$client = new \GuzzleHttp\Client;

// Define request parameters
(...)

Todos retornam Erro 500.

Como tinha dito em minha postagem inicial, eu tinha tentado [Solução do @evanjos [RESOLVIDO] - NFePHP com Composer) de retirar o namespace e colocar o caminho.

Alguma outra ideia de onde posso estar errando?

Bom, eu consigo utilizar dessa maneira:

Insiro o require apontado para a lib e o autoload dessa lib.

IMPORTANTE: lembre-se de colocar os arquivos na biblioteca externa.

require sc_url_library('prj', 'NOME_DA_LIB', 'autoload.php');

Depois para utilizar ela, você precisa apontar o contrutor com todo o namespace junto.

 $variavel = new NFePHP\NFe\Tools( PARÂMETROS DO CONSTRUTOR);

Após instanciar, agora consigo utilizar as funções que eu quero.

$variavel->model();

Tenta colocar uma barra na frente de vendor.

sc_include_library("prj", "teste", "/vendor/autoload.php", true, true);

E tenta remover a pasta vendor e deixar o autoload na raiz da pasta da biblioteca externa.

Assim:

sc_include_library("prj", "teste", "/vendor/autoload.php", true, true);

Continua o erro.

E assim:

sc_include_library("prj", "teste2", "autoload.php", true, true);

// Initialize GuzzleHttp client
$client = new \GuzzleHttp\Client;

// Define request parameters
$method = 'GET';
$url = 'https://gateway.apiserpro.serpro.gov.br/consulta-cpf-df-trial/v1/cpf/40442820135';
$headers = [
    'Authorization' => 'Bearer 06aef429-a981-3ec5-a1f8-71d38d86481e'
];
$body = '';

Continua … erro 500 :frowning_face: :pensive:

Precisa ver o real Caminho

Obrigado a todos pelo apoio.
Com a contribuição de cada um de vocês, consegui resolver. :grinning:

Você poderia compartilhar a solução para que os próximos com o mesmo problema conseguir solucionar?

2 Curtidas

Será que não vai compartilhr mesmo ?

1 Curtida

Provavelmente usou o caminho correto no comando new.

1 Curtida

Peço desculpas a todos (@InfinitusWeb, @DevFullTime e @robertobru) por não ter postado a solução imediatamente. Não foi egoísmo e sim desespero em por a solução p/ funcionar e entregar a solução.

No onExecute ficou assim:

Na linha 1 utilizei o index.php fora da vendor.

sc_include_library("prj", "teste", "index.php", true, true);

Na linha 32 utilizei o caminho completo (mesmo):

$request = new \GuzzleHttp\Psr7\Request($method, $url, $headers, $body);

E na linha 41 ficou assim:

} catch (\GuzzleHttp\Exception\RequestException $e) {

A dotEnv que não consegui e tive de retirar devido ao prazo, depois tentarei novamente.

// Chamar o método para carregar as variáveis de ambiente
$dotenv = Dotenv\Dotenv::createUnsafeImmutable(__DIR__);
$dotenv->load();

Novamente agradeço o apoio de todos, e também por me cobrarem a postagem da solução.
Em comunidade somos mais fortes!!!

1 Curtida