Histórico de mensagens sobre url POST em pix

EXIBINDO CONVERSAS RECENTES:

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

guilherme_efi

Ver Respostas

Boa tarde, @dadeke. Como vai?
Verifique esse detalhe da adição do /pix no final da sua URL que cadastrou.
Como está com o skip=true, você pode montar uma request no Postman para simular o envio da mensagem.

Avatar discord do usuario alissonmaciel_32335

alissonmaciel_32335

$config = [
"certificado" => ($sandbox) ? $pathCertificateHomolog : $pathCertificateProd,
"client_id" => ($sandbox) ? $clientIdHomolog : $clientIdProd,
"client_secret" => ($sandbox) ? $clientSecretHomolog : $clientSecretProd,
"rotas" => ($sandbox) ? $rotasHomolog : $rotasProd
];
$autorizacao = base64_encode($config["client_id"] . ":" . $config["client_secret"]);

$curl = curl_init();
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . '/errorlog.txt', 'w');

curl_setopt_array($curl, array(
CURLOPT_VERBOSE => true,
CURLOPT_STDERR => $fp,
CURLOPT_URL => $config['rotas'] . "/oauth/token", // 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 => "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"
),
));

$response = curl_exec($curl);

echo '

';
var_dump($config, $response);
echo '
';

curl_close($curl);

Avatar discord do usuario blackhawkx

blackhawkx

Ver Respostas

Você precisa criar a rota webhookUrl + /pix pra retornar um status code 200.
Quando e Efi acessar https://meusite.com/webhook/pix ela precisa dessa resposta pra validar a configuração.

Avatar discord do usuario blackhawkx

blackhawkx

Ver Respostas

Certo. Vamos lá.

Pra você parametrizar seu webhook, vou está usando o exemplo em examples\pix\webhooks\pixConfigWebhook.php.
No exemplo, você está substituindo o webhookUrl para https://meusite.com/webhook.
Ao executar o pixConfigWebhook.php ele vai validar e definir webhookUrl para a chave que você passou em params.

Para ele conseguir validar e definir ele precisa receber uma resposta de HTTP status code 200 de webhookUrl + /pix.
O SDK da Efi preenche automaticamente com /pix em todas requests para a webhookUrl que você definiu.
Ou seja, seu erro 404 pode ser por que a rota webhookUrl + /pix não existe no seu servidor - somente a webhookUrl (e que nunca será usada pela Efi).

Avatar discord do usuario tresbach

tresbach

Ver Respostas

Boa noite. Estou tentando configurar o webhook através do endpoint PUT /v2/webhook/:chave, enviei a URL sem trailing slash, mas parece que a barra é adicionada mesmo assim... Testei o pagamento e a requisição de notificação está sendo enviada pra um endpoint //pix (com duas barras)... Na imagem, corpo da requisição à esquerda e corpo da resposta à direita.
imagem enviada na mensagem pelo usuario tresbach

Avatar discord do usuario bernardocollet_36741

bernardocollet_36741

Ver Respostas

$config = [
"certificado" => __DIR__."/arquivo.pem",
"client_id" => "CLIENTEID",
"client_secret" => "CLIENTESECRET"
];
$autorizacao = base64_encode($config["client_id"] . ":" . $config["client_secret"]);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://pix.api.efipay.com.br/oauth/token", // 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 => "POST",
CURLOPT_POSTFIELDS => '{"grant_type": "client_credentials"}',
CURLOPT_SSLCERT => $config["certificado"],
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Authorization: Basic $autorizacao",
"Content-Type: application/json"
),
));
$response = curl_exec($curl);
curl_close($curl);
print_r($response);

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

Por default o curl manda GET. Precisa mandar POST nessa rota.

Avatar discord do usuario .viniciusc

.viniciusc

java
public static Cob createCharge(String token, String payload) {
Cob cob = null;
try {
Generex txid = new Generex("[a-zA-Z0-9]{26,35}");
URL url = new URL("https://api-pix-h.gerencianet.com.br/v2/cob/" + txid.random());
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("PUT");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Authorization", "Bearer " + token);

OutputStream os = conn.getOutputStream(); // O erro do connection reset ocorre aqui
os.write(payload.getBytes());
os.flush();

int responseCode = conn.getResponseCode();

StringBuilder responseBuilder = new StringBuilder();
BufferedReader br;

if (responseCode >= 400) {
br = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
} else {
br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
}

String response;
while ((response = br.readLine()) != null) {
responseBuilder.append(response);
}

//System.out.println("Código de resposta HTTP: " + responseCode);
//System.out.println("Resposta do servidor: " + responseBuilder);

JsonMapper mapper = JsonMapper
.builder()
.configure(MapperFeature.USE_ANNOTATIONS, false)
.build();

cob = mapper.readValue(responseBuilder.toString(), Cob.class);

conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return (cob != null) ? cob : new Cob();
}

Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Bom dia, @berzacola! Como vai?
A chave Pix do pagador que está utilizando no CURL, é a mesma que está no seu Postman?
Pois o webhook está associado a chave Pix.
imagem enviada na mensagem pelo usuario guilherme_efi

Avatar discord do usuario marcelo_efi

marcelo_efi

Ver Respostas

Bom dia, tudo bem ? Com o webhook você vai cadastrar uma URL do seu sistema para receber notificações sobre os pagamentos da sua chave PIX. Sempre que houver uma mudança no status da cobrança, enviaremos um POST contendo o conteúdo da transação. Você pode encontrar mais detalhes sobre o webhook em nossa documentação: https://dev.gerencianet.com.br/docs/api-pix-endpoints#webhooks

Avatar discord do usuario lucasbernieri

lucasbernieri

Ver Respostas

Bom dia pessoal, estou com algumas dúvidas relacionadas com a integração via API para o PIX.

Usando o SDK PHP, já consegui gerar as cobranças, associadas com uma chave PIX gerada dentro da minha conta, mas estou um pouco confuso sobre a parte de webhooks de notificação e diferenças entre homologação e produção.

Sobre a parte de Webhooks, eu entendi que preciso cadastrar via API qual é a URL que o Gerencianet deverá notificar quando houver algum evento relacionado com a chave PIX. Até consegui realizar alguns testes utilizando a coleção do postman, gerando a cobrança e recebendo a notificação post da Gerencianet.

Um ponto relacionado com a aplicação que estou trabalhando é que o cliente está em um servidor compartilhado. Vi na documentação que é possível utilizar o parâmetro

x-skip-mtls-checking: true
e verificar no meu sistema se a requisição veio do Gerencianet. Isso funciona para o ambiente de produção também?

Outra dúvida, tem algum passo extra que eu precise fazer para colocar a integração via PIX para funcionar no ambiente de produção? É preciso solicitar da Gerencianet alguma autorização ou aprovação?

O sistema só irá gerar cobranças via PIX e esperar o Webhook de notificação, nada além desse fluxo.

Avatar discord do usuario ysabella3926

ysabella3926

require('dotenv').config({path: '../.env_homologation'})


console.log(process.env.GN_CLIENT_KEY_PROD)


const urlApiProduction = 'https://api-pix.gerencianet.com.br'
const urlApiStaging = 'https://api-pix-h.gerencianet.com.br'

const https = require('https') //conexão segura para enviar dados
const axios = require('axios')
const fs = require('fs')//ler arquivos no disco
const baseURL = process.env.GN_ENV === 'production' ? urlApiProduction : urlApiStaging

const getToken = async() =>{
//console.log('getToken', process.env.GN_CLIENT_KEY_PROD)
const certificate = fs.readFileSync('../' + process.env.GN_CERTIFICATE)
const credentials ={
client_id: process.env.GN_CLIENT_KEY_PROD,
client_secret: process.env.GN_CLIENT_SECRET_PROD
}
const data = JSON.stringify({grant_type: 'client_credentials'})//o que será retornado da api
const dataCredentials = credentials.client_id + ':' + credentials.client_secret
const auth = Buffer.from(dataCredentials).toString('base64')


const agent = new https.Agent({
pfx: certificate,
passphrase: '',
})

const config ={
method: 'POST',
url: baseURL + '/oauth/token',
headers: {
Authorization: 'Basic' + auth,
'Content-Type': 'application/json'
},
httpsAgent: agent,
data: data,
}
const result = await axios(config)
console.log(result.data)

}

getToken()

Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

O Curl é meu profeta e nada meu faltará. Mas Postman vale também.

Avatar discord do usuario rafaelribeiro.sp

rafaelribeiro.sp

Onde posso acompanhar os erros de envio do webhook? Estou setando a URL e a chave PIX, recebo um OK, quando consulto, a URL está lá... mas ao receber um pagamento PIX, não recebo o POST

Avatar discord do usuario romuloreis6143

romuloreis6143

@joao_efi se eu quiser usar o "Skip-mTLS" (utilizando a validação por ip e uma hash ao final da URL) basta eu ignorar o certificado ? os dados do pix pago entregues pelo POST poderá ser lido sem problemas?

Avatar discord do usuario joao_efi

joao_efi

Ver Respostas

Bom dia @tiagooops tudo certo?

Por determinação do Banco Central, nossa API adiciona o /pix ao final da URL cadastrada, sendo assim
Se você cadastra o webhook a URL:
exemplo.com.br/webhook
A confirmação de pagamento será enviada para:
exemplo.com.br/webhook/pix

Além da rota criada acima, é necessário que você adicione a rota a seguir:

js
app.post('/webhookPix/pix', (req, res) => {
try {
const pix = req.body.pix;
console.log(pix);
res.status(200).send('ok')
} catch (err) {
console.error(err)
res.status(500).send('Erro interno do servidor')
}
})

Avatar discord do usuario tiagooops

tiagooops

gerencianet.pixCreateImmediateCharge([], body)
.then((resposta) => {
const url = resposta.location;
const parts = url.split("/");
const afterSecondSlash = parts[2];
let result = {
txid: resposta.txid,
location: 'https://pix.gerencianet.com.br/cob/pagar/'+afterSecondSlash,
cpf: resposta.devedor.cpf,
nome: resposta.devedor.nome,
valor: resposta.valor.original,
chave: resposta.chave
}
res.send(result)
})
.catch((error) => {
console.log(error)
})

Avatar discord do usuario herbertpimentel

herbertpimentel

Ver Respostas

json
{
"status": "error",
"message": "Erro ao gerar o a URL de retorno confirmação de pagamento do PIX. A requisição na URL informada falhou com o erro: ERR_TLS_CERT_ALTNAME_INVALID"
}

Opa to recebendo essa resposta de erro ao tentar configurar minha callback URL. Esou usando um certificado auto assinado. e para ele tem está tanto para os domínios quanto para os subdomínios, alguem pode me ajudar a enteder o que está errado na minha configuração ?!

Avatar discord do usuario du2dev

du2dev

Ver Respostas

você pode ir fazendo as requisições nas urls da api via via http client, ou via do próprio laravel, CURL, ou o modo mais "simples" usando o sdk da gerecianet com o colega acima citou.


namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;

class PostController extends Controller
{
/
Write code on Method

@return response()
/
public function index()
{
$response = Http::get('https://urldeexemplo.com.br');

$jsonData = $response->json();

dd($jsonData);
}
}