eduardokum / laravel-boleto

Pacote para gerar boletos e remessas
MIT License
604 stars 388 forks source link

Automatizar registros #66

Closed edsonrodsilva closed 7 years ago

edsonrodsilva commented 7 years ago

Olá Eduardo, Primeiro parabéns pelo projeto, fantástico. Estou terminando de implementar e até agora tudo correu bem.

Apenas uma dúvida. Sabe como este processo de envio de remessa para registro (Bradesco - carteira - 09) pode ser otimizado? No meu caso gero muitos boletos tipo 20 por hora. Desta forma teria que ficar fazendo vários registros por dia.

O objetivo é que o cliente compre no meu site gera o boleto e paga na mesma hora. O site do registro.br usa assim. Estou tentando entender este processo para implementar.

Como tem que registrar primeiro e somente depois liberar para impressão tornando inviável para sites de ecommerce, já fez algo parecido?

Valeu.

tofarias commented 7 years ago

Bom dia, aqui no Inmetro/RS tivemos a mesma necessidade, até porque são emitidas dezenas de GRUs por minuto. Para poder gerar as GRUs e já registrar junto ao Banco do Brasil sem que o usuário tenha que acessar a página do Banco, eu fiz uma requisição com "CURL" à página que emite o Boleto no Banco do Brasil. No "response" eu faço uma verificação utilizando expressão regular para identificar se os dados enviados ao Banco do Brasil estão validados, senão eu posso gerar o PDF a partir do mesmo "response".

Segue um trecho do código:

$ch = curl_init();

curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_VERBOSE, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, CakeRequest::header('User-Agent')); curl_setopt($ch, CURLOPT_URL, $this->getUrl() ); curl_setopt($ch, CURLOPT_POST, 0);

$this->response = utf8_encode( curl_exec($ch) ); $this->httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);

eduardokum commented 7 years ago

Pra ser bem sincero o único meio que conheço seria via arquivo de remessa, isso de POST ai que o amigo @tofarias mencionou eu nunca fiquei sabendo de url que o banco disponibiliza, seria até legal ter isso.

@tofarias poderia dar mais informações sobre isso? acho que bastante pessoas aqui gostariam de automatizar isso.

Já me disseram que o Bradesco e somente ele tem uma API para isso, creio que seja algo relacionado a isso http://atendimento.tray.com.br/hc/pt-br/articles/211842937-Bradesco-Com%C3%A9rcio-Eletr%C3%B4nico mais não tenho certeza.

alissonlinneker commented 7 years ago

Tenho a mesma necessidade e ouvi falar sobre o WebTA, desenvolvido em JAVA. Vocês conhecem?

A Scopus, filial ao Bradesco, possui API (Comercio Eletrônico), conforme citado pelo @eduardokum, para emissão de boletos e retorno dos pagamentos, porém não possui formas de automatizar o envio de remessas.

tofarias commented 7 years ago

A minha solução foi baseada no manual técnico disponibilizado pelo próprio Banco do Brasil: Manual de Orientações Técnicas v. 23.3 Onde no capítulo 6.2, página 17 na letra "C" - Estrutura do formulário Pagamento é descrito a url para realizar o registro e emissão do boleto: https://mpag.bb.com.br/site/mpag/. Quando enviamos as informações do "pagador" para a "url" via "curl", o sistema do Banco do Brasil valida os dados junto aos correios e receita federal, se os dados estiverem corretos, o boleto já estará registrado , então nós disponibilizamos para o usuário o nosso próprio layout de boleto e não o gerado pelo Banco do Brasil. Esse procedimento já está funcionando desde o dia 02/01/2017 e não tivemos problema.

eduardokum commented 7 years ago

Não tinha conhecimento, acho que todos os bancos vão correr atras de disponibilizar algo semelhante por causa do fim do boleto sem registro.

tofarias commented 7 years ago

Acredito que sim, e no nosso caso foi uma ótima solução pois não preciso tirar o usuário da página do sistema para levá-lo ao site do Banco do Brasil, na verdade o usuário nem fica sabendo que os dados dele foram até o Banco do Brasil, só saberá se o ocorrer alguma inconsistência nos dados que o sistema do Banco do Brasil achar incorreto. Claro que nesse procedimento que implementei, em caso de erro o "response" retorna o HTML da página do banco com os erros, nisso eu faço um filtro em busca da tag que contém os erros, o problema é se o Banco resolver alterar a tag de erro, então não será exibido os erros para o usuário de forma correta.

edsonrodsilva commented 7 years ago

Olá pessaol, valeu as dicas, continuo procurando a melhor forma de implementar isto, acredito eu que a melhor forma seria cada banco liberar acesso a API para que possamos fazer o registro em tempo real. Estou conversando diretamento com o banco para verificar como as Empresas podem fazer esta otmização. Qualquer novidade eu posto. Abs.

mprandot commented 7 years ago

@tofarias, como funciona o retorno desses boletos a sua aplicação, já que você não gera remessa?

tofarias commented 7 years ago

A parte do retorno não sou eu quem cuido. Mas até onde eu sei existe uma pessoa responsável por fazer manualmente a baixa desses arquivos.

edsonrodsilva commented 7 years ago

Pessoal, apenas para informar que depois de muitos testes resolvemos implementar a solução de pagamento de boletos do ItauShopline. Parece bom, estamos testando. Valeu as dicas! http://download.itau.com.br/downloadcenter/arquivos/Manual_Tecnico_ItauShopline.pdf

eduardokum commented 7 years ago

Legal, como funciona a implementação?

Você posta os dados pra uma url ele te retorna o boleto pronto?

ou é algo mais complexo que isso?

edsonrodsilva commented 7 years ago

Opa, sim é bem simples de implementar. No manual tem exemplo em várias linguagens inclusive php. Mas resumindo é parecido com pagseguro, vc gera o boleto no ambiente do Itaú ai o boleto é registrado no momento da geração evitando o envio de arquivo remessa. Depois agente so consulta o status do boleto se foi pago e atualiza as informações no DB. É necessário criptografar os dados antes de envia-los ai estou usando a implementação do Gabriel que converteu a classe Itaucripto, originalmente escrita em Java. https://github.com/gabrielrcouto/php-itaucripto

eduardokum commented 7 years ago

Eu cheguei a ver que precisava dessa classe Java, legal, e quando você contrata esse shopline eles disponibilizam a api? E uma chave é isso? Uma api pra cadastro e consulta?

Achei que esse shopline era aqueles de ecomerce que você é redirecionado pro site do banco pra pagar

edsonrodsilva commented 7 years ago

Sim, eles liberam a API, de qualquer forma agente tem que direcionar para o ambiente do Itau. Mas eu gostei que o cliente não precisa fazer nenhum cadastro para gerar o boleto e se o cliente tiver conta no Itaú ai ele pode pagar com débito em conta e outras coisas.