Você esta recebendo algum código de erro? Me parece na verdade que a requisição pode estar dando um timeout antes de chegar na API
Termos mais procurados:
Termos mais procurados:
Você esta recebendo algum código de erro? Me parece na verdade que a requisição pode estar dando um timeout antes de chegar na API
Confere se esta enviando algo assim:
CURLOPT_URL => 'https://....',
CURLOPT_PORT => 8443,
CURLOPT_SSLCERT => $codificado,
CURLOPT_SSLKEY => $decodificado,
CURLOPT_CAINFO => $codificado,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_FAILONERROR => 1,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_CUSTOMREQUEST => 'POST',
Você só precisa consultar em caso de timeout para ver se não veio mesmo o pagamento e você consulta por desencargo de consciência.
curl_setopt_array($curl, array(
CURLOPT_URL => $_ENV["PIX_URL_AUTH"], // Rota base, desenvolvimento ou produção
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\r\n \"grant_type\": \"client_credentials\"\r\n}",
CURLOPT_SSLCERT => $arq_certificado, // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Authorization: Basic $authorization",
"Content-Type: application/json",
),
));
api pix tá online galera? To recebendo timeout
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api-pix-h.gerencianet.com.br/oauth/token", // Rota base, desenvolvimento ou produção
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => '{"grant_type": "client_credentials"}',
CURLOPT_SSLCERT => $config["certificado"], // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Authorization: Basic $autorizacao",
"Content-Type: application/json"
),
));
function getAccessToken($pix_url_auth, $arq_certificado, $client_id, $client_secret)
{
/
# Esta rotina consome um endpoid POST da Gerencianet para realizar a geração do AccessToken
/
$curl = curl_init();
$authorization = base64_encode("$client_id:$client_secret");
curl_setopt_array($curl, array(
CURLOPT_URL => $pix_url_auth, // Rota base, desenvolvimento ou produção
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => '{"grant_type": "client_credentials"}',
CURLOPT_SSLCERT => $arq_certificado, // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Authorization: Basic $authorization",
"Content-Type: application/json"
),
));
$response = curl_exec($curl);
curl_close($curl);
return json_decode($response, true);
}
Como ainda não tenho o webhook operando, minha principal rota de baixa é pelo ajax de 10 em 10 segundos.
Sim, o final da análise de uma consulta aciona a consulta seguinte via setTimeout, caso o pagamento ainda não tenha sido feito.
Dificilmente uso o setInterval
se vc estiver consultando pelo GET /pix na GN, 10 segundos é interessante, conservador. mas se vc vai consultar no seu próprio banco de dados se o pedido/pix tá pago ou não, 2 ou 5 segundos é perfeitamente aceitável. e seja como for, é interessante encadear as consultas (acionar a primeira, e fazer a próxima ser enviada após o retorno da primeira + X segundos, por um setTimeout disparado). se fizer um setInterval pode emparelhar muitos requests e sobrecarregar seu sistema
você está passando os dados do Body ?
Usei o Curl da Lib PHP, com pequena adição de logs, segue o Curl usado:
Pessoal é normal o getPayload dar timeout?
Aqui está levando um minuto e pouco e acaba dando Timeout
Exemplo para testar a sua url do webook em modo desenvolvimento com php .
Rodando o ping na minha máquina:
ping qrcodes-pix-h.gerencianet.com.br
PING qrcodes-pix-h-gerencianet-1256127902.us-east-1.elb.amazonaws.com (54.84.126.253): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Rodando do servidor de testes:
ping qrcodes-pix-h.gerencianet.com.br
PING qrcodes-pix-h-gerencianet-1256127902.us-east-1.elb.amazonaws.com (54.157.134.53) 56(84) bytes of data.
^C
--- qrcodes-pix-h-gerencianet-1256127902.us-east-1.elb.amazonaws.com ping statistics ---
146 packets transmitted, 0 received, 100% packet loss, time 144999ms
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api-pix-h.gerencianet.com.br/oauth/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\r\n \"grant_type\": \"client_credentials\"\r\n}",
CURLOPT_HTTPHEADER => array(
"x-client-cert-pem: {{X-Certificate-Pem}}",
"Authorization: Basic Q3334f34f34f3g5355gh56hg5w6h457wg457w54w56h7w56f5f6wNzVmZGQxNGU2MDMxMjlhNTMw",
"Content-Type: application/json"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
$file = file_get_contents("./config.json");
$config = json_decode($file, true);
$environment = ($config["sandbox"] === true) ? "development" : "production";
$certfile = $config[$environment]["certificate_name"];
$curl = curl_init();
curl_setopt_array($curl, array (
CURLOPT_URL => $location,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_SSLCERT => $certfile,
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array (
"Authorization: Bearer " . $access_token,
"Content-Type: application/json"
),
));
$response = curl_exec($curl);
echo $response;
function auth() {
$file = file_get_contents("./config.json");
$config = json_decode($file, true);
$environment = ($config["sandbox"] === true) ? "development" : "production";
$certfile = $config[$environment]["certificate_name"];
$curl = curl_init();
$authorization = base64_encode($config[$environment]["client_id"] . ":" . $config[$environment]["client_secret"]);
curl_setopt_array($curl, array(
CURLOPT_URL => $config[$environment]["pix_auth_url"], // Rota base, desenvolvimento ou produção
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => '{"grant_type":"client_credentials"}',
CURLOPT_SSLCERT => $certfile, // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Authorization: Basic $authorization",
"Content-Type: application/json"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo "
";";
echo $response;
echo "
Estou tentando usar este exemplo , aonde eu pego o {"grant_type": "client_credentials"} ?
$file = file_get_contents("./config.json");
$config = json_decode($file, true);
$environment = ($config["sandbox"] === true) ? "development" : "production";
$certfile = "./certificate/" . $config[$environment]["certificate_name"];
$curl = curl_init();
$authorization = base64_encode($config[$environment]["client_id"] . ":" . $config[$environment]["client_secret"]);
curl_setopt_array($curl, array(
CURLOPT_URL => $config[$environment]["pix_auth_url"], // Rota base, desenvolvimento ou produção
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode("{"grant_type": "client_credentials"}"),
CURLOPT_SSLCERT => $certfile, // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Authorization: Basic $authorization",
"Content-Type: application/json"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo "
";";
echo $response;
echo "