allgood / APInter-PHP

Biblioteca PHP para acesso à API do Banco Inter
GNU Lesser General Public License v3.0
104 stars 52 forks source link

WebHook #46

Open bcboaventura opened 1 year ago

bcboaventura commented 1 year ago

Bom dia! Alguém sabe como configurar um Webhook em PHP para receber os callbacks de pagamento dos boletos? Não achei nada ainda e na documentação do Banco Inter só tem pra NODE.JS. Desde já, agradeço!

kravetz commented 1 year ago

Sim, eu acabei de fazer aqui.

Você deve fazer uma chamada PUT para /cobranca/v2/boletos/webhook.

A classe BancoInter não tem um método controllerPut, então eu modifiquei o método controllerPost para enviar por PUT também (modifiquei a seguinte linha):

curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, 'PUT');

aí é só passar o webhookUrl no corpo da mensagem. Eu passei como json e aceitou.

bcboaventura commented 1 year ago

Cadastrei a URL certinho, o registro consta lá, porém, não recebo nenhum retorno dos boletos pagos no webhook.

kravetz commented 1 year ago

Eu ia comentar a mesma coisa, eu tenho o webhook configurado desde o dia 19 de dezembro e até agora nenhuma requisição recebida. E já recebemos pelo menos uns 20 boletos pagos.

kravetz commented 1 year ago

Verifiquei que o banco Inter modificou a API do webhook dia 03 de novembro, parece que agora retorna vários boletos de uma vez só. Vou modificar no meu sistema para receber no novo formato, que eles mostram aqui:

https://developers.bancointer.com.br/changelog/2022-11-03

bcboaventura commented 1 year ago

Verifiquei que o banco Inter modificou a API do webhook dia 03 de novembro, parece que agora retorna vários boletos de uma vez só. Vou modificar no meu sistema para receber no novo formato, que eles mostram aqui:

https://developers.bancointer.com.br/changelog/2022-11-03

Mas eu não estou recebendo absolutamente nada deles. Não chega nada.

bcboaventura commented 1 year ago

O que você fez pra ajustar? pode me mandar/mostrar essas alterações?

bcboaventura commented 1 year ago

Quanto faço a simulção, utilizando o postman, vai certinho.

estou mandando esse Body/RAW usando POST como exemplo: [ { "nossoNumero": "00788123885", "seuNumero": "12345", "motivoCancelamento":"ACERTOS", "situacao":"CANCELADO", "dataHoraSituacao":"2022-11-01", "valorNominal":"5.00", "codigoBarras":"123456789123456498765218946518971", "linhaDigitavel":"216546531561310256162156" } ]

e está recebendo certinho. (estou, por enquanto, apenas gerando um arquivo com o json.

kravetz commented 1 year ago

Fiz algo bem simples:

//Captura o body do POST
$body = file_get_contents('php://input');

Log::i('webhook-inter', "Body: ".$body);

//Transforma o body em array
$data = json_decode($body, true);

if (JSON_ERROR_NONE !== json_last_error()) {
    Log::i('webhook-inter', 'Erro JSON: '.json_last_error());
    http_response_code(403); //403=formato invalido
}
$data === null ? array() : $data;

//Agora data é um vetor com vários boletos (mudança 03/11/2022)

//print_r($data);
foreach ($data as $boleto) {

Mas antes disso, por incrível que pareça, eu tive um problema que faltava a barra final no URL do meu webhook. O URL que eu informei era: https://meusite/webhook/inter e o certo seria https://meusite/webhook/inter/

Devido à falta dessa barra no final, o meu servidor redirecionava (301) para o endereço com barra, mas o servidor do Banco Inter não segue redirects, e a requisição deles ia pro limbo. Se estiver usando o postman, insomnia ou algo do tipo, coloque para não seguir redirects para fazer o debug correto.

bcboaventura commented 1 year ago

Fiz algo bem simples:

//Captura o body do POST
$body = file_get_contents('php://input');

Log::i('webhook-inter', "Body: ".$body);

//Transforma o body em array
$data = json_decode($body, true);

if (JSON_ERROR_NONE !== json_last_error()) {
    Log::i('webhook-inter', 'Erro JSON: '.json_last_error());
    http_response_code(403); //403=formato invalido
}
$data === null ? array() : $data;

//Agora data é um vetor com vários boletos (mudança 03/11/2022)

//print_r($data);
foreach ($data as $boleto) {

Mas antes disso, por incrível que pareça, eu tive um problema que faltava a barra final no URL do meu webhook. O URL que eu informei era: https://meusite/webhook/inter e o certo seria https://meusite/webhook/inter/

Devido à falta dessa barra no final, o meu servidor redirecionava (301) para o endereço com barra, mas o servidor do Banco Inter não segue redirects, e a requisição deles ia pro limbo. Se estiver usando o postman, insomnia ou algo do tipo, coloque para não seguir redirects para fazer o debug correto.

Cara, acho é que estava com problema no Inter mesmo. Eu não fiz absolutamente nada e comecei a receber dados no webhook.

kravetz commented 1 year ago

Criado Pull Request #48