Histórico de mensagens sobre url POST

EXIBINDO CONVERSAS RECENTES:

Texto: url POST
# bolix
Avatar discord do usuario jessica_efi

jessica_efi

Ver Respostas

Boa tarde @excapy_web ! Quando uma transação possui uma URL de notificação cadastrada, a Efí dispara um POST para esta URL a cada mudança no status da cobrança. Essa notificação possui um token específico e o seu sistema deve consultar essa informação.

# bolix
Avatar discord do usuario guilherme_efi

guilherme_efi

Os dados desta notificação não vão no formato JSON. Por padrão, é enviado no formato URL Encoded. Por isso utilizar o JSON.stringify(req.body) não funciona.
Você deve usar o middleware que faça o parse do body no formato URL Encoded, como se fosse receber um POST de um formulário HTML. Assim:

js
var express = require('express')

var app = express()
app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded

app.post('/webhook', function (req, res, next) {
console.log(req.body)
})

# dúvidas
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Olá, @Silvio Fernadnes. Bom dia!

Quando você define uma URL de notificação em um boleto, a Efí dispara um POST para esta URL a cada mudança no status da cobrança. Por segurança essa notificação possui um token específico, que será o mesmo durante todo o "ciclo de alterações" da transação.
Então, sua aplicação deve receber o token na variável $_POST['notification'] e consultar essa informação através do endpoint GET /v1/notification/:token, a resposta será todos os dados informativos sobre a alteração sofrida pela cobrança, como por exemplo, o status anterior e atual da cobrança.

Nos seguintes link você encontra mais detalhes:
https://dev.gerencianet.com.br/docs/notificacoes-recebendo
https://dev.gerencianet.com.br/docs/playground-notificacoes

Qualquer dúvida, conte com a gente!

# pix
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 ?!

# pix
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);
}
}

# pix
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

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

# bolix
Avatar discord do usuario guilherme_efi

guilherme_efi

https://dev.gerencianet.com.br/docs/notificacoes-recebendo
Quando você cria o boleto você pode definir uma URL de retorno no parâmetro metadata>notification_url
Desta forma, automaticamente nossa API dispara um POST para esta URL a cada mudança no status da cobrança. Essa notificação possui um token específico, que será o mesmo durante todo o "ciclo de alterações" da transação. Por exemplo:
Foi gerada uma cobrança. Seu sistema recebe um POST da Gerencianet contendo o token de notificação 09027955-5e06-4ff0-a9c7-46b47b8f1b27 e informando o status da transação - neste caso, waiting;
Posteriormente, essa mesma cobrança teve o pagamento confirmado, então, o status muda para paid e novamente seu sistema recebe uma notificação, ainda com o mesmo token 09027955-5e06-4ff0-a9c7-46b47b8f1b27.

Então sempre que sua aplicação receber notificações, deve-se consultar o token para obter os dados atualizados da transação.
https://dev.gerencianet.com.br/docs/notificacoes-recebendo#21-exemplos-de-respostas

# cartões
Avatar discord do usuario valmirefi

valmirefi

Qual a url base que você está utilizando no postman ?

# pix
Avatar discord do usuario henryq_

henryq_

será que pode ser a url do post que estou enviando?

# pix
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

Primeiro você deve autenticar na API e obter o access_token.

php
$curl = curl_init();

$authorization = base64_encode("$client_id:$client_secret");

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 => $arq_certificado, // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",
CURLOPT_HTTPHEADER => array(
"Authorization: Basic $authorization",
"Content-Type: application/json"
),
));

$auth = json_decode(curl_exec($curl), true);

curl_close($curl);

$tokenType = $auth['token_type'];
$accessToken = $auth['access_token'];

Depois emitir o pix
php
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "https://api-pix-h.gerencianet.com.br/v2/cob/$txID",
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_SSLCERT => $arq_certificado, // Caminho do certificado
CURLOPT_SSLCERTPASSWD => "",
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: $tokenType $accessToken",
"Content-Type: application/json"
),
));

$dadosPix = json_decode(curl_exec($curl), true);
curl_close($curl);

return $dadosPix;

# pix
Avatar discord do usuario deivson7351

deivson7351

Ver Respostas

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;

# pix
Avatar discord do usuario .guind

.guind

Ver Respostas

chama a sua url direto no postman passando esse body e ve se sua aplicação ta recebendo

# assinaturas
Avatar discord do usuario antoniofernandes

antoniofernandes

@igor_efi Fala meu amigo bora tirar mais uma dúvida. Me corrija se estiver errado.

Entendi que vou receber um post com código da notificação na url indicada no campo notification
código esse que devo utilizar para consultar os dados da notificação e fazer a tratativa no meu sistema. Correto?

js
const token = $_POST["notification"];

const params = {
'token' : $token
};

var gerencianet = new Gerencianet(options);

gerencianet
.getNotification(params)
.then(console.log)
.catch(console.log)
.done();

Minha dúvida é:

EXISTE alguma forma de no painel pega o conteudo do post notification, para que eu possa simular localmente o envio desse post e fazer todas tratativas fazendo a consulta localmente?

Vale lembrar que estou implementado assinatura apenas com cartão de crédito.

# dúvidas
Avatar discord do usuario guilherme_efi

guilherme_efi

Ver Respostas

@Xossy Quando você criar uma assinatura você utiliza o parâmetro metadata>notification_url definindo uma URL de retorno.
Assim a cada cobrança que for criada e paga, mensalmente por exemplo, será enviado uma notificação para seu sistema com o notification_token da assinatura (https://dev.gerencianet.com.br/docs/entendendo-fluxo-notificacoes).
Ao receber o notification_token, seu sistema deverá consultá-lo para obter os detalhes da notificação (https://dev.gerencianet.com.br/docs/notificacoes-recebendo#2-consultando-detalhes-de-uma-notifica%C3%A7%C3%A3o), e então obter o json semelhante ao seguinte:

json
{
"code": 200,
"data": [
{
"id": 1,
"type": "subscription",
"custom_id": null,
"status": {
"current": "new",
"previous": null
},
"identifiers": {
"subscription_id": 11976
},
"created_at": "2017-07-20 00:20:16"
},
{
"id": 2,
"type": "subscription",
"custom_id": null,
"status": {
"current": "new_charge",
"previous": "new"
},
"identifiers": {
"subscription_id": 11976
},
"created_at": "2017-07-20 00:20:16"
},
{
"id": 3,
"type": "subscription_charge",
"custom_id": null,
"status": {
"current": "new",
"previous": null
},
"identifiers": {
"subscription_id": 11976,
"charge_id": 2396478
},
"created_at": "2017-07-20 00:20:16"
}
]
}
neste Json você vai capturar o array com que te mostra todo histórico da assinatura.

Então você deverá capturar em cada laço desse json. Se o laço conter o "type": "subscription", significa que ele se refere a um registro de alteração da assinatura.
Se em outro laço conter o "type": "subscription_charge", significa que ele se refere a um registro de alteração de uma cobrança, então você poderá verificar o status>current, subscription_id a qual se refere.

Veja o exemplo completo da resposta ao consultar o token de notificação de uma assinatura: https://dev.gerencianet.com.br/docs/notificacoes-recebendo#21-exemplos-de-respostas

# assinaturas
Avatar discord do usuario carvalhocarneiro

carvalhocarneiro

Estou tentando executar esse código:

def criar_plano_assinatura(self):
try:
self.gerar_head()
if self.headers is None:
raise AttributeError("O headers está vazio, impossível fazer a consulta")

_url = f"{self.uri}v1/plan/"

_data = {
"name": settings.GERENCIANET_NOME_PLANO,
"interval": settings.GERENCIANET_INTERVALO_COBRANCA,
"repeats": settings.GERENCIANET_QUANTIDADE_REPETICAO
}

response = requests.post(_url, data=json.dumps(_data), headers=self.headers, cert=self.certificado)
if response.status_code != 200:
raise Exception(f"Ocorreu um erro ao chamar o método criar_plano_assinatura: {response.json()}")
if response_json is None:
raise Exception(f"Ocorreu o erro ao chamar o método criar_plano_assinatura")
response_json = response.json()
logger.debug(f"Retorno da criação do plano: {response_json}")
return response_json
except Exception as error:
logger.debug(f"Error no criar_plano_assinatura: {error}")
raise Exception(f"Ocorreu o erro {error} ao chamar o método criar_plano_assinatura")

# pix
Avatar discord do usuario lucsa.dev

lucsa.dev

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."}'

# pix
Avatar discord do usuario rubenskuhl

rubenskuhl

Ver Respostas

A mensagem "A URL informada está inacessível" para uso só de grupojvs.dev tinha mais detalhes do erro ? Como é a resposta na íntegra ?

# cartões
Avatar discord do usuario igor_efi

igor_efi

Ver Respostas

Certo, é possivel sim. No PHP você pode utilizar o Curl para realizar as requisições. Segue o exemplo para autenticar na API:


$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.gerencianet.com.br/v1/authorize',
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_HTTPHEADER => array(
'Authorization: Basic (cliend_id:client_secret) em base64',
'Content-Type: application/json'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

# pix
Avatar discord do usuario catalunha

catalunha

Como nao auth se estou usando a url de auth do postman pegando o token e informando no bearer
imagem enviada na mensagem pelo usuario catalunha