Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Callbacks transacionais enviados à URL de webhook + sufixo "/pix" #241

Closed
renatofrota opened this issue Dec 9, 2020 · 39 comments
Closed
Assignees
Labels
Documentação Issues relacionados à documentação, versões, melhorias de texto, etc... Erros dos PSPs Os PSPs não estão implementando algo de maneira adequada

Comments

@renatofrota
Copy link

Segundo a documentação, os callbacks transacionais são enviados para "URLwebhook/pix".

Não vejo o menor sentido forçar o "/pix" na URL (exigiria regras de "handling" complexas em alguns webservers).

Poderiam me explicar se há motivo razoável para essa exigência?

Ou, preferivelmente, simplesmente abolir isso da documentação na próxima versão - o quanto antes (já que há PSPs enviando callbacks para a URL específica conforme determinada pelo EC, sem esse sufixo).

@rubenskuhl
Copy link

O motivo razoável para essa exigência é o de extensibilidade, de permitir novos métodos que sejam incorporados aos webhooks. Quer seja para uma necessidade de segurança (vide #239) quer seja para novo recurso (vide #229).

@renatofrota
Copy link
Author

Não justificam as dificuldades de implantar regras de handling - em servidores específicos - já que os cenários que você citou podem muito bem resolvidos de outras formas.

Assim como há /cob e /cobv, se não cabe dentro do próprio corpo da notificação enviada por callback ao webhook informações que identifiquem a transação como sendo um split, podem ser criados endpoint diferentes para tratar especificamente desse caso.

De qualquer forma, me parece muito mais simples e plausível isso ser tratado no PSP ou no código que vai receber o webhook, com base no corpo da notificação, na chave utilizada e em outros fatores, do que na URL específica que foi utilizada no request do callback.

@joelemanoel
Copy link

joelemanoel commented Dec 9, 2020

O motivo razoável para essa exigência é o de extensibilidade, de permitir novos métodos que sejam incorporados aos webhooks. Quer seja para uma necessidade de segurança (vide #239) quer seja para novo recurso (vide #229).

Assim como o @renatofrota também não vejo necessidade. Um endpoint {WebHookURL} poderia receber qualquer extensibilidade que seja, isso já acontece com Gateways de Pagamento como o Paypal via WHMCS (Gerenciador Financeiro para Empresas de Hospedagem de SItes).

Além disso vejo que poderia quebrar alguns webhooks que não usam url amigável, exemplo: https://esteemeusite112131212.com.br/webhook.php e com /pix ficaria: https://esteemeusite112131212.com.br/webhook.php/pix

@renatofrota
Copy link
Author

renatofrota commented Dec 9, 2020

Assim como o @renatofrota também não vejo necessidade. Um endpoint {WebHookURL} poderia receber qualquer extensibilidade que seja, isso já acontece com Gateways de Pagamento como o Paypal via WHMCS (Gerenciador Financeiro para Empresas de Hospedagem de SItes).

Isso. É muito fácil agregar qualquer ?var= (ou &var=) adicional na URL se necessário, mesmo que alguém decida no futuro implantar uma nova funcionalidade que faça da URL da notificação algo "mutável" (o que ainda seria péssimo, na minha opinião - o corpo da notificação deve conter elementos suficientes pra diferenciar o que a notificação representa, não a URL chamada).

Além disso vejo que poderia quebrar alguns webhooks que não usam url amigável, exemplo,: https://esteemeusite112131212.com.br/webhook.php e com /pix ficaria: https://esteemeusite112131212.com.br/webhook.php/pix

Pois é. Nem todos os sistemas estão preparados ou suportariam receber um novo diretório "/pix" e um "index.php" (ou outra extensão) que vai responder pelo request a "/pix", mesmo com modificações mais extensas nas configurações de handling dos requests.

@rubenskuhl
Copy link

Só lembrando que a data de publicação da 2.0.0 já com isso foi 18 de Setembro, e hoje é 9 de Dezembro... mas fora isso, a questão de caminhos, extensões e nomes default é totalmente configurável quando se tem controle do ambiente. Hospedagem compartilhada não combina com mTLS e webhook.

@renatofrota
Copy link
Author

Só lembrando que a data de publicação da 2.0.0 já com isso foi 18 de Setembro, e hoje é 9 de Dezembro... mas fora isso, a questão de caminhos, extensões e nomes default é totalmente configurável quando se tem controle do ambiente. Hospedagem compartilhada não combina com mTLS e webhook.

Obrigado pela contribuição, porém:

  1. não estou falando por preocupação com meu próprio ambiente;

  2. no mundo real, nem todos os sistemas são planejados e implantados seguindo as melhores práticas (o ambiente perfeito do registro.br não serve de parâmetro).

Mas tudo bem, em face do 1., eu nem vou interagir mais aqui nesse issue (pelo menos por hoje). Não vai me atingir, mesmo...

@rubenskuhl
Copy link

  1. no mundo real, nem todos os sistemas são planejados e implantados seguindo as melhores práticas (o ambiente perfeito do registro.br não serve de parâmetro).

Mas tudo bem, em face do 1., eu nem vou interagir mais aqui nesse issue (pelo menos por hoje). Não vai me atingir,

Não há ambientes perfeitos... mas os que tem controle operacional suficiente para mTLS/Webhook não tem os problemas alegados neste issue.

@ninrod
Copy link
Member

ninrod commented Dec 9, 2020

Prezados, conforme foi relatado, está assim desde 18 de setembro. No momento temos um efeito de congelamento em especificações do Pix na linha "Esse navio já partiu".

@renatofrota
Copy link
Author

Prezados, conforme foi relatado, está assim desde 18 de setembro. No momento temos um efeito de congelamento em especificações do Pix na linha "Esse navio já partiu".

@ninrod

Ok. Então os PSPs deverão se adequar e passar a enviar os callbacks para a "WebhookUrl/pix" o quanto antes, correto?

@rubenskuhl
Copy link

Prezados, conforme foi relatado, está assim desde 18 de setembro. No momento temos um efeito de congelamento em especificações do Pix na linha "Esse navio já partiu".

Mas sobre o issue do #239, é bem provável que alguma modificação seja necessária para garantir autorização. Há a idéia que coloquei lá do /chave, há outra idéia sugerida pela Gerencianet que logo deve ser postada lá... mas a idéia deles é a que provavelmente seja menos diferente da API atual.

@renatofrota
Copy link
Author

Prezados, conforme foi relatado, está assim desde 18 de setembro. No momento temos um efeito de congelamento em especificações do Pix na linha "Esse navio já partiu".

Mas sobre o issue do #239, é bem provável que alguma modificação seja necessária para garantir autorização. Há a idéia que coloquei lá do /chave, há outra idéia sugerida pela Gerencianet que logo deve ser postada lá... mas a idéia deles é a que provavelmente seja menos diferente da API atual.

E precisa de qualquer mudança na API? Tem ideias lá que não exigem mudança alguma.

E não é possível o PSP validar o mTLS por conta própria na hora de enviar o callback? 🤔

@rubenskuhl
Copy link

Prezados, conforme foi relatado, está assim desde 18 de setembro. No momento temos um efeito de congelamento em especificações do Pix na linha "Esse navio já partiu".

Mas sobre o issue do #239, é bem provável que alguma modificação seja necessária para garantir autorização. Há a idéia que coloquei lá do /chave, há outra idéia sugerida pela Gerencianet que logo deve ser postada lá... mas a idéia deles é a que provavelmente seja menos diferente da API atual.

E precisa de qualquer mudança na API? Tem ideias lá que não exigem mudança alguma.

As que tem melhor escalabilidade são as que tem mudanças.

E não é possível o PSP validar o mTLS por conta própria na hora de enviar o callback? 🤔

Não é esse o problema; o que você descreve é autenticação, e o problema é de autorização.

@ninrod ninrod self-assigned this Dec 15, 2020
@ninrod
Copy link
Member

ninrod commented Dec 15, 2020

Ok. Então os PSPs deverão se adequar e passar a enviar os callbacks para a "WebhookUrl/pix" o quanto antes, correto?

Correto @renatofrota

@ninrod ninrod added Documentação Issues relacionados à documentação, versões, melhorias de texto, etc... Erros dos PSPs Os PSPs não estão implementando algo de maneira adequada labels Dec 15, 2020
@franciscotfmc
Copy link

Bom dia pessoal!

No caso de o PSP adicionar /pix, o que acontece se o próprio integrador já passar /pix? A URL ficaria /pix/pix.

Nesse sentido, não seria mais interessante forçar que o cadastro da URL de webhook venha com /pix? Me parece um pouco estranho notificar o integrador em uma URL diferente da que ele cadastrou.

@ninrod
Copy link
Member

ninrod commented Jan 5, 2021

Nesse sentido, não seria mais interessante forçar que o cadastro da URL de webhook venha com /pix? Me parece um pouco estranho notificar o integrador em uma URL diferente da que ele cadastrou.

Sendo bem sincero, concordo que a API poderia ter sido escrita sem exigir o /pix. Mas eu não vejo uma maneira retro-compatível de "remover" esse requisito. Se vocês me apresentarem uma maneira, posso tentar incorporar.

@joelemanoel
Copy link

Nesse sentido, não seria mais interessante forçar que o cadastro da URL de webhook venha com /pix? Me parece um pouco estranho notificar o integrador em uma URL diferente da que ele cadastrou.

Sendo bem sincero, concordo que a API poderia ter sido escrita sem exigir o /pix. Mas eu não vejo uma maneira retro-compatível de "remover" esse requisito. Se vocês me apresentarem uma maneira, posso tentar incorporar.

@ninrod Não poderia haver uma consulta com os PSPs que já implementaram ou estão em fase de implementação da API?

Assim a gente mantém sem o /pix como está em alguns PSPs.

@ninrod
Copy link
Member

ninrod commented Jan 5, 2021

@ninrod Não poderia haver uma consulta com os PSPs que já implementaram ou estão em fase de implementação da API?

Infelizmente, não funciona desta maneira. Qualquer mudança incompatível, ainda que aparentemente inofensiva, pode causar grandes prejuízos não previstos tanto aos usuários recebedores quanto aos PSPs recebedores.

Por outro lado, acredito que podemos conviver com essa exigência do /pix: não é uma questão incontornável.

@rubenskuhl
Copy link

Eu não vejo problema em notificar numa URL diferente; na verdade o que se passa no parâmetro é um path base, e /pix é um desses métodos. Hoje é o único, mas pode não ser no futuro.

E também não vejo a exigência do /pix como incontornável.

@renatofrota
Copy link
Author

renatofrota commented Jan 13, 2021

Como está documentado, o /pix é adicionado estritamente no fim da URL (e a query string é parte integrante da URL), então https://teste.gerencianet.com.br/cob?query=param1 ficaria https://teste.gerencianet.com.br/cob?query=param1/pix.

O valor de $query passaria de param1 para param1/pix, mas bastaria adicionar &pix= ao fim para alcançar o resultado desejado sem interferência do /pix:

https://teste.gerencianet.com.br/cob?query=param1&pix= => https://teste.gerencianet.com.br/cob?query=param1&pix=/pix

Inclusive, adicionar um query param vazio ao fim é uma forma de fazer a quarta URL do seu exemplo funcionar mesmo nos casos em que as configurações do location /cob (no caso desse exemplo) não força o carregamento de um arquivo específico (apenas define as regras de mTLS):

https://teste.gerencianet.com.br/cob/index.php?pix= => https://teste.gerencianet.com.br/cob/index.php?pix=/pix

Se a documentação for atualizada de forma a esclarecer que o /pix é adicionado após o path (sem considerar a query string), aí sim a sua tabela estaria correta (e haveria o prejuízo - pequeno?) de a adição de um parâmetro vazio como ?pix= não ser mais um "workaround" funcional.

Mas, atualização por atualização, seria melhor atualizar a documentação retirando essa regra. Ainda não me convenceu a exigência desse /pix na URL. Qualquer coisa que queiram fazer baseada em webhooks seria passível de definição de webhooks específicos para outros eventos, ou de tratamento específico com base no corpo do request, etc. A flexibilidade seria muito maior do que adicionar /outracoisa baseada em uma URL única, inclusive.

@franciscotfmc
Copy link

O valor de $query passaria de param1 para param1/pix, mas bastaria adicionar &pix= ao fim para alcançar o resultado desejado sem interferência do /pix:

Entendi o pensamento. Se houver &pix= no final, aí sim entendo que seria uma URL válida.

Talvez seria melhor nem permitir query params no cadastro da URL de webhook.

@joelemanoel
Copy link

O valor de $query passaria de param1 para param1/pix, mas bastaria adicionar &pix= ao fim para alcançar o resultado desejado sem interferência do /pix:

Entendi o pensamento. Se houver &pix= no final, aí sim entendo que seria uma URL válida.

Talvez seria melhor nem permitir query params no cadastro da URL de webhook.

Permitir query parms se tornou uma necessidade pra contornar isso do /pix, já não existe motivo suficiente para que fosse enviado /pix se não pudermos contornar ele com algo seria péssimo.

@ninrod
Copy link
Member

ninrod commented Jan 13, 2021

Como está documentado, o /pix é adicionado estritamente no fim da URL (e a query string é parte integrante da URL), então https://teste.gerencianet.com.br/cob?query=param1 ficaria https://teste.gerencianet.com.br/cob?query=param1/pix.

Entendo que é exatamente assim que está especificado.

Concordo que seria melhor remover a exigência do /pix no final e eu gostaria inclusive de remover essa questão. Entretanto, essa exigência já existe há meses e não podemos mudar as regras do jogo neste momento a não ser por um motivo de erro grave.

@renatofrota
Copy link
Author

Concordo que seria melhor remover a exigência do /pix no final e eu gostaria inclusive de remover essa questão. Entretanto, essa exigência já existe há meses e não podemos mudar as regras do jogo neste momento a não ser por um motivo de erro grave.

Eu acho que seria bastante trivial:

Quem já está com URL cadastrada, continua recebendo da forma que recebe hoje, já que ao mudar de PSP teria que cadastrar de novo, então se está fora da spec não precisa forçar a correção.

Mas dá pra universalizar e incluir todo mundo na spec sem quebrar nada:

O PSP tem a data de cadastramento das URLs pra responder isso no endpoint de consulta (se não tem a data mas salvou a URL absolutamente igual o EC pediu na API, hoje adiciona o "/pix" na hora do envio do callback - que é o certo, inclusive, pois previa-se o uso dessa URL para outros fins, com /outracoisa ao fim), então:

  • retira-se o "/pix" da documentação
  • adiciona-se o "/pix" na URL "no banco de dados de URLs" e deixa de concatenar "/pix" no envio do callback (se o PSP hoje adiciona o ”/pix" apenas na hora do callback);
  • assim novos cadastros estariam livre do "/pix", recebendo o callback na URL exata que cadastrar, sem comprometimento de quem já está com o sistema implantado (esteja hoje recebendo com um "/pix" adicionado ou não);

Inclusive, a minha suspeita é que tem outros PSPs que não estão adicionando o "/pix", de qualquer forma, pois ficou muito obscuro até pouco tempo atrás. Quando começamos a debater isso aqui no GitHub já tinha sistema operando. E, seja como for, se coordenar isso como falei acima, não quebra a spec, pelo contrário, acaba com as divergências de implantação.

@rubenskuhl
Copy link

Só comentando que eu apontei no #289 que já há uma necessidade hoje para uma rota diferente de /pix no webhook, uma rota /cob que manda um objeto cob avisando que aquele objeto mudou assincronamente de situação para REMOVIDO_PELO_PSP. Então o que eu sempre alertei de motivo para se ter um /pix na notificação já se materializou.

@joelemanoel
Copy link

Só comentando que eu apontei no #289 que já há uma necessidade hoje para uma rota diferente de /pix no webhook, uma rota /cob que manda um objeto cob avisando que aquele objeto mudou assincronamente de situação para REMOVIDO_PELO_PSP. Então o que eu sempre alertei de motivo para se ter um /pix na notificação já se materializou.

Penso que o rota deveria ser sempre o mesmo, só tratar o body sempre... Essa imposição arbitrária de forçar alguém a utilizar uma rota acaba criando mais trabalho para ambos os lados...

@rubenskuhl
Copy link

Só comentando que eu apontei no #289 que já há uma necessidade hoje para uma rota diferente de /pix no webhook, uma rota /cob que manda um objeto cob avisando que aquele objeto mudou assincronamente de situação para REMOVIDO_PELO_PSP. Então o que eu sempre alertei de motivo para se ter um /pix na notificação já se materializou.

Penso que o rota deveria ser sempre o mesmo, só tratar o body sempre... Essa imposição arbitrária de forçar alguém a utilizar uma rota acaba criando mais trabalho para ambos os lados...

Mas como já lembrado, esse navio já partiu... as duas formas fazem sentido para mim, mas já que já se escolheu uma, as adições precisam ser coerentes.

@renatofrota
Copy link
Author

Mas como já lembrado, esse navio já partiu... as duas formas fazem sentido para mim, mas já que já se escolheu uma, as adições precisam ser coerentes.

Concordo com o princípio mas não no uso dele como argumento aqui. Não vejo incoerência nenhuma mandar objetos pix e cob para um mesmo webhook. Mas é o BACEN que decide, claro, nós só argumentamos.

Mas, @rubenskuhl , aproveitando: você que andou conversando com vários PSPs, sabe como eles implantaram isso? Estão respeitando o /pix da documentação?

E @ninrod , você tem alguma ideia sobre a razão para os demais PSPs não darem as caras aqui pra debater?

@dev-gto
Copy link

dev-gto commented Jan 14, 2021

Navio partiu, sem problemas... mas para manter coerência com o resto da API, faria sentido colocar a versão da API, como /v2/pix

Independente da URL, ao receber a notificação, como cliente recebedor de pix atrelado à cobrança, preciso consultar o PSP novamente acerca da cobrança para pegar o estado de CONCLUIDA ou outras informações para consistir.

Na API não está claro se as informações do pix no callback (devoluções inclusive) devem coincidir obrigatoriamente com a resposta da consulta cob (a menos de concorrência, parece óbvio, mas interpretações existem).

Como cliente recebedor usando pix atrelado à cobrança, me parece mais seguro consultar sempre a GET /v2/cob, e a callback age apenas como um gatilho, e só uso o txid/e2eid dela.

Outra coisa é que, pelo JSON da resposta GET /v2/cob, posso estar em um estado CONCLUIDA, e eventualmente receber uma devolução. Me parece que, para saber o estado real da cobrança, precisa olhar o campo status e também o vetor de devolucoes do vetor de pix da cob (posso ter também devoluções parciais, no caso de múltiplos pix). É correto este entendimento, ou o PSP volta a cobrança para "ATIVA" (ou é papel do cliente recebedor, ou não é possível alterar o estado CONCLUIDA)?

Outro exemplo: quando o recebedor enviar uma solicitação de devolução para um pix com cobrança, só faria sentido se a cobrança estiver CONCLUIDA, sim? Do contrário, devo fazer um PATCH /v2/cob mudando de ATIVA para REMOVIDA_PELO_USUARIO_RECEBEDOR (o recebedor ainda precisa resolver um problema de concorrência, pois o cliente pode pagar nesse meio tempo). Além de que, me pareceu que o envio da solicitação de devolução não muda o estado CONCLUIDA da cob. Há alguma recomendação nesse caso? Por exemplo, cabe ao recebedor fazer um PATCH /v2/cob mudando para ATIVA, e depois de receber a devolução DEVOLVIDO mudar para REMOVIDA_PELO_USUARIO_RECEBEDOR?

Finalmente, uma dúvida de homologação/segurança/consistência: que garantias o recebedor tem, de que não irá aparecer uma devolução com status DEVOLVIDO de algo que o recebedor não pediu? Há um roteiro de homologação com casos de uso/testes?

@ninrod
Copy link
Member

ninrod commented Jan 14, 2021

@joelemanoel

Penso que o rota deveria ser sempre o mesmo, só tratar o body sempre... Essa imposição arbitrária de forçar alguém a utilizar uma rota acaba criando mais trabalho para ambos os lados...

Entendo que "tratar" o body é alterar o objeto que é enviado na notificação.

supondo que não exista a exigência de /pix no final, um possível design para o objeto de notificação seria assim:

{ 
  type: "pix", // <--- ( para adicionar "cob", por ex, além de ter que introduzir novos elementos no enum, a estrutura mudaria "daqui pra baixo". Complicado.)
  arrayDePix: [...],
}

Pensando em evolução, o append do /pix apresenta vantagens (/cob, /chave para avisar que uma chave foi removida, etc...). Cada "endpoint apendado" apresentaria seu próprio schema. E é 100% compatível agregar esses novos endpoints.
Por outro lado, entendo que o "append" do pix agrega os efeitos indesejados como já listados aqui e em outras issues.

retira-se o "/pix" da documentação
adiciona-se o "/pix" na URL "no banco de dados de URLs" e deixa de concatenar "/pix" no envio do callback (se o PSP hoje adiciona o ”/pix" apenas na hora do callback);
assim novos cadastros estariam livre do "/pix", recebendo o callback na URL exata que cadastrar, sem comprometimento de quem já está com o sistema implantado (esteja hoje recebendo com um "/pix" adicionado ou não).

@renatofrota, usar a "data" de registro da URL é uma saída interessante. Entretanto, esse procedimento exige implementação adicional por parte dos PSPs recebedores para adicionar essa inteligência e agrega mais um nível de complexidade ao arranjo, além de criar uma nova área de dúvidas ("por que" o Bacen retirou o `append' do pix?, Não prometeram que não haveria "quebra"?, etc...)

O critério que usamos para definir se uma mudança introduz uma "quebra" é o seguinte:

Se eu incorporar a mudança xyz e:

  • o usuário recebedor não alterar nada;
  • o PSP não alterar nada;
  • o PSP pagador não alterar nada;

Tudo continua funcionado? Se sim, a mudança pode ser incorporada. Se não, tem que se discutir muito e pensar muito bem na alteração e com bastante calma.

@ninrod
Copy link
Member

ninrod commented Jan 14, 2021

E @ninrod , você tem alguma ideia sobre a razão para os demais PSPs não darem as caras aqui pra debater?

Debater aqui é uma liberalidade do PSP. Por ex., há PSPs que preferem se comunicar com o BCB diretamente via canal específico.

@ninrod
Copy link
Member

ninrod commented Jan 14, 2021

@dev-gto , bom dia.

Na API não está claro se as informações do pix no callback (devoluções inclusive) devem coincidir obrigatoriamente com a resposta da consulta cob (a menos de concorrência, parece óbvio, mas interpretações existem).

Ressalto que há um schema especificado para o objeto de callback. Concordo que especificar em "quais momentos o PSP pagador deve acionar o webhook" é uma questão que pode ser melhor detalhada na especificação.

@ninrod
Copy link
Member

ninrod commented Jan 14, 2021

@dev-gto

Como cliente recebedor usando pix atrelado à cobrança, me parece mais seguro consultar sempre a GET /v2/cob, e a callback age apenas como um gatilho, e só uso o txid/e2eid dela.

Entendo, mas já é uma melhoria em relação ao pooling, que seria a única opção caso não existiesse o webhook. Aliás, um outro design seria definir informações mínimas no objeto notificado e exigir sempre que o usuário recebedor acione um endpoint de consulta caso instado pelo webhook. Seria algo como: Usuário recebedor, temos novidades aqui pra você em relação ao pix xyz. Se quiser consultar, acione o endpoint correto. Para ser bem sincero, Deixaria a API mais simples e inclusive nem estaríamos debatendo essa presente issue. Para pensar, em uma eventual v3.

@renatofrota
Copy link
Author

@renatofrota, usar a "data" de registro da URL é uma saída interessante. Entretanto, esse procedimento exige implementação adicional por parte dos PSPs recebedores para adicionar essa inteligência e agrega mais um nível de complexidade ao arranjo, além de criar uma nova área de dúvidas ("por que" o Bacen retirou o `append' do pix?, Não prometeram que não haveria "quebra"?, etc...)

Eu citei a data mas acabei mudando a linha de raciocínio e, no fim, ela seria irrelevante para o que eu propus. Vou tentar ser mais claro e direto.

Sobre a remoção do /pix, partindo de um exemplo onde o EC cadastrou exemplo.com/webhookUrl, :

  • se hoje ele recebe a notificação em exemplo.com/webhookUrl/pix (com o /pix adicionado pelo PSP no momento do callback), na eventual decisão de se retirar o /pix, o PSP simplesmente faria um append do /pix à URL de webhook cadastrada diretamente no seu BD e passaria a não mais adicionar /pix no momento de mandar o callback (a URL "cadastrada" já teria o /pix incorporado);

  • se hoje ele recebe a notificação em exemplo.com/webhookUrl (sem o /pix - divergente da documentação atual), na eventual decisão de se retirar o /pix, o PSP simplesmente não precisaria fazer nada - já estaria adequado ao novo cenário automaticamente; novos cadastros;

Em ambos os casos (PSP adicionando /pix atualmente ou não), os novos cadastros de URL seriam feitos com ou sem o /pix por escolha do EC e não por força da exigência da documentação atual (e os ECs que já tem a URL cadastrada não precisariam fazer literalmente nada).

Dito isso: se o /pix for sempre adicionado ao fim da URL (completa) e não "após o path" (entre path e query string), não é um problema a permanência do /pix (e entendo o seu ponto de vista em relação aos demais /endpoints que podem ser vinculados à uma mesma webhookUrl - me parece plausível).

Presume-se que o integrador deve ter controle sobre as configurações do virtualhost (Apache) / server (Nginx) / whatever para definir regras de mTLS, então ele deve ter controle sobre o tratamento do request (conforme "path" ou "location") para fazer o request apontar para o script específico que ele quiser, mesmo com um /pix no fim. Em último caso, há o workaround de adicionar uma query param na URL, por exemplo ?pix=, se isso estiver na mão de um terceiro e quiser evitar a necessidade de configurações mais específicas.

Problema casca grossa mesmo, seria tirar essa possibilidade colocando o /pix num local arbitrário no meio da URL. Isso não atenderia a documentação atual, não atenderia a solicitação da parte dos integradores que não querem o /pix e ainda corta a possibilidade de se utilizar um query param vazio como workaround.

@renatofrota
Copy link
Author

@dev-gto

Como cliente recebedor usando pix atrelado à cobrança, me parece mais seguro consultar sempre a GET /v2/cob, e a callback age apenas como um gatilho, e só uso o txid/e2eid dela.

Entendo, mas já é uma melhoria em relação ao pooling, que seria a única opção caso não existiesse o webhook. Aliás, um outro design seria definir informações mínimas no objeto notificado e exigir sempre que o usuário recebedor acione um endpoint de consulta caso instado pelo webhook. Seria algo como: Usuário recebedor, temos novidades aqui pra você em relação ao pix xyz. Se quiser consultar, acione o endpoint correto. Para ser bem sincero, Deixaria a API mais simples e inclusive nem estaríamos debatendo essa presente issue. Para pensar, em uma eventual v3.

@ninrod ,

Isso foi proposto anteriormente, aqui. É como o mercado todo funciona. O Pix foi na contramão.

@ninrod
Copy link
Member

ninrod commented Feb 8, 2021

@renatofrota

Dito isso: se o /pix for sempre adicionado ao fim da URL (completa) e não "após o path" (entre path e query string), não é um problema a permanência do /pix (e entendo o seu ponto de vista em relação aos demais /endpoints que podem ser vinculados à uma mesma webhookUrl - me parece plausível).

É isso mesmo. Ao fim da URL Completa.

Presume-se que o integrador deve ter controle sobre as configurações do virtualhost (Apache) / server (Nginx) / whatever para definir regras de mTLS, então ele deve ter controle sobre o tratamento do request (conforme "path" ou "location") para fazer o request apontar para o script específico que ele quiser, mesmo com um /pix no fim. Em último caso, há o workaround de adicionar uma query param na URL, por exemplo ?pix=, se isso estiver na mão de um terceiro e quiser evitar a necessidade de configurações mais específicas.

Perfeito.

@tiagostutz
Copy link

Concordo com o @renatofrota

Acrescento também que como o webhook não passa na "rede PIX" essa questão do /pix acaba sendo mais uma questão de compliance do que funcional, por isso acredito que uma mudança para tirar essa obrigatoriedade - mas tornando-a aceitável ainda - não seja problema.
Dessa forma, os PSPs que já fizeram assim não ficam em falta de compliance por manterem o formato já implantado e negociam com seus clientes se, quando e como evoluir para o formato sem essa exigência.

@rubenskuhl
Copy link

Concordo com o @renatofrota

Acrescento também que como o webhook não passa na "rede PIX" essa questão do /pix acaba sendo mais uma questão de compliance do que funcional, por isso acredito que uma mudança para tirar essa obrigatoriedade - mas tornando-a aceitável ainda - não seja problema.
Dessa forma, os PSPs que já fizeram assim não ficam em falta de compliance por manterem o formato já implantado e negociam com seus clientes se, quando e como evoluir para o formato sem essa exigência.

A integração entre ECs e PSPs é tão importante quanto a entre PSPs e BACEN. Padrões existem para serem seguidos.

@renatofrota
Copy link
Author

renatofrota commented Mar 5, 2021

Concordo com o @renatofrota

Acrescento também que como o webhook não passa na "rede PIX" essa questão do /pix acaba sendo mais uma questão de compliance do que funcional, por isso acredito que uma mudança para tirar essa obrigatoriedade - mas tornando-a aceitável ainda - não seja problema.
Dessa forma, os PSPs que já fizeram assim não ficam em falta de compliance por manterem o formato já implantado e negociam com seus clientes se, quando e como evoluir para o formato sem essa exigência.

Agora eu entendo que "esse barco já partiu" e não dá mais pra mexer. PSPs que eu sabia que estavam enviando o callback para webhookURL (e não webhookURL/pix) já se adequaram. Também, fazendo alguns testes eu percebi que não é assim tão complicado trabalhar com .../arquivo.php/pix, na maioria dos casos isso funciona normalmente, sendo processado pelo arquivo.php como esperado e, quando não, é só cadastrar a URL com um sufixo ?pix= e o callback vai para .../arquivo.php?pix=/pix, um workaround perfeitamente funcional em 100% dos casos.

Além disso, depois de ter aberto esse issue, até já encontrei algumas outras possibilidades de uso para o formato webhookUrl/<outros-endpoints>, então agora entendo melhor a usabilidade deste formato.

Por estas razões, estou fechando esse issue, o considero resolvido. Se alguém tiver razões pra debater isso ainda, sinta-se à vontade para abrir outro issue e referenciar argumentos que foram dados aqui (só não quero "encabeçar" o issue, agora que meu posicionamento mudou). Obrigado a quem colaborou.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Documentação Issues relacionados à documentação, versões, melhorias de texto, etc... Erros dos PSPs Os PSPs não estão implementando algo de maneira adequada
Projects
None yet
Development

No branches or pull requests

7 participants