Ir para conteúdo
  • Cadastre-se

dev botao

ACBrBoleto - API Banco do Brasil - Erro - Demo e Tutorial furados


Ver Solução Respondido por alexpt,
  • Este tópico foi criado há 776 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

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.

 

 

Postado

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:

image.png.44590b46ccea51a84eec45c66c7df791.png

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.

  • Administradores
Postado

Bom dia Alex,

Respondendo seu ponto inicial, SIM, o ACBrBoleto é amplamente usado pela comunidade ACBr e com sucesso... certamente deve estar faltando algum detalhe para que vc tb tenha sucesso..

Quando as perguntas da segunda postagem...

Os fontes ACBr são e código aberto, então toda comunidade, pode não ajudar a identificar possíveis ajustes...mas pelo seu print ja percebo que é muito mais provável se tratar de configuração incorreta, conforme destacado pela própria msg de erro.

Quanto ao suporte ACBr, sim ele existe e se chama ACBr Pro, pra saber mais indico acessar nossa página e falar com nossos consultores comerciais em (15) 2105-0750 para possíveis duvidas sobre o plano PRO.

At.

  • Curtir 2
Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

Respondendo a sua dúvida: sim, eu já implementei com sucesso o uso da API do BB tanto com o ACBR quanto sem ele (fazendo as requisições manualmente usando o Synapse).

Creio que as suas configurações estejam incorretas, deve atentar ao fato de você ter que criar uma aplicação no portal de desenvolvedores do BB, o seu cliente deve autorizar o uso para então ter acesso as credenciais (devKey, ClientID e ClienteSecret).

O BB é de longe o banco mais fácil de ser implementado.

  • Curtir 1
  • Solution
Postado (editado)

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;

 

Editado por alexpt
  • Curtir 2
  • Administradores
Postado

Bom dia,
Que bom que conseguiu identificar onde precisam ser feitos ajustes, caso desejar, queira por favor anexar ao tópico as alterações.

At.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Este tópico foi criado há 776 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.