Bom dia, @diton89.
As notificações são enviados pela Gerencianet via POST /pix.
Esta configuração é feita no Apache, certo? Então acredito que você tenha que criar a rota post /webhook/pix no Laravel também
Termos mais procurados:
Termos mais procurados:
Bom dia, @diton89.
As notificações são enviados pela Gerencianet via POST /pix.
Esta configuração é feita no Apache, certo? Então acredito que você tenha que criar a rota post /webhook/pix no Laravel também
será que pode ser a url do post que estou enviando?
Primeiro você deve autenticar na API e obter o access_token.
seria isso:
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api-pix-h.gerencianet.com.br/v2/cob/$id",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POSTFIELDS =>'{
"calendario": {
"expiracao": 3600
},
"devedor": {
"cpf": "02279112312",
"nome": "Maria apareciada monteiro"
},
"valor": {
"original": "10.21"
},
"chave": "",
"solicitacaoPagador": "Mensaldiade Monteiro Sistemas"
}',
CURLOPT_HTTPHEADER => array(
"authorization: {{$autorizacao}}",
"x-client-cert-pem: {{$config["certificado"]}}"
),
));
echo $curl;
$response = curl_exec($curl);
curl_close($curl);
echo $response;
chama a sua url direto no postman passando esse body e ve se sua aplicação ta recebendo
baseURL: 'https://api-pix.gerencianet.com.br',
0|server | httpsAgent: [Agent],
0|server | method: 'post',
0|server | url: '/v2/cob',
0|server | data: '{"calendario":{"expiracao":3600},"valor":{"original":"0.10"},"chave":"5a251fa5-0fe2-49d1-9d66-9987bab4571c","solicitacaoPagador":"Transfira um pix para sua conta betbol."}'
A mensagem "A URL informada está inacessível" para uso só de grupojvs.dev tinha mais detalhes do erro ? Como é a resposta na íntegra ?
Como nao auth se estou usando a url de auth do postman pegando o token e informando no bearer
O exemplo que tem na documentação da GN é assim:
Segue o exemplo:
function gerenciaPay(){
$url = "https://api-pix-h.gerencianet.com.br/oauth/token";
try{
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, base64_encode("Client_Id_" . ":" . "Client_Secret_") );
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json,application/octet-stream'));
curl_setopt($curl, CURLOPT_SSLCERTTYPE, "P12");
curl_setopt($curl, CURLOPT_SSLCERT, 'homologacao-');
// curl_setopt($curl, CURLOPT_SSLCERTPASSWD, 'senha do certificado');
// curl_setopt($curl, CURLOPT_SSLKEYPASSWD, 'senha do certificado');
$resp = curl_exec($curl);
ustilizo curl_setopt_array($curl, array(
CURLOPT_URL => $vrota,
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'],
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Authorization: Basic $autorizacao",
"Content-Type: application/json"
),
));
requestCert tem que ser true, rejectUnauthorized false.
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api-pix.gerencianet.com.br/v2/webhook/" . $chave, // Rota base, homologaço 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 => "PUT",
CURLOPT_POSTFIELDS => $json,
CURLOPT_SSLCERT => $config["certificado"], // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"authorization: Bearer " . $access_token,
"x-skip-mtls-checking: false"
),
));
$response = curl_exec($curl);
Boa noite. Não requer cadastro. É só prefixar a sua URL com mtls.pix.ae.
Exemplo: https://seudominio.com/seuendpoint
Vira: https://mtls.pix.ae/seudominio.com/seuendpoint
Meu sistema faz a validação mTLS da GN, repassa o request para o seu endpoint, lê a sua resposta e responde a GN de acordo com sua resposta. Se a validação da GN não passar, meu sistema nem te repassa o request, responde 400 direto, de forma que a GN entenda que o seu sistema está preparado e realizando a validação (mesmo que isso esteja acontecendo, de fato, no próprio servidor do pix.ae).
Fala <@!728929518344994836> ! tudo ótimo por aqui!
Verifiquei aqui e essa falha pode estar acontecendo por conta de algum módulo de um repositório com um certificado SSL incompatível com os demais.
Atualizei nossa documentação também pois notei que o body-parser está "depreciado" e as funções foram incorporadas ao express, dessa forma pode remover a linha
const bodyParser = require("body-parser");
E substituir o trecho:
Beleza! Tudo bem? <@!795645731385901076>
Obrigado pela ajuda, segue:
const express = require("express");
const app = express();
const { WebhookClient } = require("dialogflow-fulfillment");
const bodyParser = require("body-parser");
const mysql = require ('mysql');
var logger = require('morgan');
////////////////// HTTPS
const fs = require("fs");
const https = require("https");
const options = {
key: fs.readFileSync("key.pem"),
cert: fs.readFileSync("cert.crt"),
ca: fs.readFileSync("chain-pix-prod.crt"),
minVersion: "TLSv1.2",
requestCert: true,
rejectUnauthorized: false
};
///////////////// HTTPS (FIM)
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static("public"));
////////////////// GERENCIANET (PIX)
app.post("/gerencianet", (request, response) => {
console.log('Entrou gerencia-net');
response.status(200).end();
// Verifica se a requisição que chegou nesse endpoint foi autorizada
if (request.socket.authorized) {
response.status(200).end();
} else {
response.status(401).end();
}
});
// Endpoind para recepção do webhook tratando o /pix
app.post("/gerencianet/pix", (request, response) => {
response.status(200).end();
console.log('Entrou gerencia-net');
if (request.socket.authorized){
var body = request.body;
console.log(body);
response.status(200).end();
}else{
response.status(401).end();
}
});
//////////////////GERENCIANET - FIM(PIX)
//////////////////////////// HTTPS
https.createServer(options, app).listen(8000);
console.log('Servido NODE (HTTPS) na Porta: 8000!');
/////////////////////////// HTTPS
O exemplo da consultoria da Gerencianet para Express é assim: