BoletoNet / BoletoNetCore

Versão do BoletoNet para .NET Core
MIT License
186 stars 118 forks source link

Registro Online #88

Open bianchini007 opened 3 years ago

bianchini007 commented 3 years ago

Atualmente os bancos estão disponibilizando o registro online de boletos, existe alguma previsão para implementar aqui neste projeto?

jonatanfelipesiqueira commented 3 years ago

Você pode implementa-lo pra gente :)

Schinwinkwinsky commented 3 years ago

Estou tentando implementar o Bradesco, mas preciso de ajuda no de-para de boleto.cs para o json que existe na documentação em http://www.crosp.org.br/uploads/editais_alterados/8a0a9a2f92b3ed4e971e0b57d744b4b9.pdf

carloscds commented 3 years ago

@Schinwinkwinsky O BoletoNet nao trabalha com API hoje.

Schinwinkwinsky commented 3 years ago

Mas poderia? Teria algum problema implementar isso? Desculpe, não sou um programador tão experiente, mas vi nesse projeto uma forma de resolver um problema que temos hoje na empresa. Gostaria de ajudar como posso. Nunca participei antes de um projeto aberto.

carloscds commented 3 years ago

@Schinwinkwinsky Para implementar teria que criar uma nova estrutura dentro do boleto. O ideal seria criar uma nvoa estrutura dentro do projeto.

Schinwinkwinsky commented 3 years ago

Você diz criar um novo projeto na solução assim como fizeram para o Pdf? Eu vi que o arquivo IBanco tem uma interface para registro online.

image

E no Itaú já até tentaram começar uma implementação dessa.

image

carloscds commented 3 years ago

@Schinwinkwinsky Nao, exatamente isto que vc mandou. É que a logica para enviar boleto pela API é totalmente diferente da remessa/retorno.

marcianobandeira commented 3 years ago

boa noite senhores, criei um fork do projeto para tentar implementar o registro online para o banco sicredi. Atualmente possuo essa implementação rodando em produção mas em um projeto delphi. A api do sicredi tem uma ChaveMaster que é unica e vinculada à conta. Utiliza-se a chave master para criar a chave de transação, que é um token temporário, este token permite o acesso aos metodos para o registro do boleto.

Notei que a interface IBancoOnlineRest tem os metodos GerarToken e RegistrarBoleto. Na implementação para o sicredi eu vou implementar o método GerarToken para gerar a chave de transação do sicredi.

A duvida está em seguir a correta arquitetura de código do projeto e escolher o melhor local para criar a propriedade "ChaveMaster"... poderia colocar na interface IBanco?

Lembrando que o termo ChaveMaster é utilizado pelo sicredi, porem outros bancos podem utilizar outra terminologia, neste caso, talvez fosse interessante padronizar esse nome, como por exemplo ApiKey ou ChaveApi.

Gostaria do apoio dos senhores nesta empreitada.

Obrigado

marcianobandeira commented 3 years ago

Penso também ser interessante trabalhar com métodos assíncronos para as requisições de api, Neste caso, a exemplo do método GerarToken da interface IBancoOnlineRest, seria interessante mudar a declaracao para Task GerarToken();

carloscds commented 3 years ago

@marcianobandeira Podemos trabalhar assincrono sem problemas. Mas o conteudo do método tambem precisa ter as chamadas como assincronas.

carloscds commented 3 years ago

@marcianobandeira Quanto ao apoio, conte comigo!

marcianobandeira commented 3 years ago

obrigado pelo retorno @carloscds, vou fazer a implementação aqui de uma forma que tente seguir ao maximo a arquitetura, assim que estiver funcionando eu envio o pull request para analise dos senhores.

marcianobandeira commented 3 years ago

Prezados, criei o pull request, é a primeira vez que faço isso, entao ainda estou aprendendo a operar o git, rs.

Infelizmente o pessoal do sicredi me retornou que nao tem ambiente de testes, entao, realizei os testes em producao mesmo com os dados aqui da empresa.

O codigo abaixo funcionou pra min em producao (alterei os dados para postar).

Acho que o ideal seria avaliar a api de outros bancos para padronizar a arquitetura.

        var conta = new ContaBancaria();
        conta.Agencia = "9999";
        conta.DigitoAgencia = "99";
        conta.Conta = "9999";
        conta.DigitoConta = "9";
        conta.TipoCarteiraPadrao = TipoCarteira.CarteiraCobrancaSimples;
        conta.TipoFormaCadastramento = TipoFormaCadastramento.ComRegistro;
        conta.TipoImpressaoBoleto = TipoImpressaoBoleto.Empresa;
        conta.CarteiraPadrao = "1";
        conta.VariacaoCarteiraPadrao = "A";
        conta.OperacaoConta = "99";

        var beneficiario = new Beneficiario();
        beneficiario.CPFCNPJ = "99999999999999";
        beneficiario.Codigo = "99999";
        beneficiario.ContaBancaria = conta;
        beneficiario.Nome = "XXXXXXX";
        beneficiario.Endereco.Bairro = "ZZZZZZ";
        beneficiario.Endereco.CEP = "99999999";
        beneficiario.Endereco.Cidade = "XXX";
        beneficiario.Endereco.LogradouroComplemento = "XXX";
        beneficiario.Endereco.LogradouroEndereco = "XXX";
        beneficiario.Endereco.LogradouroNumero = "XXX";
        beneficiario.Endereco.UF = "XX";
        beneficiario.ContaBancaria = conta;

        var banco = Banco.Instancia(Bancos.Sicredi);
        banco.Beneficiario = beneficiario;

        var bol = new Boleto(banco);
        bol.DataVencimento = new DateTime(2021, 12, 31);
        bol.DataEmissao = DateTime.Today;
        bol.ValorTitulo = 1;
        bol.EspecieDocumento = TipoEspecieDocumento.DMI;
        bol.NumeroDocumento = "1234";
        bol.NossoNumero = "1";
        bol.DataDesconto = bol.DataVencimento;
        bol.ValorDesconto = 0.10M;
        bol.Pagador.CPFCNPJ = "99999999999";
        bol.Pagador.Nome = "XXXXXXX";
        bol.Pagador.Telefone = "999999999";
        bol.Pagador.Endereco.Bairro = "XXXX";
        bol.Pagador.Endereco.CEP = "99999999";
        bol.Pagador.Endereco.Cidade = "XXXXX";
        bol.Pagador.Endereco.UF = "XX";
        bol.Pagador.Endereco.LogradouroEndereco = "XXX";
        bol.Pagador.Endereco.LogradouroNumero = "XX";
        bol.ValidarDados();
        bol.NossoNumero.ToString();

        var sicredi = (IBancoOnlineRest)banco;
        sicredi.ChaveApi = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        await sicredi.GerarToken();
        Console.WriteLine(sicredi.Token);
        await sicredi.RegistrarBoleto(bol);
        await sicredi.ConsultarStatus(bol);
carloscds commented 3 years ago

@marcianobandeira Excelente, obrigado pela contribuição.

jonatanfelipesiqueira commented 2 years ago

vou implementar a do banco do brasil logo mais