Ir para conteúdo
  • Cadastre-se

  • Este tópico foi criado há 174 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Bom dia.

Estou com problema quando emito Boleto via API no banco inter.

Faço a geração, envio e o retorno não traz os dados do boleto .. 
 

Primeiro e rotina do incluir boleto, eu uso o idctarec que chave primária no campo seunumero  para identificar mais facil o titulo...

 

function Tfrprincipal.IncluiBoletos(idctarec : integer) : integer;
var
  Titulo : TACBrTitulo;
  VQtdeCarcA, VQtdeCarcB, VQtdeCarcC :Integer;
  VLinha, logo : string;
  i, j, Numero: Integer;
begin
MostraEspera(' Gerando lista de boletos');
try
  Result := 0;
  frdm.qrEmpresa.Locate('idempresa',frdm.qrCtarecIDEMPRESA.AsInteger,[]);
  frdm.FiltraConta(' ORDER BY NOMECONTA ');

  if idctarec > 0  then
  begin
    if not frdm.qrConta.Locate('idconta', frdm.qrCtarecIDCONTA.AsInteger,[]) Then
      ShowExceptionDialog('Conta Corrente não localizada');
  end
  else if not frdm.qrConta.Locate('idconta',cbSelConta.Value,[]) Then
    ShowExceptionDialog('Conta Corrente não localizada');


  grdBoletos.SelectedRows.CurrentRowSelected := True;
  cbempresa.KeyValue := frdm.qrEmpresaIDEMPRESA.AsInteger;

      AplicarConfiguracoesAoComponente;
      frdm.qrCtarec.DisableControls;
      if frdm.qrCtarec.RecordCount > 0  then
      begin
        for i := 0 to grdBoletos.SelectedRows.Count-1 do
        begin
          Titulo := FACBrBoleto.CriarTituloNaLista;
          frdm.qrCtarec.Bookmark   := grdBoletos.SelectedRows[i];
          Titulo.Vencimento        := frdm.qrCtarecDATAVCTO.AsDateTime;
          Titulo.DataDocumento     := now;
          Titulo.EspecieDoc        := 'DM';
          Titulo.Aceite            := atNao;
          Titulo.DataProcessamento := Now;
          Titulo.EspecieMod        := '$';
          Titulo.Carteira          := frdm.qrContaCARTEIRA.AsString;


          if frdm.qrCtaRecNUMNF.AsInteger > 0 then
            Titulo.NumeroDocumento         := frdm.qrCtaRecNUMNF.AsString+'-'+frdm.qrCtaRecNPARCELA.AsString
          else
            Titulo.NumeroDocumento         :='P- '+frdm.qrctarecidPEDIDO.AsString+'-'+frdm.qrctarecNPARCELA.AsString;

           Titulo.SeuNumero   := frdm.qrCtarecIDCTAREC.AsString;



             if frdm.qrContaNNUMEROINI.AsString <> EmptyStr Then
              begin
                if frdm.qrCtaRecNOSSONUMERO.AsString = EmptyStr then
                 begin
                  numero := StrToInt(frdm.GetNossoNumero(frdm.qrContaIDCONTA.AsString));
                  Titulo.NossoNumero := FormatFloat(StringOfChar('0', TamanhoNossonumero), numero);
                  frdm.qrCtaRec.Edit;
                  frdm.qrCtaRecNOSSONUMERO.AsString := Titulo.NossoNumero;
                  frdm.qrCtaRec.Post;
                 end
                else
                 begin
                  Titulo.NossoNumero := frdm.qrCtaRecNOSSONUMERO.AsString;
                 end;
              end
              else if frdm.qrCtaRecNOSSONUMERO.AsString <> EmptyStr Then
                 Titulo.NossoNumero := frdm.qrCtaRecNOSSONUMERO.AsString;


          Titulo.NossoNumeroCorrespondente := frdm.qrCtarecCODIGOSOLICITACAO.AsString; //utilizado na Consulta, Alteração e Baixa da API Inter com QrCode



          Titulo.ValorDocumento    := frdm.qrCtarecVLRREAL.AsFloat;
          Titulo.Sacado.NomeSacado := frdm.qrCtarecRAZAOCLI.AsString;
          Titulo.Sacado.CNPJCPF    := OnlyNumber(frdm.qrCtarecCNPJCLI.AsString);
          Titulo.Sacado.Email      := frdm.qrCtarecMAILCLI.AsString;

          if (frdm.qrCtarecCEP_COB.AsString <> '') and
            (Length(OnlyNumber(frdm.qrCtarecCEP_COB.AsString)) = 8) then
          begin
            Titulo.Sacado.Logradouro := frdm.qrCtarecENDERECO_COB.AsString;
            Titulo.Sacado.Numero     := frdm.qrCtarecNUMERO_COB.AsString;
            Titulo.Sacado.Bairro     := frdm.qrCtarecBAIRRO_COB.AsString;
            Titulo.Sacado.Cidade     := frdm.qrCtarecCIDADE_COB.AsString;
            Titulo.Sacado.UF         := frdm.qrCtarecESTADO_COB.AsString;
            Titulo.Sacado.CEP        := OnlyNumber(frdm.qrCtarecCEP_COB.AsString);
          end
          else
          begin
            Titulo.Sacado.Logradouro := frdm.qrCtarecENDERECO.AsString;
            Titulo.Sacado.Numero     := frdm.qrCtarecNUMERO.AsString;
            Titulo.Sacado.Bairro     := frdm.qrCtarecBAIRRO.AsString;
            Titulo.Sacado.Cidade     := frdm.qrCtarecCIDADE.AsString;
            Titulo.Sacado.UF         := frdm.qrCtarecESTADO.AsString;
            Titulo.Sacado.CEP        := OnlyNumber(frdm.qrCtarecCEP.AsString);
          end;

      Titulo.ValorAbatimento   := 0;
      if  frdm.xparametro.BoletosDiasProtesto > 0 then
      Titulo.DataProtesto      := Titulo.Vencimento + frdm.xparametro.BoletosDiasProtesto;

      Titulo.DataLimitePagto   :=  Titulo.Vencimento + 30;
      Titulo.ValorMoraJuros := StrToCurr(FormatFloat('0.00', frdm.xparametro.BoletoJuros));
      Titulo.DataMoraJuros     := frdm.qrCtarecDATAVCTO.AsDateTime + 1;
      Titulo.CodigoMoraJuros   := cjValorDia;

      Titulo.PercentualMulta   := StrToCurrDef(edtMulta.Text,0)/100;
      Titulo.CodigoMulta       := cmPercentual;


      Titulo.Mensagem.Text     := frdm.xparametro.BoletoMensagemPadrao;
      Titulo.OcorrenciaOriginal.Tipo := toRemessaRegistrar;
      Titulo.Instrucao1        := frdm.qrContaINSTRUCAO1.AsString;
      Titulo.Instrucao2        := frdm.qrContaINSTRUCAO2.AsString;

      Titulo.QtdePagamentoParcial   := 1;
      Titulo.TipoPagamento          := tpNao_Aceita_Valor_Divergente;
      Titulo.PercentualMinPagamento := 0;
      Titulo.PercentualMaxPagamento := 0;
      Titulo.ValorMinPagamento      := 0;
      Titulo.ValorMaxPagamento      := 0;

      FACBrBoleto.AdicionarMensagensPadroes(Titulo,mmMensagem.Lines);

      if Titulo.ACBrBoleto.Configuracoes.WebService.Ambiente = tawsSandBox then
         Titulo.QrCode.emv := '00020101021226870014br.gov.bcb.pix2565qrcodepix-h.bb.com.br/pix/v2/22657e83-ecac-4631-a767-65e16fc56bff5204000053039865802BR5925EMPRORT AMBIENTAL        6008BRASILIA62070503***6304BD3D'
      else
        Titulo.QrCode.emv := frdm.qrCtarecQRCODE.AsString;


        end;
      end
      else
      begin
        ShowErrorMessage('Nenhum título Filtrado');
      end;

  finally
    FechaEspera;
    frdm.qrCtarec.EnableControls;
  end;
end;

 

ai depois tenho o gerar que faz o envio.. 

 

procedure Tfrprincipal.EnviarBoletos;
var
  SLRemessa: TStringList;
  i, j: Integer;
  Boleto : TACBrBoleto;
  xSeuNumero : string;
begin
  Boleto := FACBrBoleto;

  if Boleto.ListadeBoletos.Count <= 0 then
    exit;

  if not ConfirmMessage('Deseja enviar '+Boleto.ListadeBoletos.Count.ToString + ' Boleto(s)', True) then
    Abort;

  SLRemessa := TStringList.Create;
  try
    MostraEspera('Enviando boletos');
    Boleto.Configuracoes.WebService.Operacao := tpInclui;

    SLRemessa.Add('=== INICIANDO ENVIO ===');
    SLRemessa.Add('Data/Hora: ' + FormatDateTime('dd/mm/yyyy hh:nn:ss', Now));
    SLRemessa.Add('Quantidade de boletos: ' + IntToStr(Boleto.ListadeBoletos.Count));

    try
      if Boleto.Enviar Then
      begin
        SLRemessa.Add('=== ENVIO REALIZADO ===');
        imprimirBoleto;
      end
      else
        SLRemessa.Add('=== ENVIO RETORNOU FALSE ===');

      SLRemessa.Add('Total de retornos: ' + IntToStr(Boleto.TotalListaRetornoWeb));

    finally
      FechaEspera;
    end;

    if Boleto.TotalListaRetornoWeb > 0 then
    begin
      for i := 0 to Pred(Boleto.TotalListaRetornoWeb) do
      begin
        SLRemessa.Add('');
        SLRemessa.Add('========== RETORNO ' + IntToStr(i+1) + ' ==========');

        // Logs detalhados do retorno
        SLRemessa.Add('Cod_Retorno='+ Boleto.ListaRetornoWeb[i].CodRetorno);
        SLRemessa.Add('Msg_Retorno='+ Boleto.ListaRetornoWeb[i].MsgRetorno);
        SLRemessa.Add('Ori_Retorno='+ Boleto.ListaRetornoWeb[i].OriRetorno);
        SLRemessa.Add('HTTP_Result='+ IntToStr(Boleto.ListaRetornoWeb[i].HTTPResultCode));

        // Rejeições
        if Boleto.ListaRetornoWeb[i].ListaRejeicao.Count > 0 then
        begin
          SLRemessa.Add('*** ATENÇÃO: Título com rejeições ***');
          for j := 0 to Pred(Boleto.ListaRetornoWeb[i].ListaRejeicao.Count) do
          begin
            SLRemessa.Add('[Rejeicao ' + IntToStr(j+1) + ']');
            SLRemessa.Add('  Campo: ' + Boleto.ListaRetornoWeb[i].ListaRejeicao[j].Campo);
            SLRemessa.Add('  Codigo: ' + Boleto.ListaRetornoWeb[i].ListaRejeicao[j].Codigo);
            SLRemessa.Add('  Mensagem: ' + Boleto.ListaRetornoWeb[i].ListaRejeicao[j].Mensagem);
          end;
        end;

        // Dados do título retornado
        SLRemessa.Add('SeuNumero (ID) retornado: ' + Boleto.ListaRetornoWeb[i].DadosRet.TituloRet.SeuNumero);
        SLRemessa.Add('NossoNumero: ' + Boleto.ListaRetornoWeb[i].DadosRet.TituloRet.NossoNumero);
        SLRemessa.Add('CodBarras: ' + Boleto.ListaRetornoWeb[i].DadosRet.TituloRet.CodBarras);

        // Processamento e gravação
        if NaoEstaVazio(Boleto.ListaRetornoWeb[i].DadosRet.TituloRet.CodBarras) or
           NaoEstaVazio(Boleto.ListaRetornoWeb[i].DadosRet.IDBoleto.NossoNum) then
        begin
          if Boleto.ListaRetornoWeb[i].DadosRet.TituloRet.SeuNumero <> EmptyStr then
          begin
            // Busca direta pelo ID
            xSeuNumero := ' and idctarec = ' + Boleto.ListaRetornoWeb[i].DadosRet.TituloRet.SeuNumero;
            SLRemessa.Add('Filtro: ' + xSeuNumero);

            if frdm.Filtractarec(xSeuNumero) > 0 Then
            begin
              SLRemessa.Add('*** Título localizado! Gravando dados... ***');

              with Boleto.ListaRetornoWeb[i].DadosRet.TituloRet do
              begin
                try
                  frdm.qrctarec.Edit;
                  frdm.qrCtarecIDCONTA.AsInteger := cbSelConta.Value;
                  frdm.qrCtarecNOSSONUMERO.AsString := NossoNumero;
                  frdm.qrCtarecCODIGOSOLICITACAO.AsString := NossoNumeroCorrespondente;
                  frdm.qrCtarecCODIGOBARRAS.AsString := CodBarras;
                  frdm.qrCtarecLINHADIGITAVEL.AsString := LinhaDig;
                  frdm.qrCtarecSTATUS_API.AsString := EstadoTituloCobranca;
                  frdm.qrCtarecSTSBOLETO.AsString := 'T';
                  frdm.qrCtarecQRCODE.AsString := EMV;
                  frdm.qrCtarecTXID.AsString := TxId;

                  frdm.SalvaDataSet(frdm.qrctarec);
                  SLRemessa.Add('*** Gravado com sucesso! ***');

                except
                  on E: Exception do
                  begin
                    SLRemessa.Add('*** ERRO ao gravar: ' + E.Message);
                    SLRemessa.Add('ID: ' + SeuNumero);
                  end;
                end;
              end;
            end
            else
              SLRemessa.Add('*** AVISO: Título não localizado com ID=' + Boleto.ListaRetornoWeb[i].DadosRet.TituloRet.SeuNumero);
          end
          else
          begin
            SLRemessa.Add('*** AVISO: SeuNumero vazio no retorno ***');
            Continue; // Vai para o próximo título
          end;
        end;
      end;
    end
    else
      SLRemessa.Add('*** NENHUM RETORNO RECEBIDO DA API ***');

  finally
    try
      SLRemessa.SaveToFile(arqRetorno + 'RetornoRegistro.txt');
      SLRemessa.Add('Log salvo em: ' + arqRetorno + 'RetornoRegistro.txt');
    except
      on E: Exception do
        ShowErrorMessage('Erro ao salvar log: ' + E.Message);
    end;
    SLRemessa.Free;
  end;
end;

Ai não traz o retorno .. 
o cliente olha la no campo o boleto esta la .. certinho conforme enviado... 

 

agora . o que estou fazendo errado.

Ahh em teste aqui vai certinho, em produção com o cliente que não vai .. 

 

 

  • Consultores
Postado

Anexe como arquivo quando é trechos de códigos

fica um tópico enorme e ruim para auxiliar em algo.

pega o exemplo do svn e com ele faz os teste e altera para conseguir consultar e entender o que está fazendo  equivocado e está causando o problema

 

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 !!

  • Este tópico foi criado há 174 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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.