-
Total de ítens
644 -
Registro em
-
Última visita
-
Days Won
1
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Posts postados por Antonio Gomes
-
-
7 horas atrás, Daniel InfoCotidiano disse:
@jefferson01 @Antonio Gomes
Foram criado os eventos OnAntesAutenticar, onDepoisAutenticar para que possam capturar ou informar as informações
Favor atualizar seus repositórios e rodar o instalador.
ficou bacana mano.
-
58 minutos atrás, ronluis disse:
Obrigado pelas respostas mas o problema estava relacionao ao tamanho do Nosso Número q dever ser de 8 preechendo com zeros as esquerda ou seja tinha q fica no exemplo: NS: 00388681.
uma dica que te dou, salva ele sem formatar, para vc evitar esse mesmo problema, se for o campo nosso número,quando voce pegar o nosso numero da caixa, vai entender a bubiça que é, aquele 24 ou 14 no começo do numero.
repara:
-
Mano, como vc coloca os dados no componente?
parece falta de DVMe preocupa essa msg... parar clientes. kkk
-
Lembrando que é apenas PJ, aquele site azul.. quem é laranja, MEI, não ainda. aff
-
7 minutos atrás, Daniel InfoCotidiano disse:
@jefferson01
Bom dia !
Primeiramente obrigado pela contribuição.
Estava falando com o time de boleto e como padrão de autenticação OAuth ele só gera outro token caso necessário automaticamente.
Poderia detalhar melhor por favor a necessidade de salvar no banco por exemplo, igual citado no post acima.
ObrigadoUai, suspeito que seja pelo tempo que ele pede, vc nao pode gerar outro token, se o anterior tiver valido, mas apenas usar, contar o tempo em minutos.
Senao eles poem a gente na geladeira: olha:
Obter token oAuth
A autenticação OAuth é a mais recente forma de autenticar os novos serviços disponibilizados pelo Inter. O Token gerado será necessário para consumir as APIs do Inter.
- O tempo de vida de um token gerado é de uma hora. Com isso, é possível realizar um número determinado de requisições nas apis, de acordo com o rate limit de cada api, utilizando um único token.
- Rate limit: 5 chamadas por minuto
fonte: https://developers.bancointer.com.br/reference/token-1
-
voce quer carregar essas opções? toRemessaRegistrar, toRemessaBaixar etc.
case ARem_Ocorrencia_Remban of
0: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaRegistrar;
1: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaBaixar;
2: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaConcederAbatimento;
3: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaCancelarAbatimento;
4: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaAlterarVencimento;
5: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaAlterarNumeroControle;
6: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaProtestar;
7: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaCancelarInstrucaoProtestoBaixa;
8: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaCancelarInstrucaoProtesto;
9: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaOutrasAlteracoes;
else
Raise Exception.Create('Código de ocorrência: ' + aRem_Ocorrencia_Remban.ToString + ' inválida.');
end;Essa lista vc pega ela assim Acbrboleto1.GetOcorrenciasRemessa() : TACBrOcorrenciasRemessa;
A ocorrencia varia de acordo com o banco sim, voce deve tomar uma atitude/ação, de acordo com o codigo do retorno que vem, no caso, para baixar, vem 05 ou 06 vem em ListadeBoletos[X].OcorrenciaOriginal.Tipo
- 1
-
Campo livre do santander: O erro parece ser o codigo do cedente... tem banco que não é o numero da conta, mas o cedente na cip
Result := '9'
+ PadLeft(trim(Cedente.CodigoCedente),7,'0')
+ PadLeft(ACBrTitulo.NossoNumero + CalcularDigitoVerificador(ACBrTitulo), 13,'0')
+ '0'
+ PadLeft(trim(Cedente.Modalidade),3,'0');
E para voce fazer a impressao do mesmo boleto, é preciso ter o mesmo numero do campo nosso numero. -
@Daniel InfoCotidiano tinha ligação com a altura? Parecia mais com a espessura das barras. O zoom.
-
3 minutos atrás, jefferson01 disse:
Seguindo a sugestão do @Antonio Gomes, fiz alteração nos fontes criando 2 propriedades no TACBrWebService, que são Token e Expire. Ao gerar o Token eu armazeno as informações nessas novas propriedades com isso consigo gerar um novo token apenas se já tiver expirado ou se não existir um token gerado.
Segue os fontes para analise. Já fiz testes em produção e funcionou corretamente enviando vários boletos(mais de 5) por fez.
Att. Jefferson
Eu salvo o meu no banco de dados, e se caso o operador sair do sistema, fica gravado os dados do token, para nao precisar processar de novo, a cada boleto, é verificado o tempo. Pois ele é fixo, o retorno do inter ja vem com o tempo somado, bom, era assim...
Tipo, entra o comando no endpoint as 15hs, vem que ele vale ate 16hs
-
10 horas atrás, Luiz Carlos Panoni Junior disse:
Ola Antonio, sempre ajudando por aqui hein... obrigado, mais no caso estou usando o componente do ACBR precisa ver onde ele faz a requisição do Token, vou tentar debugar o codigo para entender, pois pelo que vi na documentação, o token é valido por 1 hora.
Código HTTP 401 - Token inválidoVocê precisa adicionar o Bearer token OAuth que foi gerado em Como gerar um token OAuth?. Caso já esteja adicionado, este token provavelmente expirou (validade de 1h) e é necessário emitir um novo.
o meu tem uma falha ali, ao salvar o valor do tokentime.
a proposito, no acbr, é aqui que valida o token
function TBoletoW_Inter_API.GerarTokenAutenticacao: string;
begin
OAuth.Payload := True;
Result := inherited GerarTokenAutenticacao;
end;Na funcao: GerarTokenAutenticacao chama a funcao da boletaws base dessa derivacao: TBoletoW_Inter_API = class(TBoletoWSREST)
o tempo de validade, vem no retorno do
if OAuth.GerarToken then
Result := OAuth.Tokenpara mim, o tempo deve ser aqui: property Expire : TDateTime read FExpire; na unit ACBrBoletoWS.Rest.OAuth
Sempre que posso ajudo ...
-
tem que colocar no cadastro da sua conta corrente, um campo campo com data e hora
Ex: pega no cadastro de conta:
Clear;
Add('select ');
Add(' CONTA_CORRENTE_SERV_BANCARIO.CODIGO_SER');
Add(' ,CONTA_CORRENTE_SERV_BANCARIO.CLIENT_ID_SER');
Add(' ,CONTA_CORRENTE_SERV_BANCARIO.CLIENT_SECRET_SER');
Add(' ,CONTA_CORRENTE_SERV_BANCARIO.SESSAO_TOKEN_SER');
Add(' ,CONTA_CORRENTE_SERV_BANCARIO.SESSAO_TOKEN_DATA_HORA_SER');
Add(' ,CONTA_CORRENTE_SERV_BANCARIO.SESSAO_TOKEN_VALIDADE_SER');
Add(' ,CONTA_CORRENTE_SERV_BANCARIO.NOME_CRT_SER');
Add(' ,CONTA_CORRENTE_SERV_BANCARIO.CRT_SER');
Add(' ,CONTA_CORRENTE_SERV_BANCARIO.NOME_KEY_SER');
Add(' ,CONTA_CORRENTE_SERV_BANCARIO.KEY_SER');
Add(' ,CONTA_CORRENTE_SERV_BANCARIO.NOME_PFX_SER');
Add(' ,CONTA_CORRENTE_SERV_BANCARIO.PFX_SER');// SENHA_CRT_KEY_SER
Add('from CONTA_CORRENTE_SERV_BANCARIO');
Add('where CONTA_CORRENTE_SERV_BANCARIO.CODIGO_SER = ' + AServicoBancario.ToString);TFuncoesBancoDeDados.ExecuteReaderFD(Text, ATransacao, FDS);
finally
DisposeOf;
end;AToken := FDS.FieldByName('SESSAO_TOKEN_SER').AsString;
ATokenTime := FDS.FieldByName('SESSAO_TOKEN_VALIDADE_SER').AsDateTime;
ClientId := FDS.FieldByName('CLIENT_ID_SER').AsString;
ClientSecret := FDS.FieldByName('CLIENT_SECRET_SER').AsString;// venceu ou nao tem
if (AToken = '') or (ATokenTime <= Now) then
begin
HoraTmp := Now;Inter := TBancoInter.Create(nil);
tryInter.ClientId := ClientId;
Inter.ClientSecret := ClientSecret;
Inter.CertFile := CrtTmp;
Inter.KeyFile := KeyTmp;Inter.GetToken;
AToken := Inter.Token;
ATokenTime := Inter.TokenTime;if AToken <> '' then
begin
with TStringList.Create do
try
Clear;
Add('update CONTA_CORRENTE_SERV_BANCARIO set');
Add(' CONTA_CORRENTE_SERV_BANCARIO.SESSAO_TOKEN_SER = ' + QuotedStr(AToken));
Add(' ,CONTA_CORRENTE_SERV_BANCARIO.SESSAO_TOKEN_DATA_HORA_SER = ' + TFuncoesSQL.DataHoraSQL(HoraTmp));
Add(' ,CONTA_CORRENTE_SERV_BANCARIO.SESSAO_TOKEN_VALIDADE_SER = ' + TFuncoesSQL.DataHoraSQL(HoraTmp));
Add('where CONTA_CORRENTE_SERV_BANCARIO.CODIGO_SER = ' + AServicoBancario.ToString);TFuncoesBancoDeDados.ExecuteCommand(Text, ATransacao);
finally
DisposeOf;
end;
end;
finally
Inter.DisposeOf;
end;
end; -
20 horas atrás, Paulo Henchs disse:
Então:
Tem um caso, que vc precisa limpar e tem um caso que precisa colocar dados do cedente no objeto, olha onde é isso
function TACBrBancoClass.ValidarDadosRetorno(const AAgencia, AContaCedente: String; const ACNPJCPF: String= '';
const AValidaCodCedente: Boolean= False Boolean;
begin
try
With ACBrBanco.ACBrBoleto do
begin
if NaoEstaVazio(ACNPJCPF) then
if (not LeCedenteRetorno) and (ACNPJCPF <> OnlyNumber(Cedente.CNPJCPF)) then
raise Exception.CreateFmt(ACBrStr('CNPJ\CPF: %s do arquivo não corresponde aos dados do Cedente!'), [ACNPJCPF]);
Logo que começa ler o retorno, é feito isso:
rCNPJCPF := DefinerCnpjCPFRetorno240(ARetorno[0]); // primeira linha do retorno
function TACBrBancoClass.DefinerCnpjCPFRetorno240(const ALinha: String): String;
begin
Result := OnlyNumber( copy(ALinha, 19, 14) );
end;
ValidarDadosRetorno('', '', rCNPJCPF);Quando LeCedenteRetorno for false, é comparado com os dados que voce colocou no cedente do componente, isso ja tem bastante tempo que é assim.
Sugestão, colocar ele True, se vc nao quer alimentar antes o objeto acbrboleto
Ex: como eu uso:
FuncBoleto.ACBrBoleto.LeCedenteRetorno := true; // problema do sicoob 756
FuncBoleto.ACBrBoleto.Cedente.Conta := '0'; // Ocultar erro do ACBr
FuncBoleto.ACBrBoleto.LerRetorno(ArquivoDeRetorno);
Porem, eu uso o objeto para ler, e eu acho a conta no meu sistema, tem casos, que a pessoa lê, com a conta ja selecionada na tela, ou seja, o erro ali, pode ser isso, vc passou uma informacao, e leu outra.
- 1
-
clientid e clientsecret, informou?
-
ah: me peguei confuso com esse buscar hoje, da api nova... quando é filtrado por situacao pago, o filtro do campo datainicial e datafinal, é a data de pagamento...
Logo, tive que ajustar hoje em um cliente, para pegar data inicial - 7 e datafinal = date.ou o seu ai, é caso de erro mesmo ?
-
no que eu tenho aqui, é preciso vincular um certificado e colocar a conta no header, fez isso?
e o codigo do retorno, salvo engano, é 200, teve qual numero de retorno ?
-
17 horas atrás, Luiz Carlos Panoni Junior disse:
Você montou pelo acbrboleto com o retorno do Inter ?, pode exemplificar por favor ?
respondi no privado, para não me encherem o saco aqui ... prints.
17 horas atrás, Luiz Carlos Panoni Junior disse:Você montou pelo acbrboleto com o retorno do Inter ?, pode exemplificar por favor ?
Esqueci de mencionar, mesmo com emissao via acbr dá para montar, no meu caso, é boleto via api. Nem sei por onde passa essa de mandar retorno desse banco, coloquei o cliente usar via api, é mais prático.
-
fi, eu montei o boleto aqui, pelo que eles retornam.
Linha digitavel e codigo de barras.
o resto a gente tem para colocar na impressao.
- 1
-
ou fi, isso dai, é quando vc envia remessa, quitado, vem como 06 se nao me engano, vem como liquidacao normal.
o banco manda isso, se caso vc quiser processar algo no seu bordero de retorno bancario...
tem casos, que quando é banco emite, vc precisa gravar o campo nosso numero, pois é o banco quem gera, dá uma olhada nos codigos de retornos, para entender legal isso.
-
Em 29/09/2022 at 10:08, neto233 disse:
Bom dia, @Antonio Gomes como você usa a API? tem algum exemplo?
da versão 1 tenho, mas, falando com um amigo, segundo me informou, a v2, tem pouca diferença.
-
48 minutos atrás, valterpatrick disse:
Se eu apenas colocar o arquivo "\\ACBr\Fontes\ACBrDFe\ACBrNFe\ACBrNFeServicos.ini" na pasta do executável do cliente já resolveria ou teria que atualizar o ACBr todo?
sim, vc muda a url.
Acontece que eu não sou de mandar isso, para evitar fadiga, mas, ja vou criar uma rotina para deletar ele da pasta, quando o programa for atualizado com a versao certa.
-
Atualiza que foi arrumado já, acabei de atualizar aqui.
- 1
-
MG: Produção: Até dia 21/09, a url de consulta estava
URL-ConsultaNFCe_2.00=http://nfce.fazenda.mg.gov.br/portalnfce
A partir desse dia, está gerando a rejeição, a url foi alterada para
<urlChave>https://portalsped.fazenda.mg.gov.br/portalnfce</urlChave>
Isso vai ser mudado mesmo ou trocaram por engano, a do QR code está correta.
Até dia 21/09
<infNFeSupl>
<qrCode>https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml?p=</qrCode>
<urlChave>http://nfce.fazenda.mg.gov.br/portalnfce</urlChave>
</infNFeSupl>Apos 21/09
<infNFeSupl>
<qrCode>https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml?p=</qrCode>
<urlChave>https://portalsped.fazenda.mg.gov.br/portalnfce</urlChave>
</infNFeSupl> -
ACbr não, mas não é dificil fazer.
-
Dica: Vai pela API, é muito prático, o boleto sai na hora.
Boleto com Recibo
em ACBrBoleto
Postado
Até onde sei, isso não tem, é bem especifico, sugestão que te dou, é criar sua impressão.
Se vc usa fast report, é fácil contornar.