Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

Postado

Pessoal

Neste topico 

Parece que tinha solução para API do banco inter. 

 

Vejo o site dos cara eles fizeram favor de mudar a forma que fala com a API, antes geravam um arquivo certificado e agora aponta pra outo endereço https://developers.bancointer.com.br/reference/token-1

 

Me tire uma duvida basedo neste link como que faço pra passar os parametros corretos no postman por exemplo? Onde devo informar 

client_id e client_secret e scope 

 

 

  • Moderadores
Postado (editado)
13 horas atrás, johnbh3 disse:

Eu até consegui pegar o token

 

Agora eu n seu como pegar os boletos pelo postman conforme documentação : https://developers.bancointer.com.br/reference/pesquisarboletos

 

Onde eu passo esses 

QUERY PARAMS no postman? 

https://cdpj.partners.bancointer.com.br/cobranca/v2/boletos?dataInicial=2022-07-20&dataFinal=2022-07-21

isso é query params:

?dataInicial=2022-07-20&dataFinal=2022-07-21

o primeiro parametro é iniciado por "?" os proximos iniciam com "&"

ai vem o NomeDoParametro=ValorDoParametro

Editado por datilas
Postado
13 horas atrás, johnbh3 disse:

Eu até consegui pegar o token

 

Agora eu n seu como pegar os boletos pelo postman conforme documentação : https://developers.bancointer.com.br/reference/pesquisarboletos

 

Onde eu passo esses 

QUERY PARAMS no postman? 

 

image.thumb.png.a1d4481aedc6f487fb192fd4204d7ebd.png

No caso você só precisa testar se nas rotas de geração de token ou de consulta de boletos usam form-data ou form-urlencoded

Isso porque no link da documentação que você enviou o título é form-data mas no exemplo cURL que eles disponibilizam informam urlencoded 

😅 Vai entender. API do Inter ainda tem que evoluir muito.

Postado (editado)

Bom dia

 

Ainda mechendo no componente do post 

 

 

 

Consegui avançar um pouco !

 

Consigui recuperar o boleto  e gerar o PDF dele.

Mas o endpoint de envio do boleto da erro - ao chamar a GerarBoleto

 

Porem o envio do boleto retorna erro:

HTTP/1.0 400 Bad Request
{"status":400,"title":"Falha durante a execução da request","detail":"Verifique se os dados informados estão de acordo com a documentação disponibilizada e tente novamente","violacoes":[{"razao":"O valor requerido no Body não foi informado","propriedade":"body"}]}
Código de retorno: 400

 

 

O json gerado fica assim

'{'#$D#$A'  "pagador":{'#$D#$A'    "cnpjCpf":"01281218000124",'#$D#$A'    "nome":"BIO MOVEIS E DECORACOES LTDA - ME",'#$D#$A'    "email":"",'#$D#$A'    "telefone":"",'#$D#$A'    "cep":"09133000",'#$D#$A'    "numero":"552",'#$D#$A'    "complemento":"",'#$D#$A'    "bairro":"VILA GUARARA",'#$D#$A'    "cidade":"S�O PAULO",'#$D#$A'    "uf":"SP",'#$D#$A'    "endereco":"EST DO PEDROSO",'#$D#$A'    "ddd":"",'#$D#$A'    "tipoPessoa":"FISICA"'#$D#$A'  },'#$D#$A'  "dataEmissao":"2022-07-23",'#$D#$A'  "seuNumero":"1377",'#$D#$A'  "dataVencimento":"2022-07-19",'#$D#$A'  "mensagem":{'#$D#$A'    "linha1":"",'#$D#$A'    "linha2":"",'#$D#$A'    "linha3":"",'#$D#$A'    "linha4":"",'#$D#$A'    "linha5":""'#$D#$A'  },'#$D#$A'  "desconto1":{'#$D#$A'    "codigoDesconto":"NAOTEMDESCONTO",'#$D#$A'    "taxa":0,'#$D#$A'    "valor":0,'#$D#$A'    "data":""'#$D#$A'  },'#$D#$A'  "desconto2":{'#$D#$A'    "codigoDesconto":"NAOTEMDESCONTO",'#$D#$A'    "taxa":0,'#$D#$A'    "valor":0,'#$D#$A'    "data":""'#$D#$A'  },'#$D#$A'  "desconto3":{'#$D#$A'    "codigoDesconto":"NAOTEMDESCONTO",'#$D#$A'    "taxa":0,'#$D#$A'    "valor":0,'#$D#$A'    "data":""'#$D#$A'  },'#$D#$A'  "valorNominal":64.87,'#$D#$A'  "valorAbatimento":0,'#$D#$A'  "multa":{'#$D#$A'    "codigoMulta":"NAOTEMMULTA",'#$D#$A'    "data":"",'#$D#$A'    "valor":0,'#$D#$A'    "taxa":0'#$D#$A'  },'#$D#$A'  "mora":{'#$D#$A'    "codigoMora":"ISENTO",'#$D#$A'    "data":"",'#$D#$A'    "valor":0,'#$D#$A'    "taxa":0'#$D#$A'  },'#$D#$A'  "cnpjCPFBeneficiario":"08030107000194",'#$D#$A'  "numDiasAgenda":"SESSENTA"'#$D#$A'}'

 

Logo apos passar na linha:   SJson := GenerateReadableText(js,i);

Por fim tenta enviar e da o erro no post 

   idhttp.Post('https://cdpj.partners.bancointer.com.br/cobranca/v2/boletos',JsonStreamEnvio,JsonStreamRetorno);

A proposito o codigo completo da unit

 

unit uBancoInter;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  Vcl.Controls, Vcl.Dialogs, Vcl.StdCtrls, IdServerIOHandler, IdSSL,
  IdSSLOpenSSL, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdCoderMIME,
  uLkJSON,XSuperObject;

const
  numDiasAgenda:array[0..2] of string = (
    'ZERO',
    'TRINTA',
    'SESSENTA');

  codigoDesconto:array[0..6] of string = (
     'NAOTEMDESCONTO',
     'VALORFIXODATAINFORMADA',
     'PERCENTUALDATAINFORMADA',
     'VALORANTECIPACAODIACORRIDO',
     'VALORANTECIPACAODIAUTIL',
     'PERCENTUALVALORNOMINALDIACORRIDO',
     'PERCENTUALVALORNOMINALDIAUTIL');

  codigoMulta:array[0..2] of string = (
     'NAOTEMMULTA',
     'VALORFIXO',
     'PERCENTUAL');

  codigoMora:array[0..2] of string = (
     'VALORDIA',
     'TAXAMENSAL',
     'ISENTO');

  filtaPor:array[0..3] of string = (
     'PAGOS',
     'EXPIRADOS',
     'VENCIDOSAVENCER',
     'TODOSBAIXADOS');

  ordenarPor:array[0..6] of string = (
     'NOSSONUMERO',
     'DATAVENCIMENTO_DSC',
     'NOMESACADO',
     'VALOR_ASC',
     'VALOR_DSC',
     'STATUS_ASC',
     'STATUS_DS');

  codigoBaixa:array[0..7] of string = (
     'ACERTOS',
     'PROTESTADO',
     'DEVOLUCAO',
     'PROTESTOAPOSBAIXA',
     'PAGODIRETOAOCLIENTE',
     'SUBISTITUICAO',
     'FALTADESOLUCAO',
     'APEDIDODOCLIENTE');

  diasBaixas:array[0..3] of string = (
    'Hoje',
    'SeteDias',
    'QuinzeDias',
    'TrintaDias');



type

  TVariantArray = array of array of variant;

  TipoData = (
    Vencimento,
    Emissao);

  TipoSituacao = (
    Pagos,
    Expirados,
    VencidosAVencer,
    TodosBaixados
  );

  TipoDiasBaixa = (
    Hoje,
    SeteDias,
    QuinzeDias,
    TrintaDias);

  TipoBaixa = (
    Acertos,
    Protestado,
    Devolucao,
    ProtestoAposBaixa,
    PagoDiretoAoCliente,
    Subistituicao,
    FaltaDeSolucao,
    APedidoDoCliente);

  TipoOrdem = (
     NossoNumero,
     DataVencimento_DSC,
     NomeSacado,
     Valor_ASC,
     Valor_DSC,
     Status_ASC,
     Status_DS);



  TipoMora = (
    ValorDia,
    TaxaMensal,
    Isento);

  TipoMulta = (
    NaoTemMulta,
    ValorFixo,
    Percentual);

  TipoDesconto = (
     NaoTemDesconto,
     ValorFixoDataInformada,
     PercentualDataInformada,
     ValorAntecipadoDiaCorrido,
     ValorAntecipadoDiaUtil,
     PercentualValorNominalDiaCorrido,
     PercentualValorNominalDiaUtil);

  TipoAgenda = (
    Zero,
    Trinta,
    Sessenta);

  TipoPessoa = (
    Fisica,
    Juridica);





TPagador = Class(Tcomponent)
    private
      ftipopessoa:TipoPessoa;
      fnome:string; // max 100
      fendereco:string; //max 90
      fnumero:string; // max 10
      fcomplemento:string; //max 30
      fbairro:string; // max 60
      fcidade:string;
      fuf:string;
      fcep:string; // max 8
      fcnpjCPF:string;
      femail:string; // max 50
      fddd:string; // max 2
      ftelefone:string; //max 9
    public
    published
      property TipoPessoa:TipoPessoa read ftipopessoa write ftipopessoa;
      property Nome:string read fnome write fnome;
      property Endereco:string read fendereco write fendereco;
      property Numero:string read fnumero write fnumero;
      property Complemento:string read fcomplemento write fcomplemento;
      property Bairro:string read fbairro write fbairro;
      property UF:string read fuf write fuf;
      property CEP:string read fcep write fcep;
      property CNPJ_CPF:string read fcnpjCPF write fcnpjCPF;
      property Email:string read femail write femail;
      property Telefone:string read ftelefone write ftelefone;
      property DDD:string read fddd write fddd;
      property Cidade:string read fcidade write fcidade;

 End;




TDesconto1 = Class(TComponent)
  private
    fcodigodesc:TipoDesconto;
    fdatadesc:tdate;
    ftaxa:double;
    fvalor:double;
  public
  published
    property CodigoDesconto:TipoDesconto read fcodigodesc write fcodigodesc;
    property DataDesconto:tdate read fdatadesc write fdatadesc;
    property Taxa:double read ftaxa write ftaxa;
    property Valor:double read fvalor write fvalor;
End;

TDesconto2 = Class(TComponent)
  private
    fcodigodesc:TipoDesconto;
    fdatadesc:tdate;
    ftaxa:double;
    fvalor:double;
  public
  published
    property CodigoDesconto:TipoDesconto read fcodigodesc write fcodigodesc;
    property DataDesconto:tdate read fdatadesc write fdatadesc;
    property Taxa:double read ftaxa write ftaxa;
    property Valor:double read fvalor write fvalor;
End;

TDesconto3 = Class(TComponent)
  private
    fcodigodesc:TipoDesconto;
    fdatadesc:tdate;
    ftaxa:double;
    fvalor:double;
  public
  published
    property CodigoDesconto:TipoDesconto read fcodigodesc write fcodigodesc;
    property DataDesconto:tdate read fdatadesc write fdatadesc;
    property Taxa:double read ftaxa write ftaxa;
    property Valor:double read fvalor write fvalor;
End;







 //Classe responsavel por retornar uma lista de boletos gerando a patir de um dia após


 //Classe responsavel por recuperar os dados do Boleto detalhado
 TDadosDoBoleto = class(Tcomponent)
   public
   private

   protected
   published
 end;



 //Classe responsavel por baixar um boleto no formato pdf em base64
 TPDFdoBoleto = class(Tcomponent)
   public
   private
     fNossoNumero:string;
   protected
   published
    property NossoNumero: String read fNossoNumero write fNossoNumero;
 end;

 TMesangem = class(Tcomponent)
   public
   private
     fmensagem1,fmensagem2,fmensagem3,fmensagem4,fmensagem5:string;
   protected
   published
     //maximo 78 caracteres por mensagem
     property Mensagem1: String read fMensagem1 write fMensagem1;
     property Mensagem2: String read fMensagem2 write fMensagem2;
     property Mensagem3: String read fMensagem3 write fMensagem3;
     property Mensagem4: String read fMensagem4 write fMensagem4;
     property Mensagem5: String read fMensagem5 write fMensagem5;

 end;





 TMulta = class(Tcomponent)
   public
   private
     fcodigoMulta:TipoMulta;
     fdata:tdate;
     ftaxa:double;
     fvalor:double;
   protected
   published
     property CodigoMulta: TipoMulta read fcodigoMulta write fcodigoMulta;
     property DataAContar: Tdate read fdata write fdata;
     property Taxa: double read ftaxa write ftaxa;
     property Valor: double read fvalor write fvalor;
 end;

 TMora = class(Tcomponent)
   public
   private
     fcodigoMora:TipoMora;
     fdata:tdate;
     ftaxa:double;
     fvalor:double;
   protected
   published
     property CodigoMora: TipoMora read fcodigoMora write fcodigoMora;
     property DataAContar: Tdate read fdata write fdata;
     property Taxa: double read ftaxa write ftaxa;
     property Valor: double read fvalor write fvalor;
 end;


 TCertificado = class(Tcomponent)
   private
     fcertfile:string;
     fkeyfile:string;
     frootcertfile:string;
   published
     property CertFile:string read fcertfile write fcertfile;
     property KeyFile:string read fkeyfile write fkeyfile;
     property RootCertFile:string read frootcertfile write frootcertfile;
 end;

//Classe resposavel por gerar novo boleto no banco
 TBancoInter = class(Tcomponent)
   private
     fconta:string;
     fseuNumero:string;  //15 maximo
     fvalorNorminal:double;
     fvalorAbatimento:double;
     fDataEmissao:Tdate;
     fDataVencimento:Tdate;
     fpagador:TPagador;
     fmensagem:TMesangem;
     fmulta:TMulta;
     fmora:TMora;
     //fdataLimite:TipoAgenda;
     fdesconto1:TDesconto1;
     fdesconto2:TDesconto2;
     fdesconto3:TDesconto3;
     fCodigoBarras:string;
     fLinhaDigitavel:string;
     fNossoNumero:string;
     fcpf_cnpj:string;
     fnumDiasAgenda:TipoAgenda;
     fcertificado:TCertificado;
     fSitpagamento:string;
     fSituacao:string;
     fValorPago:double;
     fDataPagamento:tdate;


     function MontaDados:Tstringlist;

   public
     constructor Create( AOwner : TComponent); override;
     Destructor Destroy; override ;
     Function GerarBoleto:TStringList;
     function GetCodigoBarras:string;
     function GetLinhaDigitavel:string;
     function GetNossoNumero:string;

     //Consulta Pagamento
     procedure Consulta(NossoNumero:string);
     

     function ConsultaLita(FiltraPorSituacao:TipoSituacao;FiltrarPorData:TipoData;FiltrarDias:TipoDiasBaixa):Tstringlist;
     function ConsultaUmBoleto(NossoNumero:string):Tstringlist;
     procedure BaixaBoleto(NossoNumero:string;CodigoBaixa:TipoBaixa);
     procedure RecuperaBoletoPDF(NossoNumero,LocalPath:string);



   protected
   published

     property NumeroConta: String read fconta write fconta;
     property CPF_CNPJ_Beneficiario:string read fcpf_cnpj write fcpf_cnpj;
     property SeuNumero: String read fseuNumero write fseuNumero;
     property ValorNorminal: double read fvalorNorminal write fvalorNorminal;
     property ValorAbatimento: double read fvalorAbatimento write fvalorAbatimento;
     property DataEmissao: Tdate read fDataEmissao write fDataEmissao;
     property Vencimento: Tdate read fDataVencimento write fDataVencimento;
     //property DataLimite: TipoAgenda read fdataLimite write fdataLimite;

     property Pagador: TPagador read fpagador write fpagador ;
     property Mensagem: TMesangem read fMensagem write fmensagem ;
     property Multa: TMulta read fmulta write fmulta;
     property Mora: TMora read fmora write fmora ;
     property Desconto1:TDesconto1 read fdesconto1 write fdesconto1;
     property Desconto2:TDesconto2 read fdesconto2 write fdesconto2;
     property Desconto3:TDesconto3 read fdesconto3 write fdesconto3;
     property NumDiasAgenda:TipoAgenda read fnumDiasAgenda write fnumDiasAgenda;
     property Certificado:TCertificado read fcertificado write fcertificado;


 end;


function RetCodigoDesconto(valor:TipoDesconto):string;
function RetCodigoBaixa(valor:TipoBaixa):string;
function RetTipoOrdem(valor:TipoOrdem):string;

function RetCodigoMora(valor:TipoMora):string;
function RetCodigoMulta(valor:TipoMulta):string;
function RetDiasAgenda(valor:TipoAgenda):string;
function RetData(data:tdate):string;
function strzero(valor1:integer;valor2:integer):string;
function numdos(valor:double):string;
function RetTipoPessoa(valor:TipoPessoa):string;
function RetSituacao(valor:TipoSituacao):string;
function RetDataFiltro(valor:TipoData):string;
procedure ConfiguraSSl(ConfSSL:TIdSSLIOHandlerSocketOpenSSL;ArqCertFile,ArqKeyFile:string);
Procedure ConfiguraIndy(ConfInd:TIdHTTP;NumConta:string);


procedure Register;


implementation

procedure Register;
begin
  RegisterComponents('Aprendendo', [TBancoInter]);
end;




function numdos(valor:double):string;
var
vtexto,resultado:string;
begin
 vtexto    := FloatToStr(valor);
 resultado := StringReplace(vtexto,'.','',[rfReplaceAll]);
 resultado := StringReplace(resultado,',','.',[rfReplaceAll]);
 result    := trim(resultado);
end;


procedure ConfiguraSSl(ConfSSL:TIdSSLIOHandlerSocketOpenSSL;ArqCertFile,ArqKeyFile:string);
begin
  //configurando o soketssl
  with ConfSSL.SSLOptions do
    begin
      Method       := sslvSSLv23;
      SSLVersions  := [sslvSSLv23];
      CertFile     := ArqCertFile;
      KeyFile      := ArqKeyFile;
    end;

end;


Procedure ConfiguraIndy(ConfInd:TIdHTTP;NumConta:string);
begin
  ConfInd.HandleRedirects:=True;

  with confind.Request.CustomHeaders do
    begin
      Clear;
      Values['Authorization'] := 'Bearer bddsss7e-a749-4cce-9dfe-b30fdfdfdac7e446';

    end;

 {
  with confind.Request.CustomHeaders do
    begin
      Clear;
      Add('Content-Type: application/json');
    /Add('x-inter-conta-corrente: '+NumConta);
    end;
  }
end;


function strzero(valor1:integer;valor2:integer):string;
var
monta:string;
tira,ia:integer;
begin
  if valor2=0 then
     begin
       result:='';
       exit;
     end;
  monta:=trim(inttostr(valor1));
  tira:=length(monta);
  if tira>valor2 then
     result := inttostr(valor1);
  tira:=valor2-tira;
  monta:='';
  for ia:=1 to tira do
    monta:=monta+'0';
  monta:=monta+trim(inttostr(valor1));
  result := monta
end;


function RetData(data:tdate):string;
var
year,month,day:word;
begin
  DecodeDate(data,year,month,day);
  if year<2021 then
     result := ''
  else
     result := strzero(year,4)+ '-' + strzero(month,2) + '-' + strzero(day,2);
end;

function RetTipoOrdem(valor:TipoOrdem):string;
begin
  case valor of
   NossoNumero:        result := ordenarPor[0] ;
   DataVencimento_DSC: result := ordenarPor[1] ;
   NomeSacado:         result := ordenarPor[2] ;
   Valor_ASC:          result := ordenarPor[3] ;
   Valor_DSC:          result := ordenarPor[4] ;
   Status_ASC:         result := ordenarPor[5] ;
   Status_DS:          result := ordenarPor[6] ;
  end;
end;



function RetSituacao(valor:TipoSituacao):string;
begin
  case valor of
   Pagos:           result := filtaPor[0];
   Expirados:       result := filtaPor[1];
   VencidosAVencer: result := filtaPor[2];
   TodosBaixados:   result := filtaPor[3];
  end;
end;

function RetCodigoMora(valor:TipoMora):string;
begin
  case valor of
   ValorDia: result   := codigoMora[0];
   TaxaMensal: result := codigoMora[1];
   Isento: result     := codigoMora[2];
  end;
end;

function RetCodigoMulta(valor:TipoMulta):string;
begin
  case valor of
   NaoTemMulta: result := codigoMulta[0];
   ValorFixo:   result := codigoMulta[1];
   Percentual:  result := codigoMulta[2];
  end;
end;

function RetDiasAgenda(valor:TipoAgenda):string;
begin
  case valor of
   Zero:     result := numDiasAgenda[0];
   Trinta:   result := numDiasAgenda[1];
   Sessenta: result := numDiasAgenda[2];
  end;
end;

function RetDataFiltro(valor:TipoData):string;
begin
  case valor of
    Vencimento: result := 'VENCIMENTO' ;
    Emissao:    result := 'EMISSAO';
  end;
end;



function RetCodigoBaixa(valor:TipoBaixa):string;
begin
  case valor  of
   Acertos:             result := codigoBaixa[0];
   Protestado:          result := codigoBaixa[1];
   Devolucao:           result := codigoBaixa[2];
   ProtestoAposBaixa:   result := codigoBaixa[3];
   PagoDiretoAoCliente: result := codigoBaixa[4];
   Subistituicao:       result := codigoBaixa[5];
   FaltaDeSolucao:      result := codigoBaixa[6];
   APedidoDoCliente:    result := codigoBaixa[7];
  end;
end;


function RetCodigoDesconto(valor:TipoDesconto):string;
begin
  case valor of
   NaoTemDesconto:                   result := codigoDesconto[0];
   ValorFixoDataInformada:           result := codigoDesconto[1];
   PercentualDataInformada:          result := codigoDesconto[2];
   ValorAntecipadoDiaCorrido:        result := codigoDesconto[3];
   ValorAntecipadoDiaUtil:           result := codigoDesconto[4];
   PercentualValorNominalDiaCorrido: result := codigoDesconto[5];
   PercentualValorNominalDiaUtil:    result := codigoDesconto[6];
  end;
end;


function RetTipoPessoa(valor:TipoPessoa):string;
begin
  case valor of
   Fisica: result := 'FISICA' ;
   Juridica: result := 'JURIDICA' ;
  end;
end;


{ TBancoInter }

procedure TBancoInter.BaixaBoleto(NossoNumero: string; CodigoBaixa: TipoBaixa);
var
  SJson,StringBaixa:string;
  DadosJson:TStringList;
  JsonStreamRetorno,JsonStreamEnvio : TStringStream;
  idHttp:TIdHTTP;
  SoketSSL:TIdSSLIOHandlerSocketOpenSSL;
  i:integer;

begin
  StringBaixa := NossoNumero+'/baixas';

  JsonStreamRetorno := TStringStream.Create;
  idHttp            := tidHttp.Create(self);
  SoketSSL          := TIdSSLIOHandlerSocketOpenSSL.Create(self);
  SJson             :='{"codigoBaixa":"'+RetCodigoBaixa(CodigoBaixa)+'"}';
  JsonStreamEnvio   := TStringStream.Create(SJson);

  //configurando o soketssl
  ConfiguraSSl(SoketSSL,Certificado.CertFile,Certificado.KeyFile);


  //linkando o soketssl ao idhttp
  idHttp.IOHandler  := SoketSSL;
  ConfiguraIndy(IdHTTP,NumeroConta);

  //enviando via https
  DadosJson := TStringList.Create;
  try
     idhttp.Post('https://apis.bancointer.com.br/openbanking/v1/certificado/boletos/'+StringBaixa,JsonStreamEnvio,JsonStreamRetorno);


    except
     on E:EIdHTTPProtocolException do
       DadosJson.Add(IdHTTP.ResponseText+#13#10+e.ErrorMessage)
     else
       showexception(exceptobject, exceptaddr);
    end;

    if IdHTTP.ResponseCode<>204 then
       begin
         DadosJson.Add('Código de retorno: '+inttostr(IdHTTP.ResponseCode));
         DadosJson.Add('');
       end;

    if JsonStreamRetorno.DataString<>'' then
       DadosJson.add(JsonStreamRetorno.DataString);


    if IdHTTP.ResponseCode<>204 then
       begin
         DadosJson.Add('Transação não pode ser inicada ('+inttostr(IdHTTP.ResponseCode)+').');
         showmessage(DadosJson.Text);
         DadosJson.Clear;
       end;

  JsonStreamRetorno.Free;
  JsonStreamEnvio.Free;
  SoketSSL.Free;
  idHttp.Free;

end;

procedure TBancoInter.Consulta(NossoNumero: string);
begin

end;

function TBancoInter.ConsultaLita(FiltraPorSituacao:TipoSituacao;FiltrarPorData:TipoData;FiltrarDias:TipoDiasBaixa):Tstringlist;
var
  DadosJson:TStringList;
  JsonStreamRetorno : TStringStream;
  idHttp:TIdHTTP;
  SoketSSL:TIdSSLIOHandlerSocketOpenSSL;
  i:integer;
  montaconsulta,SJson:string;
  js:TlkJSONobject;

begin

  JsonStreamRetorno := TStringStream.Create;
  idHttp            := tidHttp.Create(self);
  SoketSSL          := TIdSSLIOHandlerSocketOpenSSL.Create(self);

  //configurando o soketssl
  ConfiguraSSl(SoketSSL,Certificado.CertFile,Certificado.KeyFile);


  //linkando o soketssl ao idhttp
  idHttp.IOHandler  := SoketSSL;
  ConfiguraIndy(IdHTTP,NumeroConta);

  //enviando via https
  DadosJson := TStringList.Create;
  try
     montaconsulta := 'filtrarPor=' + RetSituacao(FiltraPorSituacao);
     montaconsulta := montaconsulta + '&filtrarDataPor=' + RetDataFiltro(FiltrarPorData);

     if FiltrarDias=Hoje then
        montaconsulta := montaconsulta + '&dataInicial='+RetData(now)
     else if FiltrarDias=SeteDias then
        montaconsulta := montaconsulta + '&dataInicial='+RetData(date - 7)
     else if FiltrarDias=QuinzeDias then
        montaconsulta := montaconsulta + '&dataInicial='+RetData(date - 15)
     else if FiltrarDias=TrintaDias then
        montaconsulta := montaconsulta + '&dataInicial='+RetData(date - 30);
     montaconsulta := montaconsulta + '&dataFinal=' + RetData(date + 30);

     IdHTTP.Get('https://cdpj.partners.bancointer.com.br/cobranca/v2/boletos?'+montaconsulta,JsonStreamRetorno);

    except
     on E:EIdHTTPProtocolException do
       DadosJson.Add(IdHTTP.ResponseText+#13#10+e.ErrorMessage)
     else
       showexception(exceptobject, exceptaddr);
    end;

    if IdHTTP.ResponseCode<>200 then
       begin
         DadosJson.Add('Código de retorno: '+inttostr(IdHTTP.ResponseCode));
         DadosJson.Add('');
       end;

    if JsonStreamRetorno.DataString<>'' then
       DadosJson.add(JsonStreamRetorno.DataString);


    if IdHTTP.ResponseCode<>200 then
       begin
         DadosJson.Add('Transação não pode ser inicada ('+inttostr(IdHTTP.ResponseCode)+').');
         showmessage(DadosJson.Text);
         DadosJson.Clear;
       end
    else
       begin
          //aqui tratamos os dados recebidos
          js := TlkJSON.ParseText(DadosJson.Text) as TlkJSONobject;
          i:=0;
          SJson := GenerateReadableText(js,i);
          DadosJson.Clear;
          DadosJson.Add(SJson);

          //result.Add(SJson);
       end;
  result := DadosJson;
  JsonStreamRetorno.Free;
  SoketSSL.Free;
  idHttp.Free;
end;

function TBancoInter.ConsultaUmBoleto(NossoNumero: string): Tstringlist;
var
  DadosJson:TStringList;
  JsonStreamRetorno : TStringStream;
  idHttp:TIdHTTP;
  SoketSSL:TIdSSLIOHandlerSocketOpenSSL;
  i:integer;
  SJson:string;
  js:TlkJSONobject;

begin

  JsonStreamRetorno := TStringStream.Create;
  idHttp            := tidHttp.Create(self);
  SoketSSL          := TIdSSLIOHandlerSocketOpenSSL.Create(self);

  //configurando o soketssl
  ConfiguraSSl(SoketSSL,Certificado.CertFile,Certificado.KeyFile);


  //linkando o soketssl ao idhttp
  idHttp.IOHandler  := SoketSSL;
  ConfiguraIndy(IdHTTP,NumeroConta);

  //enviando via https
  DadosJson := TStringList.Create;
  try

     IdHTTP.Get('https://cdpj.partners.bancointer.com.br/cobranca/v2/boletos/' + NossoNumero,JsonStreamRetorno);

    except
     on E:EIdHTTPProtocolException do
       DadosJson.Add(IdHTTP.ResponseText+#13#10+e.ErrorMessage)
     else
       showexception(exceptobject, exceptaddr);
    end;

    if IdHTTP.ResponseCode<>200 then
       begin
         DadosJson.Add('Código de retorno: '+inttostr(IdHTTP.ResponseCode));
         DadosJson.Add('');
       end;

    if JsonStreamRetorno.DataString<>'' then
       DadosJson.add(JsonStreamRetorno.DataString);


    if IdHTTP.ResponseCode<>200 then
       begin
         DadosJson.Add('Transação não pode ser inicada ('+inttostr(IdHTTP.ResponseCode)+').');
         showmessage(DadosJson.Text);
         DadosJson.Clear;
       end
    else
       begin
          //aqui tratamos os dados recebidos
          js := TlkJSON.ParseText(DadosJson.Text) as TlkJSONobject;
          i:=0;
          SJson := GenerateReadableText(js,i);
          DadosJson.Clear;
          DadosJson.Add(SJson);

          //result.Add(SJson);
       end;
  result := DadosJson;
  JsonStreamRetorno.Free;
  SoketSSL.Free;
  idHttp.Free;
end;

constructor TBancoInter.Create(AOwner: TComponent);
begin
  inherited;
  fpagador := TPagador.Create(SELF);
  fpagador.Name:='Pagador';
  fpagador.SetSubComponent(true);

  fmensagem := TMesangem.Create(self);
  fmensagem.Name := 'Mensagem';
  fmensagem.SetSubComponent(true);

  fmulta := TMulta.Create(self);
  fmulta.Name := 'Multa';
  fmulta.SetSubComponent(true);

  fmora := TMora.Create(self);
  fmora.Name := 'Mora';
  fmora.SetSubComponent(true);



  fdesconto1 := TDesconto1.Create(self);
  fdesconto1.Name:='Desconto1';
  fdesconto1.SetSubComponent(true);

  fdesconto2 := TDesconto2.Create(self);
  fdesconto2.Name:='Desconto2';
  fdesconto2.SetSubComponent(true);

  fdesconto3 := TDesconto3.Create(self);
  fdesconto3.Name:='Desconto3';
  fdesconto3.SetSubComponent(true);

  

  fcertificado := TCertificado.Create(self);
  fcertificado.Name:='Certificado';
  fcertificado.SetSubComponent(true);



end;

destructor TBancoInter.Destroy;
begin
  fmora.Free;
  fpagador.Free;
  fmensagem.Free;
  fmulta.Free;
  fdesconto1.Free;
  fdesconto2.Free;
  fdesconto3.Free;
  inherited;
end;





function TBancoInter.GerarBoleto: TStringList;
var
  DadosEnvio:TStringList;
  JsonStreamRetorno, JsonStreamEnvio: TStringStream;
  idHttp:TIdHTTP;
  SoketSSL:TIdSSLIOHandlerSocketOpenSSL;
  i:integer;
  js:TlkJSONobject;
  SJson:string;
  ws: TlkJSONstring;

begin
  idHttp            := tidHttp.Create(self);
  SoketSSL          := TIdSSLIOHandlerSocketOpenSSL.Create(self);

  //linkando o soketssl ao idhttp
  ConfiguraSSl(SoketSSL,Certificado.CertFile,Certificado.KeyFile);
  idHttp.IOHandler  := SoketSSL;

  //enviando via https
  ConfiguraIndy(IdHTTP,NumeroConta);


  DadosEnvio        := TStringList.Create;
  JsonStreamRetorno := TStringStream.Create('');
  DadosEnvio.Text   := MontaDados.Text;
  js := TlkJSON.ParseText(Dadosenvio.Text) as TlkJSONobject;
  i:=0;
  SJson := GenerateReadableText(js,i);


  JsonStreamEnvio   := TStringStream.Create(SJson);

  //JsonStreamEnvio   := TStringStream.Create(DadosEnvio.Text);
  DadosEnvio.Clear;


 try
   idhttp.Post('https://cdpj.partners.bancointer.com.br/cobranca/v2/boletos',JsonStreamEnvio,JsonStreamRetorno);

 except
   on E:EIdHTTPProtocolException do
      DadosEnvio.Add(IdHTTP.ResponseText+#13#10+e.ErrorMessage)
    else
      showexception(exceptobject, exceptaddr);
 end;
 if idhttp.ResponseCode<>200 then
    begin
      DadosEnvio.Add('Código de retorno: '+inttostr(IdHTTP.ResponseCode));
      DadosEnvio.Add('');
    end;

 if JsonStreamRetorno.DataString<>'' then
    DadosEnvio.add(JsonStreamRetorno.DataString);

 if idhttp.ResponseCode=200 then
    begin
      js := TlkJSON.ParseText(DadosEnvio.Text) as TlkJSONobject;
      fCodigoBarras   := vartostr(js.Field['codigoBarras'].Value);
      fLinhaDigitavel := vartostr(js.Field['linhaDigitavel'].Value);
      fNossoNumero    := vartostr(js.Field['nossoNumero'].Value);
      js.Free;
    end;

 if IdHTTP.ResponseCode<>200 then
    showmessage('Transação não pode ser inicada ('+inttostr(IdHTTP.ResponseCode)+').');
 idHttp.Free;
 JsonStreamRetorno.Free;
 JsonStreamEnvio.Free;
 result := DadosEnvio;


end;

function TBancoInter.GetCodigoBarras: string;
begin
  result := fCodigoBarras;
end;



function TBancoInter.GetLinhaDigitavel: string;
begin
  result := fLinhaDigitavel;
end;

function TBancoInter.GetNossoNumero: string;
begin
  result := fNossoNumero;
end;



function TBancoInter.MontaDados: Tstringlist;
var
Dados:tstringlist;
begin
  Dados := TStringList.Create;
  // dados do pagador
  Dados.Add('{');
  Dados.Add('   "pagador":{');
  dados.Add('      "cnpjCpf":"' +  Pagador.CNPJ_CPF + '",');
  dados.Add('      "nome":"' + pagador.Nome + '",');
  dados.Add('      "email":"'  + pagador.Email + '",');
  dados.Add('      "telefone":"' + pagador.Telefone + '",');
  dados.Add('      "cep":"' + pagador.CEP + '",');
  dados.Add('      "numero":"' + pagador.Numero + '",');
  dados.Add('      "complemento":"' + pagador.Complemento + '",');
  dados.Add('      "bairro":"' + pagador.Bairro + '",');
  dados.Add('      "cidade":"' + pagador.Cidade + '",');
  dados.Add('      "uf":"' + pagador.UF + '",');
  dados.Add('      "endereco":"' + pagador.Endereco + '",');
  dados.Add('      "ddd":"' + pagador.DDD + '",');
  dados.Add('      "tipoPessoa":"' + RetTipoPessoa(pagador.TipoPessoa) + '"');
  Dados.Add('   },');

  //dados do boleto

  Dados.Add('   "dataEmissao":"' + RetData(fDataEmissao) + '",');
  Dados.Add('   "seuNumero":"' + SeuNumero + '",');
  //Dados.Add('   "dataLimite":"' + RetData(Vencimento) + '",');
  Dados.Add('   "dataVencimento":"' + RetData(Vencimento) + '",');

  //mensagem no boleto
  Dados.Add('   "mensagem":{');
  dados.Add('      "linha1":"' + Mensagem.Mensagem1 + '",');
  dados.Add('      "linha2":"' + Mensagem.Mensagem2 + '",');
  dados.Add('      "linha3":"' + Mensagem.Mensagem3 + '",');
  dados.Add('      "linha4":"' + Mensagem.Mensagem4 + '",');
  dados.Add('      "linha5":"' + Mensagem.Mensagem5 + '"');
  Dados.Add('   },');


  Dados.Add('   "desconto1":{');
  dados.Add('      "codigoDesconto":"' + RetCodigoDesconto(desconto1.CodigoDesconto) + '",');
  dados.Add('      "taxa":' + numdos(Desconto1.Taxa) +  ',');
  dados.Add('      "valor":' + numdos(Desconto1.Valor) + ',');
  dados.Add('      "data":"' + RetData(desconto1.DataDesconto) + '"');
  Dados.Add('   },');

  Dados.Add('   "desconto2":{');
  dados.Add('      "codigoDesconto":"' + RetCodigoDesconto(desconto2.CodigoDesconto) + '",');
  dados.Add('      "taxa":' + numdos(Desconto2.Taxa) +  ',');
  dados.Add('      "valor":' + numdos(Desconto2.Valor) + ',');
  dados.Add('      "data":"' + RetData(desconto2.DataDesconto) + '"');
  Dados.Add('   },');

  Dados.Add('   "desconto3":{');
  dados.Add('      "codigoDesconto":"' + RetCodigoDesconto(desconto3.CodigoDesconto) + '",');
  dados.Add('      "taxa":' + numdos(Desconto3.Taxa) +  ',');
  dados.Add('      "valor":' + numdos(Desconto3.Valor) + ',');
  dados.Add('      "data":"' + RetData(desconto3.DataDesconto) + '"');
  Dados.Add('   },');

  Dados.Add('   "valorNominal":' + numdos(ValorNorminal) + ',');
  Dados.Add('   "valorAbatimento":' + numdos(ValorAbatimento) + ',');


  //multa a ser aplicada
  Dados.Add('   "multa":{');
  dados.Add('      "codigoMulta":"' + RetCodigoMulta(multa.CodigoMulta) + '",');
  dados.Add('      "data":"' + RetData(multa.DataAContar) + '",');
  dados.Add('      "valor":' + numdos(multa.Valor) + ',');
  dados.Add('      "taxa":' + numdos(multa.Taxa) );
  Dados.Add('   },');

  //mora diaria
  Dados.Add('   "mora":{');
  dados.Add('      "codigoMora":"' + RetCodigoMora(mora.CodigoMora) + '",');
  dados.Add('      "data":"' + RetData(multa.DataAContar) + '",');
  dados.Add('      "valor":' + numdos(mora.Valor) + ',');
  dados.Add('      "taxa":' + numdos(mora.Taxa) );
  Dados.Add('   },');

  Dados.Add('   "cnpjCPFBeneficiario":"' + CPF_CNPJ_Beneficiario + '",');
  Dados.Add('   "numDiasAgenda":"' + RetDiasAgenda(NumDiasAgenda)  + '"');
  Dados.Add('}');
  result := dados;
end;


procedure TBancoInter.RecuperaBoletoPDF(NossoNumero, LocalPath: string);
var
  DadosJson:TStringList;
  JsonStreamRetorno : TStringStream;
  idHttp:TIdHTTP;
  SoketSSL:TIdSSLIOHandlerSocketOpenSSL;

  MStream:TMemoryStream;
  Decoder:TIdDecoderMIME;
  Base64: string;

begin

  JsonStreamRetorno := TStringStream.Create;
  idHttp            := tidHttp.Create(self);
  SoketSSL          := TIdSSLIOHandlerSocketOpenSSL.Create(self);

  //configurando o soketssl
  ConfiguraSSl(SoketSSL,Certificado.CertFile,Certificado.KeyFile);


  //linkando o soketssl ao idhttp
  idHttp.IOHandler  := SoketSSL;
  ConfiguraIndy(IdHTTP,NumeroConta);

  //enviando via https
  DadosJson := TStringList.Create;
  try

     IdHTTP.Get('https://cdpj.partners.bancointer.com.br/cobranca/v2/boletos/' + NossoNumero + '/pdf',JsonStreamRetorno);

    except
     on E:EIdHTTPProtocolException do
       DadosJson.Add(IdHTTP.ResponseText+#13#10+e.ErrorMessage)
     else
       showexception(exceptobject, exceptaddr);
    end;

    if IdHTTP.ResponseCode<>200 then
       begin
         DadosJson.Add('Código de retorno: '+inttostr(IdHTTP.ResponseCode));
         DadosJson.Add('');
         DadosJson.Add('Transação não pode ser inicada ('+inttostr(IdHTTP.ResponseCode)+').');
         showmessage(DadosJson.Text);
         DadosJson.Clear;
       end;

    if (IdHTTP.ResponseCode=200) and (JsonStreamRetorno.DataString<>'') then
       begin
         Decoder := TIdDecoderMIME.Create(nil);
         MStream := TMemoryStream.Create;
         Base64  := JsonStreamRetorno.DataString;
         Decoder.DecodeStream(Base64,MStream);
         MStream.SaveToFile(LocalPath+'\boleto-inter-' + NossoNumero + '.pdf');
         FreeAndNil(Decoder);
         FreeAndNil(MStream);
         ShowMessage('Boleto Baixado Com Sucesso!');
       end;

  JsonStreamRetorno.Free;
  SoketSSL.Free;
  idHttp.Free;
end;


end.

 

Editado por johnbh3
Postado

No PostMan peguei o mesmo JSON gerado pelo delphi e enviou, so troquei claro o 

'#$D#$A' do JSON gerado pelo delphi

 

Retornou normalmente status  200

{
    "seuNumero""1383",
    "nossoNumero""00845404898",
    "codigoBarras""07791905600000010000001112050675100845404898",
    "linhaDigitavel""07790001161205067510208454048987190560000001000"
}

Postado

Muito estranho o idHttp esta enviando nada!

 

Eu até uma VCL zerado e coloquei apenas 

 

em uses
IdServerIOHandler, IdSSL,
  IdSSLOpenSSL, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdCoderMIME,
  uLkJSON,XSuperObject;


var
  idHttp:TIdHTTP;
  SoketSSL:TIdSSLIOHandlerSocketOpenSSL;
  JsonStreamRetorno, JsonStreamEnvio: TStringStream;
  SJson: String;
begin
  idHttp            := tidHttp.Create(self);

  with idHttp.Request.CustomHeaders do
    begin
      Clear;
      Values['Content-Type']   := 'application/json';
    end;

  SoketSSL          := TIdSSLIOHandlerSocketOpenSSL.Create(self);
  idHttp.IOHandler  := SoketSSL;
  SJson :='{  "pagador": {    "cpfCnpj": "13259086000113",    "nome:"TESTE"}}';
  JsonStreamEnvio   := TStringStream.Create(SJson);
  JsonStreamRetorno := TStringStream.Create('');


 idhttp.Post('http://webhookinbox.com/view/iiZ4ti1N/',JsonStreamEnvio,JsonStreamRetorno);
 ShowMessage(JsonStreamRetorno.DataString);

Inventei um conteudo JSON bobo atoa e tem mesmo comportamento não enviar pro webhookinbox que vc sugeriu! 

  • Solution
Postado

Resolvido pessoal, se puder fechar !

 

A solução e: UTF8Decode no JSON para envio OK!
Como postei toda solução aqui, caso alguém precise já fica a dica!

Forte a abraço a todos.

  • Curtir 1
  • Consultores
Postado

Uma consideração, por favor sempre anexem arquivos dos fontes ao invés de todo o conteúdo, a menos que seja um fragmento pequeno para o contexto.

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

  • Este tópico foi criado há 1458 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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...
The popup will be closed in 10 segundos...