Histórico de mensagens sobre url POST em pix

EXIBINDO CONVERSAS RECENTES:

Texto: url POST
Canal: pix
Avatar discord do usuario ezequielsp

ezequielsp

Me passem uma url de teste e eu tento fazer o POST.. 😉

Avatar discord do usuario franciscorsobrinho

franciscorsobrinho

Como você está no ambiente de homologação, certifique-se de que esteja usando a url "https://api-pix-h.gerencianet.com.br/v2/cob/INFORME_O_TXID_AQUI". Talvez esteja faltando o "/v2" ou talvez você tenha esquecido de acrescentar o txid no final da url. E o método para criar cobrança é PUT. Talvez esteja usando POST

Avatar discord do usuario oleoessencial

oleoessencial

Ver Respostas

gera ai o codigo php com curl e manda para agente ver no postman.

Avatar discord do usuario oleoessencial

oleoessencial

Exemplo para testar a sua url do webook em modo desenvolvimento com php .


$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://sua_url_aqui/webhook.php',
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 =>'{
"pix": [
{
"endToEndId": "E12345678202009091221syhgfgufg",
"txid": "c3e0e7a4e7f1469a9f782d3d4999343c",
"valor": "110.00",
"horario": "2020-09-09T20:15:00.358Z",
"infoPagador": "0123456789",
"devolucoes": {
"id": "123ABC",
"rtrId": "D12345678202009091221abcdf098765",
"valor": "10.00",
"horario": {
"solicitacao": "2020-09-09T20:15:00.358Z"
},
"status": "EM_PROCESSAMENTO"
}
}
]
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: text/plain'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Avatar discord do usuario oleoessencial

oleoessencial

Ver Respostas

#solução para testes do webhook em modo desenvolvimento. Principalmente para quem não fez o mTLS ainda para usar em produção, é só criar um POST , no postman na sua url de recebimento do webhook no servidor e inserir as informações do json que é enviado no Body em raw no postman , este é um exemplo de envio que a GN faz em json abaixo que usei no raw

{
"pix": [
{
"endToEndId": "E12345678202009091221syhgfgufg",
"txid": "c3e0e7a4e7f1469a9f782d3d4999343c",
"valor": "110.00",
"horario": "2020-09-09T20:15:00.358Z",
"infoPagador": "0123456789",
"devolucoes": {
"id": "123ABC",
"rtrId": "D12345678202009091221abcdf098765",
"valor": "10.00",
"horario": {
"solicitacao": "2020-09-09T20:15:00.358Z"
},
"status": "EM_PROCESSAMENTO"
}
}
]
}

Avatar discord do usuario oleoessencial

oleoessencial

Ver Respostas

Se a pessoa tiver a sua url e tambem tiver todos os dados da cobrança sem você ter o mTLS, ela pode enviar um POST para a url e se seu sistema validar os dados enviados, vai interpretar que foi pago. Ja que em uma cobrança todos os dados são expostos e são abertos. Por isso a importancia do mTLS com o certificado da GN.

Avatar discord do usuario anoni_mato

anoni_mato

Ver Respostas

o hostname que vai receber os requests (para as URLs registradas como webhook) precisa fechar um mTLS com o certificado fornecido pela GN, então não dá pra colocar atrás do Cloudflare (precisa deixar a "nuvem cinza" na página de DNS para o IP ficar exposto). mas os IPs podem ser filtrados diretamente no seu servidor, obviamente.

Avatar discord do usuario oleoessencial

oleoessencial


$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;

Avatar discord do usuario rodolfo.santos8069

rodolfo.santos8069

Ver Respostas

Muda para:

CURLOPT_POSTFIELDS => json_encode(array('grant_type' => 'client_credentials')),

Avatar discord do usuario jaoedson

jaoedson

Ver Respostas

Acredito que conseguir pagar ele consiga, o que vai acontecer é que quando a atualização de status for enviada para a url cadastrada no webhook seu sistema não conseguirá fazer a atualização/validação interna neste momento. Você pode dar um GET da cobrança depois para verificar o status da cobrança. Mas normalmente(como acontece com postbacks de cartão de crédito e boleto) os getways sempre enviam mais de 1 vez quando recebe resposta de erro.

Avatar discord do usuario jaoedson

jaoedson

Ver Respostas

Gente, sobre o webhook. No caso só precisamos cadastrar uma url para receber os post apenas uma vez e não passar toda vez a cada transação, não é?

Avatar discord do usuario marcosnicolau3509

marcosnicolau3509

Ver Respostas

<@!710205440956563536> e <@!709030803291635736> , a URL gerada, se colocar no navegador, já baixa o JWS. Para fazer o GET, é exigida uma conexão mTLS. Me parece que o que vocês estão vendo é por conta de uma configuração do servidor. No postman dá certo, pois o postman possui o próprio certificado. No servidor de vocês, acredito, precisaremos ter um certificado mTLS. Estamos falando do certificado do servidor, que deve estar ativo. Vamos continuar acompanhando aqui.

Avatar discord do usuario lorenacastro

lorenacastro

Ver Respostas

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 "
";
}

Avatar discord do usuario lorenacastro

lorenacastro

usa assim CURLOPT_POSTFIELDS => '{"grant_type":"client_credentials"}',

Avatar discord do usuario oleoessencial

oleoessencial

Ver Respostas

olá, usei isso porem quando envio a erro no CURLOPT_POSTFIELDS => json_encode("{"grant_type": "client_credentials"}"),

Avatar discord do usuario lorenacastro

lorenacastro

eu fiz assim, para teste:

function auth() {
$ch = curl_init();

$requestURL = 'https://api-pix-h.gerencianet.com.br/oauth/token';
$cliendId = ''; //seu client id
$clientSecret = ''; //seu client secret
$authorization = base64_encode($cliendId . ":" . $clientSecret);
$certFile = ''; //o caminho do certificado
$arr = ['grant_type' => 'client_credentials'];
$headers = [];
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Basic ' . $authorization;

curl_setopt($ch, CURLOPT_URL, $requestURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($arr));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SSLCERT, $certFile);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
$resposta = json_decode($result);

if (curl_errno($ch)) {
die('Erro: ' . curl_error($ch));
}

curl_close($ch);

return $resposta->access_token;
}

Avatar discord do usuario oleoessencial

oleoessencial

Ver Respostas

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 "
";

Avatar discord do usuario bartwitch

bartwitch

pode ver na url ali post, está completa ao invés de {{gn-pix-api}}...

Avatar discord do usuario oleoessencial

oleoessencial

> eu fiz assim:
>
> $headers = array();
> $headers[] = 'Accept: application/json';
> $headers[] = 'Content-Type: application/json';
> $headers[] = 'Authorization: Basic ' . $access_token;
> curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
<@!709030803291635736> vou testar tudo com o Postman, depois ele mesmo cria o Curl 🙂 para cada endpoint.

Avatar discord do usuario oleoessencial

oleoessencial

Eu usarei cURL com php, nunca usei postman.