Ir para conteúdo
  • Cadastre-se

Recommended Posts

Postado

Boa tarde ,pessoal  estou fazendo ajustes no banco safra api para ler o qrcode a funcao onde gera o boleto já esta ok ,porém  a funcao lerlistaretorno ate chega ler o json normaol ,porem ela nao alimenta o acbr eu fiz algo de errado ?

 

function TRetornoEnvio_Safra.LerListaRetorno: Boolean;
var
  ListaRetorno: TACBrBoletoRetornoWS;
  LJson, LJsonData, LJsonConsulta, LJsonBoleto, LJsonPagador, LJsonCopiaCola: TACBrJSONObject;
  LRejeicao   : TACBrBoletoRejeicao;
  I           : Integer;
  LSituacao   : String;
begin
  Result                      := True;
  ListaRetorno                := ACBrBoleto.CriarRetornoWebNaLista;
  ListaRetorno.HTTPResultCode := HTTPResultCode;
  ListaRetorno.JSONEnvio      := EnvWs;

  if RetWS <> '' then
  begin
    try
      LJson := TACBrJSONObject.Parse(RetWS);
      try
        // --- 1. TRATAMENTO DE ERROS / REJEIÇÕES ---
        case HTTPResultCode of
          400, 404:
            begin
              if (LJson.IsJSONObject('codigo')) then
                if NaoEstaVazio(LJson.AsString[ 'codigo' ]) then
                begin
                  LRejeicao          := ListaRetorno.CriarRejeicaoLista;
                  LRejeicao.Codigo   := LJson.AsString[ 'codigo' ];
                  LRejeicao.Versao   := LJson.AsString[ 'parametro' ];
                  LRejeicao.Mensagem := LJson.AsString[ 'mensagem' ];
                end;
            end;
        end;

        // --- 2. RETORNO EM CASO DE SUCESSO ---
        if (ListaRetorno.ListaRejeicao.Count = 0) then
        begin


          // Acessando o nó 'data' diretamente via .AsJSONObject igual ao exemplo do Bradesco
          LJsonData := LJson.AsJSONObject['data'];

          if Assigned(LJsonData) then
          begin
            LJsonConsulta := LJsonData.AsJSONObject['dadosConsulta'];

            if Assigned(LJsonConsulta) then
            begin
              // VITAL: Criamos o item na lista EXATAMENTE aqui, igual ao "if LTrataBoleto" do Itaú
              ListaRetorno := ACBrBoleto.CriarRetornoWebNaLista;
              ListaRetorno.HTTPResultCode := HTTPResultCode;

              ListaRetorno.JSON           := LJson.ToJSON;
              ListaRetorno.JSONEnvio      := EnvWs;

              LJsonBoleto   := LJsonConsulta.AsJSONObject['dadosBoleto'];
              LJsonPagador  := LJsonConsulta.AsJSONObject['dadosPagador'];

              // Mapeamento dos campos estruturados do Boleto
              ListaRetorno.DadosRet.IDBoleto.CodBarras := LJsonBoleto.AsString['codigoDeBarras'];
              ListaRetorno.DadosRet.IDBoleto.NossoNum  := LJsonBoleto.AsString['nossoNumero'];
              ListaRetorno.indicadorContinuidade       := False;
              ListaRetorno.DadosRet.TituloRet.CodBarras := ListaRetorno.DadosRet.IDBoleto.CodBarras;
              ListaRetorno.DadosRet.TituloRet.LinhaDig  := ListaRetorno.DadosRet.IDBoleto.LinhaDig;

              ListaRetorno.DadosRet.TituloRet.NossoNumero := ListaRetorno.DadosRet.IDBoleto.NossoNum;
              ListaRetorno.DadosRet.TituloRet.Vencimento  := StrToDateDef(LJsonBoleto.AsString['dataVencimento'], 0);
              ListaRetorno.DadosRet.TituloRet.DataRegistro := StrToDateDef(LJsonBoleto.AsString['dataEmissao'], 0);

              ListaRetorno.DadosRet.TituloRet.ValorDocumento := StrToCurrDef(LJsonBoleto.AsString['valorBoleto'], 0);
              ListaRetorno.DadosRet.TituloRet.ValorAtual      := StrToCurrDef(LJsonBoleto.AsString['valorBoleto'], 0);

              ListaRetorno.DadosRet.TituloRet.EstadoTituloCobranca := LJsonBoleto.AsString['situacao'];

              // Dados do Pagador
              ListaRetorno.DadosRet.TituloRet.Sacado.NomeSacado := LJsonPagador.AsString['nomeCompleto'];
              ListaRetorno.DadosRet.TituloRet.Sacado.Cidade     := LJsonPagador.AsString['cidade'];
              ListaRetorno.DadosRet.TituloRet.Sacado.UF         := LJsonPagador.AsString['estado'];
              ListaRetorno.DadosRet.TituloRet.Sacado.Cep        := LJsonPagador.AsString['cep'];
              ListaRetorno.DadosRet.TituloRet.Sacado.Logradouro := LJsonPagador.AsString['endereco'];
              ListaRetorno.DadosRet.TituloRet.Sacado.CNPJCPF    := LJsonPagador.AsString['cpfCnpj'];

              // Captura do PIX (Cópia e Cola)
              LJsonCopiaCola := LJsonConsulta.AsJSONObject['codigoCopiaECola'];
              if Assigned(LJsonCopiaCola) then
                ListaRetorno.DadosRet.TituloRet.EMV := LJsonCopiaCola.AsString['copiaECola'];

              // Verificação de Baixa / Liquidação
              LSituacao := UpperCase(LJsonBoleto.AsString['situacao']);
              if (Pos('BAIXADO', LSituacao) > 0) or (Pos('LIQUIDADO', LSituacao) > 0) then
              begin
                if Assigned(LJsonConsulta.AsJSONObject['dadosLiquidacaoBaixado']) then
                begin
                  ListaRetorno.DadosRet.TituloRet.ValorPago := StrToCurrDef(LJsonConsulta.AsJSONObject['dadosLiquidacaoBaixado'].AsString['valorPago'], 0);
                  ListaRetorno.DadosRet.TituloRet.DataBaixa := StrToDateDef(LJsonConsulta.AsJSONObject['dadosLiquidacaoBaixado'].AsString['dataLiquidacaoBaixa'], 0);
                end
                else
                  ListaRetorno.DadosRet.TituloRet.DataBaixa := Date;
              end;
            end;
          end;
        end;
      finally
        LJson.Free;
      end;
    except
      Result := False;
    end;
  end;
end;

ACBrBoletoRet_Safra.pas

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.