Ir para conteúdo
  • Cadastre-se

Recommended Posts

Postado

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
Postado

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

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
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 !!

  • 2 semanas depois ...
  • Membro Pro Verificado
Postado

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?

Postado

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

 

 

  • Curtir 1

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.