Filippe Maymone Postado 6 Março Postado 6 Março Boa tarde. Não estou conseguindo gerar múltiplos na API banco Inter. Envia o primeiro e da OK Certinho .. .ai no segundo da "06/03/26 14:36:37:276 -03:00 - Código do Envio: 429 1.1 Too Many Requests" ja tentei mandar 1 por um em um loop e colocar uns sleep e nada .. minha rotina esta assim procedure Tfrprincipal.EnviarBoletos; var SLRemessa: TStringList; i, j: Integer; MinhaQueryUpdate: TFDQuery; xSeuNumeroRaw, xFiltro, xRef, xParcela, sMsgErro: string; Partes: TArray<string>; begin if FACBrBoleto.ListadeBoletos.Count <= 0 then Exit; if not ConfirmMessage('Deseja enviar ' + FACBrBoleto.ListadeBoletos.Count.ToString + ' Boleto(s)?', True) then Abort; SLRemessa := TStringList.Create; try MostraEspera('Enviando boletos...'); // Envia tudo de uma vez, igual ao exemplo do ACBr FACBrBoleto.Configuracoes.WebService.Operacao := tpInclui; FACBrBoleto.Enviar; SLRemessa.Add('=== ENVIO: ' + FormatDateTime('dd/mm/yyyy hh:nn:ss', Now) + ' | Boletos: ' + FACBrBoleto.ListadeBoletos.Count.ToString + ' | Retornos: ' + FACBrBoleto.TotalListaRetornoWeb.ToString + ' ==='); if FACBrBoleto.TotalListaRetornoWeb <= 0 then begin SLRemessa.Add('NENHUM retorno recebido da API.'); Exit; end; MinhaQueryUpdate := TFDQuery.Create(nil); try MinhaQueryUpdate.Connection := frdm.FDConn; for i := 0 to Pred(FACBrBoleto.TotalListaRetornoWeb) do begin SLRemessa.Add('---'); SLRemessa.Add('HTTP=' + IntToStr(FACBrBoleto.ListaRetornoWeb[i].HTTPResultCode)); SLRemessa.Add('Msg=' + FACBrBoleto.ListaRetornoWeb[i].MsgRetorno); SLRemessa.Add('JSON=' + FACBrBoleto.ListaRetornoWeb[i].JSON); // Só grava no banco se foi sucesso (200 ou 201) if FACBrBoleto.ListaRetornoWeb[i].HTTPResultCode in [200, 201] then begin xSeuNumeroRaw := FACBrBoleto.ListaRetornoWeb[i].DadosRet.TituloRet.SeuNumero; // Se vier vazio no retorno, pega do boleto enviado pelo índice if (xSeuNumeroRaw = '') and (FACBrBoleto.ListadeBoletos.Count > i) then xSeuNumeroRaw := FACBrBoleto.ListadeBoletos[i].SeuNumero; SLRemessa.Add('SeuNumero=' + xSeuNumeroRaw); SLRemessa.Add('NossoNumero=' + FACBrBoleto.ListaRetornoWeb[i].DadosRet.TituloRet.NossoNumero); SLRemessa.Add('CodBarras=' + FACBrBoleto.ListaRetornoWeb[i].DadosRet.TituloRet.CodBarras); SLRemessa.Add('LinhaDig=' + FACBrBoleto.ListaRetornoWeb[i].DadosRet.TituloRet.LinhaDig); if xSeuNumeroRaw = '' then begin SLRemessa.Add('ERRO: SeuNumero vazio, não foi possível localizar no banco.'); Continue; end; Partes := xSeuNumeroRaw.Split(['-']); if Length(Partes) < 2 then begin SLRemessa.Add('ERRO: formato de SeuNumero inválido: ' + xSeuNumeroRaw); Continue; end; xRef := Partes[0].Trim; xParcela := Partes[Length(Partes)-1].Trim; if Pos('P', UpperCase(xRef)) = 1 then begin xRef := StringReplace(UpperCase(xRef), 'P', '', [rfReplaceAll]).Trim; xFiltro := Format(' and idpedido = %s and nparcela = %s', [xRef, QuotedStr(xParcela)]); end else xFiltro := Format(' and numnf = %s and nparcela = %s', [xRef, QuotedStr(xParcela)]); try MinhaQueryUpdate.SQL.Text := 'UPDATE TBCTAREC SET ' + ' NOSSONUMERO = :NOSSONUMERO, ' + ' CODIGOBARRAS = :CODIGOBARRAS, ' + ' IDCONTA = :IDCONTA, ' + ' LINHADIGITAVEL = :LINHADIGITAVEL, ' + ' STATUS_API = :STATUS_API, ' + ' QRCODE = :QRCODE, ' + ' STSBOLETO = ''T'' ' + 'WHERE 1=1 ' + xFiltro; MinhaQueryUpdate.ParamByName('IDCONTA').AsInteger := cbSelConta.Value; MinhaQueryUpdate.ParamByName('NOSSONUMERO').AsString := FACBrBoleto.ListaRetornoWeb[i].DadosRet.TituloRet.NossoNumero; MinhaQueryUpdate.ParamByName('CODIGOBARRAS').AsString := FACBrBoleto.ListaRetornoWeb[i].DadosRet.TituloRet.CodBarras; MinhaQueryUpdate.ParamByName('LINHADIGITAVEL').AsString := FACBrBoleto.ListaRetornoWeb[i].DadosRet.TituloRet.LinhaDig; MinhaQueryUpdate.ParamByName('STATUS_API').AsString := FACBrBoleto.ListaRetornoWeb[i].DadosRet.TituloRet.EstadoTituloCobranca; MinhaQueryUpdate.ParamByName('QRCODE').AsString := FACBrBoleto.ListaRetornoWeb[i].DadosRet.TituloRet.EMV; MinhaQueryUpdate.ExecSQL; SLRemessa.Add('SUCESSO gravado no banco: ' + xSeuNumeroRaw); except on E: Exception do SLRemessa.Add('ERRO ao gravar banco ' + xSeuNumeroRaw + ': ' + E.Message); end; end else begin // Loga erros e rejeições sMsgErro := FACBrBoleto.ListaRetornoWeb[i].MsgRetorno; for j := 0 to Pred(FACBrBoleto.ListaRetornoWeb[i].ListaRejeicao.Count) do sMsgErro := sMsgErro + ' | ' + FACBrBoleto.ListaRetornoWeb[i].ListaRejeicao[j].Mensagem; SLRemessa.Add('FALHA HTTP ' + IntToStr(FACBrBoleto.ListaRetornoWeb[i].HTTPResultCode) + ': ' + sMsgErro); end; end; finally MinhaQueryUpdate.Free; end; imprimirBoleto; finally SLRemessa.SaveToFile(arqRetorno + 'Log_Final_' + FormatDateTime('hhmmss', Now) + '.txt'); SLRemessa.Free; FechaEspera; end; end; Coloquei o retorno .. so dei uma bagunçada nos dados sensíveis ... mas o retorno é esse .. vai o primeiro e os demais não .. retorno.txt
Consultores Juliomar Marchetti Postado 9 Março Consultores Postado 9 Março senão me engano é o token que tu deve gravar ele e usar o mesmo até ele vencer. senão o ccomportamento do componente será gerar um novo Juliomar Marchetti Ajude o Projeto ACBr crescer - Seja Pro discord: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br 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 !!
Membro Pro Verificado C4Dev Postado 20 Março Membro Pro Verificado Postado 20 Março Estou passando pelo mesmo problema com o Banco Inter, pelo que entendi quando envio uma lista de boletos para o ACBr enviar para a API, o próprio ACBr faz o controle do token e utiliza o mesmo para todos os boletos enviados. O que está ocorrendo é que logo após o envio do primeiro boleto, já no segundo boleto a API retorna o erro 429. Não faz sentido, porque não ultrapassou o limite de 5 tokens por minuto. O que notei é que ocorrem vários envios no mesmo segundo de tempo por conta da rapidez, e acredito que seja esse o motivo da API rejeitar. Infelizmente não encontrei nada na documentação do banco relacionado a isso, mas imagino que talvez um delay de 1 segundo entre cada requisição à API, dentro dos fontes do ACBr poderia resolver. Mais alguém passou por isso ou tem alguma solução?
Filippe Maymone Postado 20 Março Autor Postado 20 Março isso .. o meu foi o seguinte .. eu estava enviando na versão 2.0 que esta sendo descontinuada .. mesmo no campo de versão se voce colocar 3.0 ele entra o 2.0 O que determina a versão no acbr é o indicadorPIX .. se voce colcoar ele como true, ele envia para o endereço do webservice 3.0 se colocar false envia no 2.0 1
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora