Ir para conteúdo
  • Cadastre-se

dev botao

Emissão de Boleto com registro online itaú na API v2


Ver Solução Respondido por Daniel InfoCotidiano,
  • Este tópico foi criado há 445 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Boa tarde, alguém fez a emissão de boleto com registro online do itaú usando API de cobrança v2 (versão 2.0)? ACBr tem mais é na v1 (versão 1.0) e para clientes novos no ITÁU eles não libera mais essa API...estou aqui na luta pra conseguir mais esse banco com registro online...mais está compliado porque são muitos critérios, envolvi o envio do certificado em varios formatos.

  • 1 mês depois ...
  • 2 meses depois ...
Postado

CarlosAR Eu tentei fazer uma epoca mais meu cliente desistiu....se vc tiver um cliente que vai usar API e se vc quizer fazer parceria comigo..tamo junto...fiz a V1...mais a V2 do ITAÚ é muito complicado...já fiz integração via API com mais de 11 Bancos...mais o itaú na V2 ainda não fiz. me manda mensagem no privado que eu passo meu zap pra vc...pra gente conversar e trocar experiencias.

  • Moderadores
Postado
46 minutos atrás, JHONLENON disse:

CarlosAR Eu tentei fazer uma epoca mais meu cliente desistiu....se vc tiver um cliente que vai usar API e se vc quizer fazer parceria comigo..tamo junto...fiz a V1...mais a V2 do ITAÚ é muito complicado...já fiz integração via API com mais de 11 Bancos...mais o itaú na V2 ainda não fiz. me manda mensagem no privado que eu passo meu zap pra vc...pra gente conversar e trocar experiencias.

Que legal. está no ACBrBoleto isso ? se sim anexa ai os fontes para ajudar os demais colegas e podermos avaliar e subir no SVN

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado
Em 27/05/2022 at 20:35, JHONLENON disse:

Boa noite amigo...você tem que ter acesso ao portal do developers do itaú....toda documentação fica só no site....

Eu tenho cadastro no portal, mas por lá dão acesso algumas APIs apenas, a de cobrança somente com solicitação do cliente emissor junto ao gerente da conta. Uma burocracia desnecessária na minha opinião.

Em 27/05/2022 at 20:41, JHONLENON disse:

CarlosAR Eu tentei fazer uma epoca mais meu cliente desistiu....se vc tiver um cliente que vai usar API e se vc quizer fazer parceria comigo..tamo junto...fiz a V1...mais a V2 do ITAÚ é muito complicado...já fiz integração via API com mais de 11 Bancos...mais o itaú na V2 ainda não fiz. me manda mensagem no privado que eu passo meu zap pra vc...pra gente conversar e trocar experiencias.

A priori estou procurando as documentações e avaliando. Assim que aprovada a implementação eu entro em contato.

Postado

CarlosAR Meu cadastro tem acesso total a API deles...peça ao gerante de conta do seu cliente pra conseguir o acesso pra vc. O itáu é bem complicado, tem muitas exigencias e tem um contrato onde fala que nós os parceiros não pode falar sobre detalhes técnico da API deles.

 

  • 2 semanas depois ...
  • 2 meses depois ...
Postado

Bom dia à todos!
Sou novo aqui no fórum, e também estou desenvolvendo a api v2 de boletos registrados pro Itaú. 
Eu já havia feito a api v1 pra alguns clientes e foi super fácil, porém a v2 realmente está complicada, principalmente porque a documentação deles não é nada clara quanto a api de boletos, o foco deles é muito no PIX.
Tudo que sei até o momento conversando com o TI deles, é que a api que deve ser usada é a API Cash Management, mas pasmem, ela não menciona em quase nenhum momento algo sobre boletos. Daí tirei a dúvida com o TI deles e me disseram que a estrutura da api v2 de boletos agora é a mesma do PIX e que a v1 será descontinuada em breve. 
Como eu já tenho experiência na Api PIX deles, espero conseguir fazer pra boletos também, então qualquer atualização posto aqui também. 
Here We Go!

Postado (editado)

Eu tenho experiencia em emissão de boleto via API e também com PIX....mais fiquei parado na v2 do ITÁU...na epoca meu cliente disistiu da integração com v2 por causa da burocrcia.

Editado por JHONLENON
  • 3 semanas depois ...
Postado

Bom Dia Pessoal. 

Tenho uma reunião com o Itau amanha as 10:00, vou falar com a equipe de desenvolvimento deles. 

Ficaram de me liberar um outro ambiente e vão me ajudar a descriptografar as chaves que me enviaram. 

Amanhã Retorno com mais alguma informação.

 

  • Curtir 1
  • 4 semanas depois ...
Postado

Olá pessoal!

Eu estou desenvolvendo a integração com a API de cobrança para emissão de boletos. Consegui implementar os métodos de emissão e baixa do boleto, porém, a consulta não estou conseguindo, nem pelo Delphi nem pelo Postman...

Retorna a seguinte exception:

 

image.png.e738bbede77e5902a85ecc6bb1c39f6d.png

Alguém já passou por isso?

Desde já agradeço.

Postado

Boa tarde, abri minha conta PJ do Itaú e minha gerente conseguiu liberar a API de emissão de boleto na minha conta, estou aguardando o e-mail do suporte técnico onde eles solicita as informações necessarios para iniciar o processo de homologação...com dé em DEUS agora vou conseguir. A quase 1 ano atras tentei e não consegui...expliquei a situação para o meu cliente ai ele mandou eu CANCELAR o processo, mais agora eu consegui entender o processo todo no site do developers. Também tava usando a conta do cliente, não tinha muito acesso, mais agora minha propria conta PJ vai ser mais facíl.

Na minha suite de boletos falta só itáu....rsrs

Emissão de Boleto via API em produção no meu sistema

1 - Banco do Brasil

2 - Caixa Econimica

3 - Bradesco

4 - Santander

5 - Sicredi

6 - Sicoob

7 - Banco Inter

8 - Cooperativa Alios (Varias Cooperativas)

9 - Banco Banrisul

10 - Itaú (Em desenvolvimento)

  • Curtir 2
Postado
Em 12/10/2022 at 20:49, JHONLENON disse:

Coletek MG Você consegiu emitir boleto na API do Itaú na v2? vc pode compartilhar seu codigo aqui no forum?

Emitir e cancelar sim, usei IdHTTP:

 

function Tfrm_BoletoItau.RequisicaoRestCert(BodyJson: String; var MsgRetorno: String; Requisicao: TMetodoRequisicao): Integer;
var
  HTTP: TIdHTTP;
  IOHandle: TIdSSLIOHandlerSocketOpenSSL;
  ListParams: TStringList;
  JsonStreamEnvio, Resp: TStringStream;
  Jso: TJSONObject;
  JsoPair: TJSONPair;
  Parametros, Uri: String;
  PostBoletoError: String;
  PostBoletoResult: Boolean;
  UriConsulta: TStringList;
begin
  if (memoToken.Lines.Text = '') then
  begin
    PostBoletoError := 'Error: Token oAuth não gerado ou expirado!';
    exit;
  end;
  try
    ListParams := TStringList.Create;
    Resp := TStringStream.Create;
    UriConsulta := TStringList.Create;
    HTTP := TIdHTTP.Create(Self);
    HTTP.Request.BasicAuthentication := False;
    HTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';
    IOHandle := TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);
    IOHandle.SSLOptions.Method := sslvTLSv1_2;
    IOHandle.SSLOptions.Mode := sslmClient;
    IOHandle.SSLOptions.CertFile := Cert_File;
    IOHandle.SSLOptions.KeyFile := Key_File;
    HTTP.IOHandler := IOHandle;
    HTTP.Request.ContentType := 'application/json';
    HTTP.Request.Accept := '*/*';
    HTTP.Request.CharSet := 'utf-8';
    HTTP.Request.CustomHeaders.FoldLines := False;
    HTTP.Request.CustomHeaders.Add('Authorization: Bearer ' + memoToken.Lines.Text);
    try
      // Verificando qual tipo de requisição
      if Requisicao = mrPost then
      begin
        ListParams.text := BodyJson;
        JsonStreamEnvio := TStringStream.Create(ListParams.text);
        HTTP.Post(Uri_Emissao, JsonStreamEnvio, Resp);
      end
      else if Requisicao = mrPatch then
      begin
        Uri := StringReplace(Uri_Baixa, '{idBoleto}', edtIdBoleto.Text, [rfReplaceAll]);
        ListParams.text := '{}';
        JsonStreamEnvio := TStringStream.Create(ListParams.text);
        HTTP.Patch(Uri, JsonStreamEnvio, Resp);
      end
      else if Requisicao = mrGet then
      begin
        ListParams.text := '{}';
        JsonStreamEnvio := TStringStream.Create(ListParams.text);
        UriConsulta.Text := Uri_Consulta;
        UriConsulta.Text := StringReplace(UriConsulta.Text, '{id_beneficiario}', copy(edtBoletoCons.Text, 1, 12), [rfReplaceAll]);
        UriConsulta.Text := StringReplace(UriConsulta.Text, '{codigo_carteira}', copy(edtBoletoCons.Text, 13, 3), [rfReplaceAll]);
        UriConsulta.Text := StringReplace(UriConsulta.Text, '{nosso_numero}'   , copy(edtBoletoCons.Text, 16, 8), [rfReplaceAll]);
        UriConsulta.Text := StringReplace(UriConsulta.Text, '{data_emissao}', FormatDateTime('YYYY-MM-DD',strToDate(edtDataEmissao.Text)) , [rfReplaceAll]);
        HTTP.Request.CustomHeaders.FoldLines := False;
        HTTP.Request.ContentType := 'application/json';
        HTTP.HandleRedirects := True;
        HTTP.Request.CustomHeaders.Add('Authorization: Bearer ' + memoToken.Lines.Text);
        HTTP.Request.CustomHeaders.Add('x-itau-apikey:' + Client_ID);
        HTTP.Request.CustomHeaders.Add('x-itau-correlationID:' + Correlation_ID);
        HTTP.Request.CustomHeaders.Add('x-itau-flowID:' + '8A30E15C-1AC9-418A-AF1E-02E36BF77ADE');
        Clipboard.AsText := UriConsulta.Text;
        HTTP.Get(UriConsulta.Text, Resp);
      end;
      if HTTP.ResponseCode = 200 then
      begin
        PostBoletoResult := true;
        try
          Jso := TJSONObject.Create;
          Jso.Parse(Resp.Bytes, 0);
          MsgRetorno := Jso.ToString;
          Result := HTTP.ResponseCode;
        finally
          FreeAndNil(Jso);
        end;
      end
      else
        PostBoletoError := 'Error: ' + IntToStr(HTTP.ResponseCode) + ' - ' +
          Resp.DataString;
    except
      on e: EIdHTTPProtocolException do
      begin
        Result := HTTP.ResponseCode;
        MsgRetorno := e.ErrorMessage;
        PostBoletoError := 'Error: ' + HTTP.ResponseText + ' - ' + MsgRetorno;
      end;
    end;
  finally
    memoRetornoCons.Lines.Text  := PostBoletoError;
    FreeAndNil(ListParams);
    FreeAndNil(Resp);
    FreeAndNil(JsonStreamEnvio);
    FreeAndNil(IOHandle);
    FreeAndNil(HTTP);
  end;
end;

Não consigo agora consultar o boleto...

Só retorna erro 403 Forbidden 

Se alguem puder me ajudar nesse problema, ficarei muito grato.

Postado

Coletek MG Eu já tinha montando também meu código com indy...mais valeu por disponbilizar...também vou disponilizar o meu assim que testar. Eu ainda estou aguardando as credenciais (Cliente_ID e Token Temporário), me responde um coisa, quando vc recebeu o Client_ID e Token Temporário eles vieram descriptografado ou você teve de decifrar as credenciais? na outra solicitação que fiz ao itaú à uns 9 meses atrás eles me mandaram a Client_ID e Token temporário já decifrado, mais eu não sei se ainda é assim. Quando eu receber as credenciais vou testar essa parada da consulta do boleto também...caso tenho sucesso posto aqui pra você.

Postado
Em 21/10/2022 at 14:39, Coletek MG disse:

Emitir e cancelar sim, usei IdHTTP:

 

function Tfrm_BoletoItau.RequisicaoRestCert(BodyJson: String; var MsgRetorno: String; Requisicao: TMetodoRequisicao): Integer;
var
  HTTP: TIdHTTP;
  IOHandle: TIdSSLIOHandlerSocketOpenSSL;
  ListParams: TStringList;
  JsonStreamEnvio, Resp: TStringStream;
  Jso: TJSONObject;
  JsoPair: TJSONPair;
  Parametros, Uri: String;
  PostBoletoError: String;
  PostBoletoResult: Boolean;
  UriConsulta: TStringList;
begin
  if (memoToken.Lines.Text = '') then
  begin
    PostBoletoError := 'Error: Token oAuth não gerado ou expirado!';
    exit;
  end;
  try
    ListParams := TStringList.Create;
    Resp := TStringStream.Create;
    UriConsulta := TStringList.Create;
    HTTP := TIdHTTP.Create(Self);
    HTTP.Request.BasicAuthentication := False;
    HTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';
    IOHandle := TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);
    IOHandle.SSLOptions.Method := sslvTLSv1_2;
    IOHandle.SSLOptions.Mode := sslmClient;
    IOHandle.SSLOptions.CertFile := Cert_File;
    IOHandle.SSLOptions.KeyFile := Key_File;
    HTTP.IOHandler := IOHandle;
    HTTP.Request.ContentType := 'application/json';
    HTTP.Request.Accept := '*/*';
    HTTP.Request.CharSet := 'utf-8';
    HTTP.Request.CustomHeaders.FoldLines := False;
    HTTP.Request.CustomHeaders.Add('Authorization: Bearer ' + memoToken.Lines.Text);
    try
      // Verificando qual tipo de requisição
      if Requisicao = mrPost then
      begin
        ListParams.text := BodyJson;
        JsonStreamEnvio := TStringStream.Create(ListParams.text);
        HTTP.Post(Uri_Emissao, JsonStreamEnvio, Resp);
      end
      else if Requisicao = mrPatch then
      begin
        Uri := StringReplace(Uri_Baixa, '{idBoleto}', edtIdBoleto.Text, [rfReplaceAll]);
        ListParams.text := '{}';
        JsonStreamEnvio := TStringStream.Create(ListParams.text);
        HTTP.Patch(Uri, JsonStreamEnvio, Resp);
      end
      else if Requisicao = mrGet then
      begin
        ListParams.text := '{}';
        JsonStreamEnvio := TStringStream.Create(ListParams.text);
        UriConsulta.Text := Uri_Consulta;
        UriConsulta.Text := StringReplace(UriConsulta.Text, '{id_beneficiario}', copy(edtBoletoCons.Text, 1, 12), [rfReplaceAll]);
        UriConsulta.Text := StringReplace(UriConsulta.Text, '{codigo_carteira}', copy(edtBoletoCons.Text, 13, 3), [rfReplaceAll]);
        UriConsulta.Text := StringReplace(UriConsulta.Text, '{nosso_numero}'   , copy(edtBoletoCons.Text, 16, 8), [rfReplaceAll]);
        UriConsulta.Text := StringReplace(UriConsulta.Text, '{data_emissao}', FormatDateTime('YYYY-MM-DD',strToDate(edtDataEmissao.Text)) , [rfReplaceAll]);
        HTTP.Request.CustomHeaders.FoldLines := False;
        HTTP.Request.ContentType := 'application/json';
        HTTP.HandleRedirects := True;
        HTTP.Request.CustomHeaders.Add('Authorization: Bearer ' + memoToken.Lines.Text);
        HTTP.Request.CustomHeaders.Add('x-itau-apikey:' + Client_ID);
        HTTP.Request.CustomHeaders.Add('x-itau-correlationID:' + Correlation_ID);
        HTTP.Request.CustomHeaders.Add('x-itau-flowID:' + '8A30E15C-1AC9-418A-AF1E-02E36BF77ADE');
        Clipboard.AsText := UriConsulta.Text;
        HTTP.Get(UriConsulta.Text, Resp);
      end;
      if HTTP.ResponseCode = 200 then
      begin
        PostBoletoResult := true;
        try
          Jso := TJSONObject.Create;
          Jso.Parse(Resp.Bytes, 0);
          MsgRetorno := Jso.ToString;
          Result := HTTP.ResponseCode;
        finally
          FreeAndNil(Jso);
        end;
      end
      else
        PostBoletoError := 'Error: ' + IntToStr(HTTP.ResponseCode) + ' - ' +
          Resp.DataString;
    except
      on e: EIdHTTPProtocolException do
      begin
        Result := HTTP.ResponseCode;
        MsgRetorno := e.ErrorMessage;
        PostBoletoError := 'Error: ' + HTTP.ResponseText + ' - ' + MsgRetorno;
      end;
    end;
  finally
    memoRetornoCons.Lines.Text  := PostBoletoError;
    FreeAndNil(ListParams);
    FreeAndNil(Resp);
    FreeAndNil(JsonStreamEnvio);
    FreeAndNil(IOHandle);
    FreeAndNil(HTTP);
  end;
end;

Não consigo agora consultar o boleto...

Só retorna erro 403 Forbidden 

Se alguem puder me ajudar nesse problema, ficarei muito grato.

Será que o problema não está no scope? eu não entendi bem sobre aquele scope que eles fala que tem que informar  no cadastro da aplicação consumidora no portal de certificados de parceiro. deve ser adicionado o scope/funcionalidade: boletoscash-boletos-consulta_titulo

Postado

Boa tarde, hoje recebi as credenciais do itaú, eu estou conseguindo gerar o tokem bearer mais na hora de emitir o boleto recebo o retorno HTTP/1.1 403 Forbidden, olhando o retorno de erro 403 é (Acesso Proibido), enviei um e-mail para o itau para eles verificar se tem algum bloqueio no acesso a API de Boleto v2.

Postado (editado)

Boa tarde, esse é meu códgio para obter o token bearer e emissão de boleto na API v2 do itaú, feito com indy. Implementação concluida com sucesso.API de Cobrança v2 Itaú.

uses IdHTTP, IdIOHandlerStack, IdSSL, blcksock, System.Json, IdGlobalProtocols, IdSSLOpenSSL, synautil, synsock, ssl_openssl;

procedure TF_boleto.EnviarBoletoItau;
var mURL, sResponse, mCode : string;
HTTP, HttpClient: TIdHTTP;
FParams, access_token, refresh_token : String;
Json, scope, token_type, expires_in, RESULTADO_BOLETO : String;
JsontoSend, AResponseContent : TStringStream;
var IOHandler : TIdSSLIOHandlerSocketOpenSSL;
var Resp, Req, Resp_Cobranca, Req_Cobranca: TStringStream;
var Result, s, recieveID, DATA_EMISSAO, DATA_VENCIMENTO, ArquivoJSON, ACESSO_TOKEN, RESULTADO_TOKEN, valorTexto : String;
var TICKET_XML, XML_COBRANCA : TStringList;
var newFile, Arq_Liberacao : TextFile;
var TICKET, RET_CODE, TIPO_PESSOA, TIPO_AMBIENTE, NSU, sCAMINHGO_EXE, FURLToken, URL, NUMERO_CADASTRO_PESSOA, JSON_TOKEN, JSON_BOLETO : String;
var DIAS_MULTA, DATA_HORA_TOKEN : Integer;
  XMLResponse, TIPO_VALIDACAO, ID_BENEFICIARIO, VALOR_BOLETO, TIPO_CLIENTE, VALOR_JUROS, VALOR_MULTAS, TextoOriginal  : String;
  var JsonStreamRetorno, JsonStreamEnvio: TStringStream;
  SSL : TIdSSLIOHandlerSocketOpenSSL;
begin
  //-----Todo conhecimento que o homem possui é dada por DEUS-------------------
  if Length(DM.SQL_contas_receber_boletoCPF_CNPJ_Cliente.AsString) = 14 then
  begin
    TIPO_CLIENTE             := 'J';
    NUMERO_CADASTRO_PESSOA   := 'numero_cadastro_nacional_pessoa_juridica';
  end
  else
  begin
    TIPO_CLIENTE := 'F';
    NUMERO_CADASTRO_PESSOA   := 'numero_cadastro_pessoa_fisica';
  end;
  DATA_EMISSAO     :=PegarNumeros(DateToStr(DM.SQL_contas_receber_boletoDetalhe_Data_Emissao.AsDateTime));
  DATA_VENCIMENTO  :=PegarNumeros(DateToStr(DM.SQL_contas_receber_boletoDetalhe_Data_Vencimento.AsDateTime));
  TIPO_VALIDACAO   :='';
  if DM.TIPO_AMBIENTE_BOLETO = 'Homologação' then
  begin
    TIPO_VALIDACAO :='validacao';
  end
  else
  begin
    TIPO_VALIDACAO :='efetivacao';
  end;
  DATA_EMISSAO     :=Copy(DATA_EMISSAO, 5, 4)+ '-'+  Copy(DATA_EMISSAO, 3, 2)+ '-'+Copy(DATA_EMISSAO, 1, 2);
  DATA_VENCIMENTO  :=Copy(DATA_VENCIMENTO , 5, 4)+ '-'+  Copy(DATA_VENCIMENTO , 3, 2)+ '-'+Copy(DATA_VENCIMENTO , 1, 2);
  ID_BENEFICIARIO          :='';
  ID_BENEFICIARIO          :=DM.SQL_busca_contaEmpresa_Agencia.AsString + FormatFloat('0000000', DM.SQL_busca_contaEmpresa_conta.AsInteger) + DM.SQL_busca_contaEmpresa_Conta_Digito.AsString;
  VALOR_BOLETO             :='';
  VALOR_BOLETO             :=PegarNumeros(FormatFloat('#000000000000000.00', DM.SQL_contas_receber_boletoDetalhe_Valor_Falta.AsFloat));
  VALOR_MULTAS             :=PegarNumeros(FormatFloat('#000000000000000.00', roundabnt(DM.SQL_busca_contaMULTA_DIA.AsFloat,-2)));
  VALOR_JUROS              :=PegarNumeros(FormatFloat('#000000000000000.00', roundabnt(VALOR_MOURA_JUROS,-2)));

  JSON_BOLETO :='{' + #13 +
                '    "data": {' + #13 +
                '        "etapa_processo_boleto": "'+TIPO_VALIDACAO+'",' + #13 +
                '        "codigo_canal_operacao": "API",' + #13 +
                '        "beneficiario": {' + #13 +
                '            "id_beneficiario": "'+ID_BENEFICIARIO+'"' + #13 +
                '        },' + #13 +
                '        "dado_boleto": {' + #13 +
                '            "descricao_instrumento_cobranca": "boleto",' + #13 +
                '            "tipo_boleto": "a vista",' + #13 +
                '            "codigo_carteira": "'+DM.SQL_busca_contaCarteira.AsString +'",' + #13 +
                '            "valor_total_titulo": "'+VALOR_BOLETO+'",' + #13 +
                '            "codigo_especie": "01",' + #13 +
                '            "valor_abatimento": "000",' + #13 +
                '            "data_emissao": "'+DATA_EMISSAO+'",' + #13 +
                '            "indicador_pagamento_parcial": false,' + #13 +
                '            "quantidade_maximo_parcial": 0,' + #13 +
                '            "pagador": {' + #13 +
                '                "pessoa": {' + #13 +
                '                    "nome_pessoa": "'+TrocaEComercialPorE(TiraAcentos(Copy(DM.SQL_contas_receber_boletoNomeRazaoSocial.AsString, 1, 50)))+'",' + #13 +
                '                    "tipo_pessoa": {' + #13 +
                '                        "codigo_tipo_pessoa": "'+TIPO_CLIENTE+'",' + #13 +
                '                        "'+NUMERO_CADASTRO_PESSOA+'": "'+DM.SQL_contas_receber_boletoCPF_CNPJ_Cliente.AsString+'"' + #13 +
                '                    }' + #13 +
                '                },' + #13 +
                '                "endereco": {' + #13 +
                '                    "nome_logradouro": "'+TrocaEComercialPorE(TiraAcentos(Copy(DM.SQL_contas_receber_boletoEndereco.AsString, 1, 40)))+ ', '+Copy(DM.SQL_contas_receber_boletoNumero.AsString, 1, 5)+'",' + #13 +
                '                    "nome_bairro": "'+TrocaEComercialPorE(TiraAcentos(Copy(DM.SQL_contas_receber_boletoBairro.AsString, 1, 40)))+'",' + #13 +
                '                    "nome_cidade": "'+TrocaEComercialPorE(TiraAcentos(Copy(DM.SQL_contas_receber_boletoCidade.AsString, 1, 40)))+'",' + #13 +
                '                    "sigla_UF": "'+DM.SQL_contas_receber_boletoUF.AsString+'",' + #13 +
                '                    "numero_CEP": "'+DM.SQL_contas_receber_boletoCEP.AsString+'"' + #13 +
                '                }' + #13 +
                '            },' + #13 +
                '            "dados_individuais_boleto": [{' + #13 +
                '                "numero_nosso_numero": "'+sNOSSO_NUMERO_ITAU+'",' + #13 +
                '                "data_vencimento": "'+DATA_VENCIMENTO+'",' + #13 +
                '                "valor_titulo": "'+VALOR_BOLETO+'",' + #13 +
                '                "texto_uso_beneficiario": "'+DM.SQL_contas_receber_boletoDetalhe_N_Parcela.AsString+'",' + #13 +
                '                "texto_seu_numero": "'+DM.SQL_contas_receber_boletoDetalhe_N_Documento.AsString+'"' + #13 +
                '            }],' + #13 +
                '            "multa": {' + #13 +
                '                "codigo_tipo_multa": "02",' + #13 +
                '                "quantidade_dias_multa": 1,' + #13 +
                '                "percentual_multa": "'+VALOR_MULTAS+'"' + #13 +
                '            },' + #13 +
                '            "juros": {' + #13 +
                '                "codigo_tipo_juros": 93,' + #13 +
                '                "quantidade_dias_juros": 1,' + #13 +
                '                "valor_juros": "'+VALOR_JUROS+'"' + #13 +
                '            },' + #13 +
                '            "recebimento_divergente": {' + #13 +
                '                "codigo_tipo_autorizacao": "03"' + #13 +
                '            },' + #13 +
               // '            "instrucao_cobranca": [' + #13 +
               // '                {' + #13 +
               // '                    "codigo_instrucao_cobranca": "4",' + #13 +
               // '                    "quantidade_dias_apos_vencimento":60,' + #13 +
               // '                    "dia_util":false' + #13 +
               // '                }        ' + #13 +
               // '            ],  ' + #13 +
                '            "protesto": {' + #13 +
                '                "protesto": 4,' + #13 +
                '                "quantidade_dias_protesto": 1' + #13 +
                '            },' + #13 +
                '            "negativacao": { ' + #13 +
                '                 "negativacao": 5, ' + #13 +
                '                 "quantidade_dias_negativacao": 1 ' + #13 +
                '             }, ' + #13 +
                '        ' + #13 +
                '            "desconto_expresso": false' + #13 +
                '        }' + #13 +
                '    }' + #13 +
                '}';

   ArquivoJSON          := '';
   ArquivoJSON          := JSON_BOLETO;
   sCAMINHGO_EXE        := (ExtractFilePath(ParamStr(0)) +'Boletos\LogsWebservice\');
   System.AssignFile(newFile, sCAMINHGO_EXE + Trim('Registro _Itau_'+sNOSSO_NUMERO_ITAU) + '.json');
   System.Rewrite(newFile);
   WriteLn(newFile, ArquivoJSON);
   System.CloseFile(newFile);

   RESULTADO_TOKEN  :='';
   access_token     :='';
   JSON_TOKEN       := 'grant_type=client_credentials&client_id='+ DM.SQL_busca_contaClientID.AsString+'&client_secret='+DM.SQL_busca_contaClientSecret.AsString;
   try
     HttpClient := TIdHTTP.Create( nil );
     SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
     HttpClient.IOHandler := SSL;
     JsonStreamEnvio   := TStringStream.Create(utf8Encode(JSON_TOKEN));
     DATA_HORA_TOKEN      :=DM.conecta.ExecSQLScalar('SELECT IFNULL(TIMESTAMPDIFF (MINUTE,Data_access_token,NOW()),8) AS QTD_Horas FROM configuracao_boleto where Codigo_Config_Boleto =:BANCO and CodLoja_Boleto =:COD_LOJA', [DM.COD_BANCO, DM.COD_LOJA]);
     if DATA_HORA_TOKEN >= 4 then
     begin
       with SSL.SSLOptions do
       begin
         CertFile     := ExtractFilePath(ParamStr(0)) +'Boletos\Certificado\Itau\ARQUIVO_CERTIFICADO.crt';
         KeyFile      := ExtractFilePath(ParamStr(0)) +'Boletos\Certificado\Itau\ARQUIVO_CHAVE_PRIVADA.key';
         Mode         := sslmUnassigned;
         Method       := sslvSSLv23;
         SSLVersions  := [sslvSSLv23];
       end;

       URL  :='essa url está no portal do developers itau';
       with HttpClient do
       begin
          Request.CharSet := 'utf-8';
          Request.Accept := '*/*';
          Request.AcceptEncoding := 'gzip, deflate, br';
          Request.CustomHeaders.Values['Content-Type'] := 'application/x-www-form-urlencoded';
          Request.CustomHeaders.Values['x-itau-flowID'] := DM.SQL_busca_contaClientID.AsString + 'd7';
          Request.CustomHeaders.Values['x-itau-correlationID'] := DM.SQL_busca_contaClientSecret.AsString;
          Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618)';
          HandleRedirects := True;
          HTTPOptions := [hoKeepOrigProtocol, hoInProcessAuth];
       end;

       try
         RESULTADO_TOKEN := HttpClient.Post(URL,JsonStreamEnvio);
          Except
       on E: Exception do
         begin
           ERRO_ITTAU      :='SIM';
           RESULTADO_TOKEN :=HttpClient.ResponseText;
           ArquivoJSON     :='';
           ArquivoJSON     := RESULTADO_TOKEN;
           sCAMINHGO_EXE   := (ExtractFilePath(ParamStr(0)) +'Boletos\LogsWebservice\');
           System.AssignFile(newFile, sCAMINHGO_EXE + Trim(sNOSSO_NUMERO_ITAU +'_erro_retorno_itau') + '.json');
           System.Rewrite(newFile);
           WriteLn(newFile, ArquivoJSON);
           System.CloseFile(newFile);
         end;
       end;

       if HttpClient.ResponseCode = 200 then
       begin
         access_token  :='';
         expires_in    :='';
         access_token  :=getCamposJsonString(RESULTADO_TOKEN, 'access_token');
         expires_in    :=getCamposJsonString(RESULTADO_TOKEN, 'expires_in');
         scope         :=getCamposJsonString(RESULTADO_TOKEN, 'scope');
         DM.conecta.ExecSQL('update configuracao_boleto set access_token =:TOKEN, Scope =:SCOPE, expires_in =:EXPIRA, Data_access_token =NOW() where Codigo_Config_Boleto =:BANCO and CodLoja_Boleto =:COD_LOJA', [access_token, scope, StrToInt(expires_in), DM.COD_BANCO, DM.COD_LOJA]);
       end
        else
       begin
         ERRO_ITTAU     :='SIM';
         ArquivoJSON    :='';
         ArquivoJSON    := RESULTADO_TOKEN;
         sCAMINHGO_EXE  := (ExtractFilePath(ParamStr(0)) +'Boletos\LogsWebservice\');
         System.AssignFile(newFile, sCAMINHGO_EXE + Trim(sNOSSO_NUMERO_ITAU +'_erro_retorno_itau') + '.json');
         System.Rewrite(newFile);
         WriteLn(newFile, ArquivoJSON);
         System.CloseFile(newFile);
       end;
     end
     else
     begin
       access_token  :='';
       access_token  :=DM.conecta.ExecSQLScalar('select IFNULL(access_token, "") AS token from configuracao_boleto where Codigo_Config_Boleto =:BANCO and CodLoja_Boleto =:COD_LOJA', [DM.COD_BANCO, DM.COD_LOJA]);
     end;

     if access_token <> '' then
     begin
        AResponseContent := TStringStream.Create('');
        JsonToSend := TStringStream.Create(JSON_BOLETO, TEncoding.UTF8);
        with SSL.SSLOptions do
        begin
          CertFile     := ExtractFilePath(ParamStr(0)) +'Boletos\Certificado\Itau\ARQUIVO_CERTIFICADO.crt';
          KeyFile      := ExtractFilePath(ParamStr(0)) +'Boletos\Certificado\Itau\ARQUIVO_CHAVE_PRIVADA.key';
          Mode         :=sslmUnassigned;
          Method       :=sslvSSLv23;
          SSLVersions  :=[sslvSSLv23];
        end;

        URL  :='está url está no portal do developers itau';
        with HttpClient do
        begin
           IOHandler :=IOHandler;
           Request.Clear;
           Request.CharSet := 'utf-8';
           Request.Accept := '*/*';
           Request.AcceptEncoding := 'gzip, deflate, br';
           Request.ContentType := 'application/json';
           Request.CustomHeaders.Values['Authorization'] :='Bearer '+access_token;
           Request.CustomHeaders.Values['x-itau-apikey'] :=DM.SQL_busca_contaClientID.AsString;
           Request.CustomHeaders.Values['x-itau-flowID'] :=DM.SQL_busca_contaClientID.AsString + 'd7';
           Request.CustomHeaders.Values['x-itau-correlationID'] := DM.SQL_busca_contaClientSecret.AsString;
           Request.UserAgent :='Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618)';
           HandleRedirects := True;
           HTTPOptions := [hoKeepOrigProtocol, hoInProcessAuth];
        end;

        try
          RESULTADO_BOLETO   :='';
          RESULTADO_BOLETO   :=HttpClient.Post(URL, JsontoSend);
         except
          on E: Exception do
          begin
            ERRO_ITTAU       :='SIM';
            RESULTADO_BOLETO :=HttpClient.ResponseText;
            ArquivoJSON      :='';
            ArquivoJSON      := RESULTADO_BOLETO;
            sCAMINHGO_EXE    := (ExtractFilePath(ParamStr(0)) +'Boletos\LogsWebservice\');
            System.AssignFile(newFile, sCAMINHGO_EXE + Trim(sNOSSO_NUMERO_ITAU +'_erro_retorno_itau') + '.json');
            System.Rewrite(newFile);
            WriteLn(newFile, ArquivoJSON);
            System.CloseFile(newFile);
          end
        end;

        if HttpClient.ResponseCode = 200 then
        begin
           ArquivoJSON      :='';
           ArquivoJSON      := RESULTADO_BOLETO;
           sCAMINHGO_EXE    := (ExtractFilePath(ParamStr(0)) +'Boletos\LogsWebservice\');
           System.AssignFile(newFile, sCAMINHGO_EXE + Trim(sNOSSO_NUMERO_ITAU +'_retorno_itau') + '.json');
           System.Rewrite(newFile);
           WriteLn(newFile, ArquivoJSON);
           System.CloseFile(newFile);

           TextoOriginal    :='';
           valorTexto       :='';
           TextoOriginal    := RESULTADO_BOLETO;
           valorTexto       := Copy(TextoOriginal , Pos('numero_linha_digitavel', TextoOriginal) + 26, Length(TextoOriginal));
           LINHA_DIGITAVEL  :='';
           LINHA_DIGITAVEL  := Copy(valorTexto,1, 47);

           TextoOriginal    :='';
           valorTexto       :='';
           TextoOriginal    := RESULTADO_BOLETO;
           valorTexto       := Copy(TextoOriginal , Pos('codigo_barras', TextoOriginal) + 17, Length(TextoOriginal));
           COD_BARRA_BOLETO := '';
           COD_BARRA_BOLETO := Copy(valorTexto,1, 44);

           XMLTemporario.Append;
           XMLTemporarioNossoNumero.AsString     :=LINHA_DIGITAVEL;
            if Length(OnlyNumber(LINHA_DIGITAVEL)) = 47 then
           begin
             XMLTemporarioStatus.AsString        :='OK';
             XMLTemporarioObs.AsString           :='Boleto Registrado com Sucesso';
           end
           else
           begin
             ERRO_ITTAU                          :='SIM';
             XMLTemporarioStatus.AsString        :='ERRO';
             XMLTemporarioObs.AsString           :='Erro ao Registrar Boleto via API';
           end;
           XMLTemporarioNumeroDocumento.AsString :=NR_DOCUMENTO;
           XMLTemporarioParcela.AsInteger        :=NR_PARCELA;
           XMLTemporario.Post;
           XMLTemporario.Close;
           XMLTemporario.Open;
        end
        else
        begin
          ERRO_ITTAU       :='SIM';
          ArquivoJSON      :='';
          ArquivoJSON      := HttpClient.ResponseText;
          sCAMINHGO_EXE    := (ExtractFilePath(ParamStr(0)) +'Boletos\LogsWebservice\');
          System.AssignFile(newFile, sCAMINHGO_EXE + Trim(sNOSSO_NUMERO_ITAU +'_erro_retorno_itau') + '.json');
          System.Rewrite(newFile);
          WriteLn(newFile, ArquivoJSON);
          System.CloseFile(newFile);
        end;
     end;
   finally
     FreeAndNil(HttpClient);
     FreeAndNil(SSL);
   end;
end;
 

Editado por JHONLENON
  • Curtir 1
  • Este tópico foi criado há 445 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.