alexpt
Membros Pro-
Total de ítens
4 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que alexpt postou
-
Bom dia. Tenho passado as ultimas semanas estudando a documentação da ACBrLib e ACBrBoleto e quanto mais leio mais confuso fico. Tenho algumas perguntas para as quais não encontrei respostas na documentação, assim, agradeço previamente qualquer esclarecimento concedido. Contexto: Estou escrevendo uma aplicação AspNET Core API cujo objetivo é centralizar as operações de integração com alguns bancos exclusivamente via API/WebService para registro e manutenção de boletos. - Características: Vários Cedentes e vários Bancos - Requisições concorrentes. - Plataforma de destino: Linux Através da documentação e vídeos disponíveis foi possível configurar o ambiente de desenvolvimento e teste tranquilamente com relativa facilidade (parabéns ao time ACBr). No entanto, como dito anteriormente alguns tópicos permaneceram obscuros. 1 - Arquivos INI A questão do uso de arquivos INI para configuração tanto da Biblioteca quanto das operações da classe ACBrBoleto causaram as seguintes dúvidas: 1.1 A documentação menciona 3 arquivos INI distintos para a operação com os boletos. (Configuração da Biblioteca, Configuração do Boleto e Lista de títulos). Questões: Qual o nível de isolamento referente a configurações (INIs) entre as Instâncias de ACBrBoleto ? (por exemplo se a aplicação estiver registrando boletos simultaneamente para instituições distintas ) A opção de uso do INI em memória mencionada nos exemplos, elimina a necessidade de manipular os arquivos INI diretamente ? É isolado entre instâncias ? Distinção entre INIs, na documentação menciona a especificação dos arquivos INIs da Lib e do Boleto Boleto.ConfigGravarValor(ACBrSessao.Principal, "NomeArquivoINI", globalIniFileName); Boleto.ConfigGravarValor(ACBrSessao.BoletoConfig, "NomeArquivoINI", boletoIniFileName); Sobre o método ConfigGravarValor: Quando instruído a a gravar na sessão ACBrSessao.BoletoConfig Gera um erro informando que a dita sessão não existe. Para corrigir tenho que editar o arquivo por fora e adicionar a chave correspondente o que me induz a pensar que devo manipular os arquivos INI por meios externos para fins de configuração. Isso é correto ? Qual o jeito certo ? O metodo Boleto.ConfigGravar(), só grava o arquivo INI da biblioteca (não encontrei opção para gravar os arquivos de Boleto e Título. Como funciona essa parte ? Como eu informo realmente quais configurações/arquivos serão válidas para cada operação ? 1.2 - Títulos Sobre os campos referentes a títulos, só encontrei na documentação exemplos de arquivos INI, e o disponível no Demo da biblioteca, porem não encontrei nenhuma tabela de descrição dos campos. Onde consigo uma tabela que descreva os tipos de cada campo bem como eventuais range de valores aceitáveis (como a tabela de configurações da biblioteca) ? Uma coisa que me intrigou observando o código disponível de algumas destas classe é o uso de "Zero e Um" para campos supostamente booleanos (teoricamente 0=Não e 1=Sim) porem em alguns casos se apresentam invertidos no código ACBr. 2 - Classes Senti falta de documentação de classes, embora o exame do código ajude alguma coisa, na maioria dos casos não é suficiente. Eu já havia implementado uma integração usando o ACBrBoleto em Delphi, porem no ambiente .NET, sobretudo AspNET é completamente diferente. Em fim, agradeço qualquer ajuda no esclarecimento dessas duvidas.
-
ACBrBoleto - API Banco do Brasil - Erro - Demo e Tutorial furados
alexpt replied to alexpt's tópico in ACBrBoleto
Agradeço a todos pela atenção dispensada. Consegui fazer funcionar aqui, está funcionando corretamente agora. Havia algumas falhas no Demo da versão que baixei e que ocasionavam erros diversos, vou deixar aqui um resumo, talvez ajude a alguém na mesma situação. 1 - No demo (qualquer dos dois) o DM está setado no projeto para criação automática, no entanto ele é criado após o form principal, o que gera erros de violação de acesso na criação do form principal. A variável dm fica Nil e dá ruim. Para resolver, simplesmente tirei a criação do DM do automatico, e criei uma função no fonte do DM (ambos), para criar o DM por demanda, e ao setar a variável dm no form principal chamo esta função. function DM_Fortes: TdmForte; begin if (dmForte = Nil) then begin dmForte := TdmForte.Create( Application ); end; result := dmForte; end; No Form principal: {$IFDEF demo_forte} dm := DM_Fortes; {$ELSE} dm := DM_Fast; {$ENDIF} 2 - Na inclusão de Titulo (procedure TfrmDemo.btnBoletoIndividualClick), antes da instrução "Titulo := dm.ACBrBoleto.CriarTituloNaLista;", foi necessário incluir as instruções abaixo para que o JSON enviado refletisse corretamente as informações digitadas no formulário. procedure TfrmDemo.btnBoletoIndividualClick(Sender: TObject); var Titulo : TACBrTitulo; VQtdeCarcA, VQtdeCarcB, VQtdeCarcC :Integer; VLinha, logo : string; i: Integer; begin // Se não configurar aqui, estes valores são ignorados mesmo que sejam especificados em Titulo. dm.ACBrBoleto.Cedente.Modalidade := edtModalidade.Text; dm.ACBrBoleto.Cedente.Convenio := edtConvenio.Text; Titulo := dm.ACBrBoleto.CriarTituloNaLista; 3 - Campos importantes (atalhos). Para testes usar as informações disponíveis no manual da API (https://apoio.developers.bb.com.br/referency/post/5ffc477c3b02bd0012ecaa1a). O código abaixo corresponde a um programa de testes com finalidade exclusiva de registrar boletos on-line. uses ACBrDFeSSL, pcnConversao, BlckSock; Const // Fornecidos pelo painel do desenvolvedor o Banco do Brasil BB_API_CLIENT_ID = '<client_id>'; BB_API_CLIENT_SECRET = '<client_sercret>'; BB_API_CLIENT_DEV_KEY = '<developer_application_key>'; BB_API_ESCOPO = 'cobrancas.boletos-info cobrancas.boletos-requisicao'; // Informações do Cedente/Beneficiario BB_CNPJ_CEDENTE = '94491202000127'; // valor de teste fornecido na documentacao do BB dados ficticios para testes BB_AGENCIA = '<sua_agencia>'; BB_AGENCIA_DV = '<dv_sua_agencia>'; BB_CONTA = '<sua_conta>'; BB_CONTA_DV = '<dv_sua_conta>'; BB_CODIGO_CEDENTE = BB_AGENCIA + '/' + BB_CONTA; BB_CONVENIO = '<Num-Convenio>'; // para testes usar o numero fornecido na documentacao do BB dados ficticios para testes BB_CARTEIRA = '17'; BB_VARIACAO_CARTEIRA = '35'; // valor de teste fornecido na documentacao do BB dados ficticios para testes BB_INICIO_NOSSO_NUMERO = BB_CONVENIO; // prefixo para formação do campo: "numeroTituloCliente" procedure TForm1.ConfiguraIntegracaoBB; begin // Tipo API Banco do Brasil ACBrBoleto.Banco.TipoCobranca := cobBancoDoBrasilAPI; // Cedente (Empresa cobradora) ACBrBoleto.Cedente.CNPJCPF := BB_CNPJ_CEDENTE; ACBrBoleto.Cedente.Agencia := BB_AGENCIA; ACBrBoleto.Cedente.AgenciaDigito := BB_AGENCIA_DV; ACBrBoleto.Cedente.Conta := BB_CONTA; ACBrBoleto.Cedente.ContaDigito := BB_CONTA_DV; ACBrBoleto.Cedente.CodigoCedente := BB_CODIGO_CEDENTE; ACBrBoleto.Cedente.Convenio := BB_CONVENIO; ACBrBoleto.Cedente.TipoCarteira := tctSimples; ACBrBoleto.Cedente.TipoInscricao := pJuridica; ACBrBoleto.Cedente.Modalidade := BB_VARIACAO_CARTEIRA; ACBrBoleto.Cedente.Cidade := ''; ACBrBoleto.Cedente.UF := ''; ACBrBoleto.Cedente.Logradouro := ''; ACBrBoleto.Cedente.Bairro := ''; ACBrBoleto.Cedente.CEP := ''; // Credenciais de acesso a API ACBrBoleto.Cedente.CedenteWS.ClientID := BB_API_CLIENT_ID; ACBrBoleto.Cedente.CedenteWS.ClientSecret := BB_API_CLIENT_SECRET; ACBrBoleto.Cedente.CedenteWS.KeyUser := BB_API_CLIENT_DEV_KEY; ACBrBoleto.Cedente.CedenteWS.IndicadorPix := true; // Modo Hibrido, pagamento com pix ACBrBoleto.Cedente.CedenteWS.Scope := BB_API_ESCOPO; // Configurações - Log ACBrBoleto.Configuracoes.Arquivos.LogRegistro := True; ACBrBoleto.Configuracoes.Arquivos.PathGravarRegistro := '.\log'; ACBrBoleto.DirArqRemessa := '.\log'; ACBrBoleto.DirArqRetorno := ACBrBoleto.DirArqRemessa; ACBrBoleto.NomeArqRemessa := 'Demo_Remessa.txt'; ACBrBoleto.NomeArqRetorno := 'Demo_Retorno.txt'; // Configurações do WebService/API ACBrBoleto.Configuracoes.WebService.Ambiente := taHomologacao; ACBrBoleto.Configuracoes.WebService.Operacao := tpInclui; ACBrBoleto.Configuracoes.WebService.SSLHttpLib := httpOpenSSL; ACBrBoleto.Configuracoes.WebService.SSLType := LT_TLSv1_2; ACBrBoleto.Configuracoes.WebService.VersaoDF := '1.2'; ACBrBoleto.Configuracoes.WebService.UseCertificateHTTP := false; end; procedure TForm1.IncluiBoleto; var Titulo : TACBrTitulo; VQtdeCarcA, VQtdeCarcB, VQtdeCarcC :Integer; VLinha, logo : string; i: Integer; begin // Operação ACBrBoleto.Configuracoes.WebService.Operacao := tpInclui; ACBrBoleto.ListadeBoletos.Clear; Titulo := ACBrBoleto.CriarTituloNaLista; Titulo.Vencimento := Date+5; Titulo.DataDocumento := Date; Titulo.NumeroDocumento := LZeroFil(edNumTitulo.Text, 10); Titulo.EspecieDoc := 'DM'; Titulo.Aceite := atNao; Titulo.DataProcessamento := Now; Titulo.Carteira := '17'; // * Titulo.NossoNumero := BB_INICIO_NOSSO_NUMERO + LZeroFil(edNumTitulo.Text, 10); // * Titulo.ValorDocumento := 45.00; // * Titulo.Sacado.Pessoa := pJuridica; // * [pFisica,pJuridica, - pOutras, pNenhum ] Titulo.Sacado.NomeSacado := 'Odorico Paraguassu'; // * Titulo.Sacado.CNPJCPF := '74910037000193'; // * Titulo.Sacado.Logradouro := 'Avenida Dias Gomes 1970'; // * Titulo.Sacado.Numero := ''; Titulo.Sacado.Bairro := 'Centro'; // * Titulo.Sacado.Cidade := 'Sucupira'; // * Titulo.Sacado.UF := 'TO'; // * Titulo.Sacado.CEP := '77458000'; // * Titulo.ValorAbatimento := 0.00; Titulo.LocalPagamento := 'QUALQUER BANCO'; Titulo.ValorMoraJuros := 0.00; Titulo.ValorDesconto := 0.00; Titulo.ValorAbatimento := 0.00; Titulo.DataMoraJuros := 0; Titulo.DataDesconto := 0; Titulo.TipoDesconto := tdNaoConcederDesconto; Titulo.DataAbatimento := 0; Titulo.DataProtesto := 0; Titulo.PercentualMulta := 0.00; Titulo.CodigoMoraJuros := cjIsento; //Mensagem.Text := memMensagem.Text; Titulo.OcorrenciaOriginal.Tipo := toRemessaRegistrar; Titulo.Instrucao1 := 'Instruções linha 1'; Titulo.Instrucao2 := 'Instruções linha 2'; end; procedure TForm1.RegistrarBloletoOnLine(Sender: TObject); var SLRemessa: TStringList; i, j: Integer; Boleto : TACBrBoleto; begin // *** Configura acesso a API e dados da empresa *** ConfiguraIntegracaoBB; // *** Inclui um boleto ficticio para registro *** IncluiBoleto; Boleto := ACBrBoleto; //Função de Envio Boleto.Configuracoes.WebService.Operacao := tpInclui; Boleto.EnviarBoleto; // retorna como false se o httpresult code for diferente de 200,201,202 //Verifica Lista com os retornos if Boleto.ListaRetornoWeb.Count > 0 then begin // Este trecho de código é o mesmo do Demo do ACBrBoleto end; end; -
ACBrBoleto - API Banco do Brasil - Erro - Demo e Tutorial furados
alexpt replied to alexpt's tópico in ACBrBoleto
Olá continuo com o mesmo problema na minha aplicação de Teste. Tentei rodar o Demo distribuído com a biblioteca pra ver se funcionava, porem piorou, o demo tá tão furado que já dá violação de acesso logo na carga do programa por usar o DM antes que este seja criado. Corrigido a violação de acesso, ao tentar o Registro on-line, estora a excessão: Lembrando que configurei com as credenciais fornecidas pelo Painel do Desenvolvedor do BB, e ambiente de homologação. Enfim, alguém já consegui realmente fazer o ACBrBoleto funcionar de verdade ? Seria possível contratar um suporte da ACBr para fazer isso funcionar corretamente ? Em fim, agradeço qualquer ajuda. -
ACBrBoleto - API Banco do Brasil - Erro - Demo e Tutorial furados
um tópico no fórum postou alexpt ACBrBoleto
Boa tarde. Estou implementando a integração com a API do Banco do Brasil usando o ACBrBoleto. Estou usando como referência o Demo distribuído com a o pacore ACBr, o passo a passo (em ) e o Vídeo disponível em Apesar de todos eles supostamente se referirem especificamente a API do Banco do brasil nenhum deles faz qualquer relação entre as informações no manual do Manco do Brasil e as propriedades do componente. No vídeo até aparece uns valores definidos no código, mas sem nenhuma referência de origem (valores Star Trek). Fiz meu próprio teste na tentativa de entender alguma coisa, no entanto estou recebendo o seguinte erro: { "statusCode":403, "error":"Forbidden", "message":"Application key is not allowed to call this resource method" } Minhas credenciais fornecidas pelo Painel do Desenvolvedor do BB foram configuradas de acordo com o que está no Passo a Passo. Alguma idéa de como vencer esta etapa ? Agradeço antecipadamente por qualquer ajuda.
