Ir para conteúdo
  • Cadastre-se

Antonio Gomes

Membros
  • Total de ítens

    898
  • Registro em

  • Última visita

  • Days Won

    1

Tudo que Antonio Gomes postou

  1. 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
  2. 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);
  3. Tá doido... Posta como voce grava, os campos que voce pega do acbr e coloca se está atualizado seu projeto acbr.
  4. 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 ?
  5. 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....
  6. Se der erro no envio da api sim, isso acontece. Pense fora da caixa.
  7. entao, a parte do retorno do log voce removeu ? Pergunta: A dll de comunicação no cliente voce colocou igual a sua?
  8. 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;
  9. @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;
  10. Mano, isso if (ARetornoWS.ListaRejeicao.Count = 0) then vem zerado no seu ?
  11. 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
  12. o retorno desse banco é no tpConsultaDetalhe ou tpInclui Qual voce usou?
  13. 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
  14. a falta da url descobri pq, se pusermos em sandbox nao entra nisso, nao tem como colocar o sandbox ali no homogacao ?
  15. 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
  16. 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.
  17. 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.
  18. 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.
  19. Voce está em sandbox com o certificado de desenvolvedor ou está usando credencial do seu cliente?
  20. 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.
  21. 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
  22. 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.
  23. 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 &amp, 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
  24. 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?
×
×
  • 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.

The popup will be closed in 10 segundos...