-
Total de ítens
898 -
Registro em
-
Última visita
-
Days Won
1
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que Antonio Gomes postou
-
Na verdade, existe um ciclo que eu tive que programar no meu sistema, por conta do inter, ele nao bate de cara e devolve tudo. Repara meu código: TBoletoAPI = record CodigoSolicitacao: string; NossoNumeroFormatado: string; CodigoBarras: string; LinhaDigitavel: string; TxPIX: string; UrlPIX: string; NumeroBoleto: string; DVBoleto: string; procedure Limpar; end; FBoletoApi: TBoletoAPI; // tem os dados do boleto que uso para salvar no meu banco e carrego quando começo processar, abaixo o codigo do inter gravado na primeira passada. FBoletoApi.CodigoSolicitacao := AFDReceber.FieldByName('COD_SOLICITACAO_BOL_REC').AsString; // Anterior LCodigoSolicitacaoTmp := FBoletoApi.CodigoSolicitacao; AMsgErro := ''; LFlagEnviar := True; // bloco tratar, se gravou apenas o numero correspondente: if (FDSServBanc.FieldByName('API_CONS_APOS_INCLUIR_SER').AsString = 'S') and (FBoletoApi.CodigoSolicitacao <> '') and (FBoletoApi.NumeroBoleto = '') then begin // Se deu erro anterior, mas gravou o recibo de solicitacao, consultar - inter tem isso = se ja foi enviado, nao pode mandar de novo Boleto.Configuracoes.WebService.Operacao := TOperacao.tpConsultaDetalhe; Boleto.Enviar; AMsgErro := LerRetornoDeAPI(Boleto, FBoletoApi); LFlagEnviar := False; // não enviar de novo if FBoletoApi.CodigoSolicitacao <> '' then LCodigoSolicitacaoTmp := FBoletoApi.CodigoSolicitacao; end; // TODOS DEMAIS BANCOS, interv2 ou interv3, se nao tiver ainda o recibo if (AMsgErro = '') and LFlagEnviar then begin Boleto.Configuracoes.WebService.Operacao := TOperacao.tpInclui; Boleto.Enviar; AMsgErro := LerRetornoDeAPI(Boleto, FBoletoApi); if FBoletoApi.CodigoSolicitacao <> '' then LCodigoSolicitacaoTmp := FBoletoApi.CodigoSolicitacao; end; // esperar entre transmissao if LFlagEnviar and (FDSServBanc.FieldByName('API_CONS_APOS_INCLUIR_SER').AsString = 'S') and (FDSServBanc.FieldByName('API_TEMPO_CONS_SER').AsInteger > 0) and (FBoletoApi.NumeroBoleto = '') then begin Sleep(FDSServBanc.FieldByName('API_TEMPO_CONS_SER').AsInteger); end; // inter: Se antes nao tinha solicitacao, agora tem, e ainda nao pegou o retorno do boleto, pegar // c6, vem o retorno sem precisar consultar, se tem o boleto, nao pode consultar, dá erro if (AMsgErro = '') and (FDSServBanc.FieldByName('API_CONS_APOS_INCLUIR_SER').AsString = 'S') and // inter v3 (LCodigoSolicitacaoTmp = '') and (FBoletoApi.CodigoSolicitacao <> '') and (FBoletoApi.NumeroBoleto = '') then begin Boleto.Configuracoes.WebService.Operacao := TOperacao.tpConsultaDetalhe; Boleto.Enviar; AMsgErro := LerRetornoDeAPI(Boleto, FBoletoApi); if (LCodigoSolicitacaoTmp = '') and (FBoletoApi.CodigoSolicitacao <> '') then LCodigoSolicitacaoTmp := FBoletoApi.CodigoSolicitacao; if (LCodigoSolicitacaoTmp = '') and (FBoletoApi.CodigoSolicitacao <> '') then LCodigoSolicitacaoTmp := FBoletoApi.CodigoSolicitacao; end; E aumente seu timeout, o padrao do componente tem dias que bixa tudo, eu coloquei 10000 no meu, mas tem cliente que ja botei 15000. Padrão do ACBr: 5000
-
Mano, tenta depurar com esse retorno: IDBoleto if ABoleto.ListaRetornoWeb[I].DadosRet.IDBoleto.IDBoleto <> '' then ABoletoApi.CodigoSolicitacao := ABoleto.ListaRetornoWeb[I].DadosRet.IDBoleto.IDBoleto; ABoletoApi.NossoNumeroFormatado := ABoleto.ListaRetornoWeb[I].DadosRet.IDBoleto.NossoNum; ABoletoApi.CodigoBarras := ABoleto.ListaRetornoWeb[I].DadosRet.IDBoleto.CodBarras; ABoletoApi.LinhaDigitavel := ABoleto.ListaRetornoWeb[I].DadosRet.IDBoleto.LinhaDig; ABoletoApi.TxPIX := ABoleto.ListaRetornoWeb[I].DadosRet.TituloRet.TxId; ABoletoApi.UrlPIX := ABoleto.ListaRetornoWeb[I].DadosRet.TituloRet.EMV; // inter está vindo aqui if ABoletoApi.UrlPIX = '' then ABoletoApi.UrlPIX := ABoleto.ListaRetornoWeb[I].DadosRet.TituloRet.UrlPIX; if ABoletoApi.CodigoSolicitacao = '' then ABoletoApi.CodigoSolicitacao := ABoleto.ListaRetornoWeb[I].DadosRet.TituloRet.NossoNumeroCorrespondente; // separar dados - inter vem junto ABoletoApi.NumeroBoleto := Copy(ABoletoApi.NossoNumeroFormatado, 1, ABoletoApi.NossoNumeroFormatado.Length - 1); ABoletoApi.DVBoleto := Copy(ABoletoApi.NossoNumeroFormatado, ABoletoApi.NossoNumeroFormatado.Length, 1);
-
Tá doido... Posta como voce grava, os campos que voce pega do acbr e coloca se está atualizado seu projeto acbr.
-
Correção da unit ACBrBoletoWS no ACBrBoleto para o c6Bank
Antonio Gomes replied to Jhonlenon Ribeiro's tópico in ACBrBoleto
Estamos quase lá então, uma ideia poderia ser salvar essa lista, e retornar para impressão? Das enviadas e que nao precisam mais ser transmitidas... Carece eu testar, se remover da lista as enviadas com sucesso se imprime certo as 50 parcelas colocadas, se limpa so a parte de envio, se sim qual comando é? Hoje precisa limpar o ListaDeBoletos, que penso que esteja atrelado o retorno em TBoleto.TotalListaRetornoWeb ou seja o titulo esta dentro da lista né? Ex: Boleto.ListadeBoletos.Clear; // tem nao fazer isso, mas limpar so lista de envio ? -
Correção da unit ACBrBoletoWS no ACBrBoleto para o c6Bank
Antonio Gomes replied to Jhonlenon Ribeiro's tópico in ACBrBoleto
Não sei, eu não envio monte de NFe, sempre foi uma a uma, justamente para evitar esses problemas, mas o boleto, te dizer a verdade eu vi esse problema, pq estou sempre trocando ideias com quem mexe com as integrações de bancos, ainda mais o C6... Logo, eu não tenho o habito de usar o componente para enviar o pacote de carnes como vocês tem nos demos. Lembre-se, esse problema é com carnê. Mesmo eu com carnê eu processo um boleto por vez, nem impressão eu uso do objeto, pois se mexer nessa mesma lista que vc falou para limpar a impressão cai por terra. De novo, pense fora da caixa, com a mente do lado de cá. Obs: está propicio a data erro na parcela, mesmo sendo o mesmo cliente na lista, api falhar no final do envio.... -
Correção da unit ACBrBoletoWS no ACBrBoleto para o c6Bank
Antonio Gomes replied to Jhonlenon Ribeiro's tópico in ACBrBoleto
Se der erro no envio da api sim, isso acontece. Pense fora da caixa. -
entao, a parte do retorno do log voce removeu ? Pergunta: A dll de comunicação no cliente voce colocou igual a sua?
-
Correção da unit ACBrBoletoWS no ACBrBoleto para o c6Bank
Antonio Gomes replied to Jhonlenon Ribeiro's tópico in ACBrBoleto
analisando, para que nao seja acionado o mesmo processo se algum boleto da lista estiver processado, ignorar: Analisando o retorno de cada unit Ret, no caso o C6 ele preenche isso: ARetornoWS.DadosRet.IDBoleto.CodBarras := OnlyNumber(LJsonObject.AsString['bar_code']); ARetornoWS.DadosRet.IDBoleto.LinhaDig := OnlyNumber(LJsonObject.AsString['digitable_line']); ARetornoWS.DadosRet.IDBoleto.NossoNum := LJsonObject.AsString['our_number'];//LinhaDigitavelExplodeInfo(ARetornoWS.DadosRet.IDBoleto.LinhaDig,TLDNossoNumero);//LJsonObject.AsString['internal_id']; ARetornoWS.DadosRet.IDBoleto.IDBoleto := LJsonObject.AsString['id']; ARetornoWS.DadosRet.TituloRet.NossoNumeroCorrespondente := ARetornoWS.DadosRet.IDBoleto.IDBoleto; ARetornoWS.DadosRet.TituloRet.CodBarras := ARetornoWS.DadosRet.IDBoleto.CodBarras; ARetornoWS.DadosRet.TituloRet.LinhaDig := ARetornoWS.DadosRet.IDBoleto.LinhaDig; ARetornoWS.DadosRet.TituloRet.NossoNumero := ARetornoWS.DadosRet.IDBoleto.NossoNum; ARetornoWS.DadosRet.TituloRet.Carteira := LJsonObject.AsString['billing_scheme']; ARetornoWS.DadosRet.TituloRet.Vencimento := DateToDateTime(LJsonObject.AsString['due_date']); Logo, penso que talvez criar um rotina virtual, de cada unit, ainda tem poucos para mexer, com uma coisa tipo; Hipotese, em cada banco: function TRetornoEnvio_C6.BoletoFoiEnviado(const ARetornoWS: TACBrBoletoRetornoWS): Boolean; begin // analisar se o boleto na fila está ja com dado que a api retorna, precisa ser cada banco, pois cada um manda de uma forma, precisa ser a informacao vital da existencia do boleto na api ou o retorno do sucesso do registro Result:= (ARetornoWS.DadosRet.IDBoleto.CodBarras <> '') and (ARetornoWS.DadosRet.IDBoleto.LinhaDig <> ''); end; -
Correção da unit ACBrBoletoWS no ACBrBoleto para o c6Bank
Antonio Gomes replied to Jhonlenon Ribeiro's tópico in ACBrBoleto
@panda Então Jhoni, conforme conversamos, uma sugestão, é avaliar, se o boleto a ser enviado, já tem o dado que o retorno da API preenche, no caso, nosso numero é um caso. Tipo, colocar um continue, para nao mandar de novo, se tem ele já veja: try if FBoleto.ListadeBoletos.Count > 0 then begin for indice := 0 to Pred(FBoleto.ListadeBoletos.Count) do begin if NumeroDoBoletoAPI <> '' then // precisa pegar o campo que grava o retorno do numero do boleto Continue; -
Boleto C6 Não retorna nosso número na resposta da geração.
Antonio Gomes replied to Diego Bastos's tópico in ACBrBoleto
- 15 replies
-
- 1
-
-
- bug report
- boletos
-
(e 1 mais)
Tags:
-
Boleto C6 Não retorna nosso número na resposta da geração.
Antonio Gomes replied to Diego Bastos's tópico in ACBrBoleto
Mano, isso if (ARetornoWS.ListaRejeicao.Count = 0) then vem zerado no seu ?- 15 replies
-
- bug report
- boletos
-
(e 1 mais)
Tags:
-
Boleto C6 Não retorna nosso número na resposta da geração.
Antonio Gomes replied to Diego Bastos's tópico in ACBrBoleto
tente aumentar o time out comigo o padrao do acbr nao deu bom, pelo menos nesse banco, nao volta retorno as vezes, e voce tenta mandar de novo, avisa que ja tem um boleto gerado- 15 replies
-
- bug report
- boletos
-
(e 1 mais)
Tags:
-
Boleto C6 Não retorna nosso número na resposta da geração.
Antonio Gomes replied to Diego Bastos's tópico in ACBrBoleto
o retorno desse banco é no tpConsultaDetalhe ou tpInclui Qual voce usou?- 15 replies
-
- bug report
- boletos
-
(e 1 mais)
Tags:
-
Isso, o meu eu mudei também de sandbox paa homologacao e deu certo... Eu pensava que ja tinha testado isso antes em modo sandbox kkk o case ali
-
a falta da url descobri pq, se pusermos em sandbox nao entra nisso, nao tem como colocar o sandbox ali no homogacao ?
-
dead_line deles tem pegadinha tá: O deles é carencia de juros, nao dias apos vencido para calcular juros, eu pasava no meu que o juros era um dia apos o vencimento, mandaram eu colocar zero no dead_line O retorno prepara que tem outra pegadinha, o nosso numero vem com zero a menos no retorno txt, e nao tem comando ainda na api para pegar extrato dos boletos pagos. 29/05/25 09:27:35:873 -03:00 - Comando Enviar: {"external_reference_id":"MN00001","amount":100, "due_date":"2025-06-29","instructions":["Teste MSG!"], "discount":{"discount_type":"P", "first":{"value":10,"dead_line":10}}, "interest":{"type":"P","value":0.1,"dead_line":5}, "fine":{"type":"P","value":5,"dead_line":5}, "payer":{"name":"Teste de Nome Sacado","tax_id":"50146335015", "address":{"street":"Teste de Endereco","number":1,"complement":"","city":"Teste Cidade","state":"SP","zip_code":"01014000"}}} Por hora atualizei o acbr ontem, deu erro de falta de url de sandbox... devem ter mexido algo mesmo
-
A solução por hora nao foi no componente. Mas no programa mesmo. A do meu ponto de vista, o retorno vindo no txt eles tilham que nivelar os campos ao retorno quando é carteira 20,gerado via boleto cliente emite. Mas como disse, a api pede pouca coisa.
-
Como não vi evolução por parte do C6, para colocar o valor correto, eu fiz uma gambia no meu sistema, acrescentando o zero para achar o nosso numero, e vida que segue. Fecha o tópico, se puder ate deletar, pois nao tem relevancia.
-
Alexandre, ali a gente pode mexer, para atender uma carteira né ? Pois a api está vindo como carteira 15, logo o retorno se vc analisar, nao tem de fato os dados tudo. Embora eles tenha devolvido meu dado unico no campo da posicao do "numero do documento", acho que é so inverter a leitura, ou ainda assim, aguardar se o c6 ajuste o retorno de liquidações de boletos oriundos da api.
-
Voce está em sandbox com o certificado de desenvolvedor ou está usando credencial do seu cliente?
-
Alexandre, aguarda que estou em contato com C6, detectei, que o retorno veio diferente, por causa da carteira 15, da API. O retorno está ok para carteira 20, que é aquela de remessa enviada em txt.
-
Olá, @Alexandre de Paula Retorno C6: CNAB400, posição de captura de dados incorreta. Seguindo o manual anexo, na página 10/41, mostra a captura do "Seu Numero", na posição 117 com corte de 10 posições, porém, no componente está sendo lancado, como se fosse documento, pergunta, posso arrumar vocês subirem isso ? Manual anexo, e print do fonte do local incorreto. c6 2025 manual-cnab.pdf
-
Resolvi dentro do meu ERP, como disse, fiz coisa que nunca era pra ter feito... criar parametro para dias para começa contar juros, era fixo no meu sistema, juros, é sempre manhã seguinte do vencimento do boleto, logo: vencimento + 1 dia... Mas, o C6, inventou um tal de carencia, o dead_line, era tão simples, ter mantido a data para juros, igual era na remessa txt... enfim, não murro em ponta de faca, resolvi para o cliente, mas, sei que todos demais bancos, é o oposto dessa ideia, no caso, é qdo começa contar como juros, a data. Em teoria, dentro do Brasil, juros é sempre após vencido né... A proposito, no acbr, minha sugestão de mexer, é para o corte das strings, bem como os caráteres que nao podem ir, que é diferente tambem. O json deles, precisa ter validador antes, de repente, ao invés de cortar, validar. Não sei até que ponto, é valido fazer validação, sou ser drástico, e cortar, eu cortei, pois, se o cliente precisar de mexer em nome e rua de cliente, para atender a um segmento, o cadastro fica ruim, pois, NF-e, se você pegar, acata 60 dígitos.. nome, rua, enfim. Carece analisar, antes de mudar, o que é bom para eu, pode não ser para outro, embora no final a regra é da API kkk.
-
Alexandre, tem outro bug lá tambem, onde pedem o dead_line, o prazo em dias, para juros ou multa, no meu sistema, eu resolvi, criando campos dentro da conta corrente, para colocar quantos dias para começar calcular juros e multas, na remessa, isso vai, a data que a gente manda, na api do C6, mandaram eu enviar zero, no dois campos dead_line, tanto do juro quanto da multa. Outro caso que ocorreu no cliente hoje, foi ter o nome da rua com Rodovia X/Cidade, essa barra, foi motivo de rejeição, no caso, eu recordo na nfe, que é passado pelo conversor de, por exemplo, quando tem uma barra, que atrapalha o xml, é criado com aquele &, nesse, via documentação, você acha que poderia ser? A documentação: https://developers.c6bank.com.br/apis/bankslip#tag/bank_slips/POST/ Penso, que os caracteres estanhos do lado, seja as excessoes. Vou criar no meu, modo de retirar, mas, nem todas é assim, tão criteriosa, tanto, que eu uso inter em outros clientes, e nao acusa tanto problema assim de cadastros. É possivel ter o meu soft nessas tags? para conhecimento de problemas... partner-software-name partner-software-version
-
Olá, Gostaria de sugerir, se posso acatar e mudar dentro do fonte, de fazer o corte de strings, dentro da unit de gerar o json do banco C6, gera muitos erros ao enviar. Ex: Rejeições: Campo: https://developers.c6bank.com.br/v1/error/invalid_request Código: 400 Versão: Correlation_id:93bfea3831671d13-GRU Ocorrência: O campo 'street' do pagador n�o pode ter mais que 33 caracteres. Bad Request Mensagem: Requisi��o inv�lida. Isso se deu, pelo fato de que, nao sempre preocupávamos com o tamanho da string de nome, rua, bairro, complemento, etc., porém, quando é arquivo de remessa, ja corta certo, mas na api, isso nao acontece, então, como sugestão, é, alterar no ato do json e mandar ai, poderia eu fazer?
