-
Total de ítens
50 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Posts postados por Douglas Conceição
-
-
2 horas atrás, Victor H. Gonzales - Panda disse:
Anexa a unit aqui no topico, envie os dados para consulta para testes para [email protected] e vincule no corpo esse topico.
Sobre os dados para consulta, teria outra solução para resolver isto, nao consegui autorização para disponibilizar o cpf do cliente para testes... estou sem meios para mostrar, posso tirar uma print e ocutar os dados e mandar para voces.
-
Bom dia, estou com um probleminha na consulta de CPF. Pela primeira vez em nosso sistema apareceu um cliente na consulta que possui dois nomes, Nome Social e Nome Civil. Consultando no site, ira aparece os dois nomes, então tivemos que fazer algumas alterações para funcionar no nosso programinha e gostariam que voces adicionassem este codigo ao acbr ou se tivessem outra solução para este caso.
Abaixo esta o codigo que gostaria que adicionasse:FNome := LerCampo(Resposta,'Nome:'); if trim(FNome) = '' then FNome := LerCampo(Resposta,'Nome Civil:'); AcbrConsultaCPF.pas
E mais em baixo, esta o jeito que retorna no arquivo, um cliente com dois nomes...
Aguardo retorno, qualquer coisa estou a disposição para informar mais algo caso precise.
-
21 horas atrás, DouglasDll disse:
Boa tarde.. uma duvida...
Conseguimos acompanhar o andamento desse ticket interno?
De uma olhada nos comentários acima, as vezes algum resolve seu problema, postei um projeto de teste também, mudando a forma de como funciona, caso se interesse.
-
@wilmar Ta na mão o exemplo.
https://drive.google.com/file/d/1IB_Z5G2hn0Cr4ffgBhuowj7sedQimqbO/view?usp=sharing
Ele só ta meio feio, mas como é exemplo da para vc ter uma base para implementar no seu projeto né.- 1
-
3 horas atrás, wilmar disse:
Douglas por favor ver o que estou fazendo errado rs
O que esta faltando é o codigo que inicializa ele, voce ira colocar o codigo na raiz do projeto, na view source, abaixo como é para ficar...
program Teste; uses Vcl.Forms, uTInject.ConfigCEF, UConsulta in 'UConsulta.pas' {FConsulta}; {$R *.res} begin If not GlobalCEFApp.StartMainProcess then Exit; Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TFConsulta, FConsulta); Application.Run; end.
E esta faltando algumas dll tambem do CEF, irei disponibilizar a dll, coloque junto com o exe do projeto.
https://drive.google.com/file/d/1m4Wa69JqdMc1CkiY6gEVogoksj_KbDkH/view?usp=sharing
Ah, e sobre sua função de retornar dados, é de outro jeito, nao acho que deste jeito de certo. -
43 minutos atrás, wilmar disse:
Fiz tudo certo mas não entra no evento Chromium1AfterCreated nem no Chromium1LoadEnd
o que fiz de erradoNo create do seu formulario, colocou este codigo?
Chromium1.CreateBrowser(CEFWindowParent1);
-
30 minutos atrás, wilmar disse:
Douglas estou com esse erro no Chromium identificador não declarado: 'ICefBrowser',
sabe me informa qual unit declarar. Meu delphi rioVoce instalou a biblioteca do CEF4Delphi ?
Aqui no meu quando coloquei este comando que me passou, verifiquei que fica na unit uCEFInterfaces. -
4 minutos atrás, Sandro Felipe Adad disse:
So que deixe essa tela redimensionavel, acabo de pegar um captcha diferente retornado pela receita.
Como é o deploy do projeto chromium, o que precisa ser distribuido junto a aplicação delphi?
Na verdade, testamos com todos os tamanhos e encaixou certinho, como a tela ficou pequena acredito que ele identifica achando que é um celular e redmensiona ela conforme, sobre os arquivos nao sei ao certo pois nao precisamos de um para rodar, porque ja usamos um recurso de mensagens automaticas de whatsapp em nosso programa e ele usa o Chromium, o arquivo que ele solicitada era o CEF4Bin, que vinha junto com a instalação deste programa, mas acredito que todas as dll que o chromium precisa esta nele mesmo.
https://github.com/salvadordf/CEF4Delphi
Talvez este arquivo resolva, nao sei se é igual ao que tenho aqui, ate enviaria mas ele zipado é acima do limite de arquivo que da para enviar por aqui.- 1
-
4 minutos atrás, wilmar disse:
Boa tarde!! ficou top!! mas onde vai esse código, onde colocar o link
No evento ChromiumLoadEnd do componente, e o link vai no evento AfterCreated...
No Create do Form vc cria o Chromium...
Chromium1.CreateBrowser(CEFWindowParent1);
E no afterCreated faz o seguinte...
procedure Chromium1AfterCreated(Sender: TObject;const browser: ICefBrowser); begin inherited; ///PostMessage(Handle, CEF_AFTERCREATED, 0, 0); Chromium1.LoadURL('https://solucoes.receita.fazenda.gov.br/Servicos/cnpjreva/Cnpjreva_Solicitacao.asp?cnpj=' +cxMaskEditCPF.Text); end;
Foi pego os dados do html, igual o amigo do projeto mais acima.- 2
-
Boa Tarde, nos aqui da minha empresa conseguimos contornar o problema de uma forma diferente, nao tem como eu mandar o projeto pois ja esta dentro do nosso projeto oficial, nao por fora. Mas irei passar os códigos que usamos.
Resumindo, usamos o TChromiun e conectamos na pagina diretamente, porem para ficar visivelmente mais bonito, colocamos um codigo para retirar da pagina tudo que não é preciso.if frame.IsMain then begin // remove elemento Chromium1.Browser.MainFrame.ExecuteJavaScript('document.getElementById("barra-brasil").remove();', '', 0); // remove elemento Chromium1.Browser.MainFrame.ExecuteJavaScript( 'var elementos = document.getElementsByTagName("' + 'header' + '");' + 'for (var i = elementos.length - 1; i >= 0; i--) {' + ' elementos[i].parentNode.removeChild(elementos[i]);' + '}', '', 0 ); // remove elemento Chromium1.Browser.MainFrame.ExecuteJavaScript( 'var elementos = document.getElementsByTagName("' + 'ul' + '");' + 'for (var i = elementos.length - 1; i >= 0; i--) {' + ' elementos[i].parentNode.removeChild(elementos[i]);' + '}', '', 0 ); // remove elemento Chromium1.Browser.MainFrame.ExecuteJavaScript( 'var elementos = document.getElementsByClassName("' + 'footer-wrapper' + '");' + 'for (var i = elementos.length - 1; i >= 0; i--) {' + ' elementos[i].parentNode.removeChild(elementos[i]);' + '}', '', 0 ); // ajuste css do elemento Chromium1.Browser.MainFrame.ExecuteJavaScript( 'var elementos = document.getElementsByClassName("' + 'col-md-8 form-group' + '");' + 'for (var i = elementos.length - 1; i >= 0; i--) {' + ' elementos[i].className = "col-md-10 form-group";' + '}', '', 0 ); // remove elemento JavaScriptAux := 'var divElement = document.querySelector(".col-md-12");' + 'if (divElement) {' + ' var h4Element = divElement.querySelector("h4");' + ' if (h4Element) {' + ' h4Element.remove();' + ' }' + ' var pElements = divElement.querySelectorAll("p");' + ' if (pElements.length > 0) {' + ' pElements[0].remove();' + ' }' + '}'; Chromium1.Browser.MainFrame.ExecuteJavaScript(JavaScriptAux, '', 0); JavaScriptAux := 'var bodyElement = document.body;' + 'if (bodyElement) {' + ' bodyElement.style.paddingTop = "30px";' + // Substitua "10px" pelo valor desejado '}'; // Execute o código JavaScript no TChromium Chromium1.Browser.MainFrame.ExecuteJavaScript(JavaScriptAux, '', 0); // bloqueia edicao do cnpj Chromium1.Browser.MainFrame.ExecuteJavaScript( 'document.getElementById("' + 'cnpj' + '").readOnly = true;' , '', 0 ); // remove elemento Chromium1.Browser.MainFrame.ExecuteJavaScript( 'var elementos = document.getElementsByClassName("' + 'btn btn-secondary' + '");' + 'for (var i = elementos.length - 1; i >= 0; i--) {' + ' elementos[i].parentNode.removeChild(elementos[i]);' + '}', '', 0 ); CEFWindowParent1.Visible := true; // lê o html da pagina e obtem o dados if (Chromium1.Browser.MainFrame.Url = 'https://solucoes.receita.fazenda.gov.br/Servicos/cnpjreva/Cnpjreva_Comprovante.asp') then begin Chromium1.RetrieveHTML(); Pesquisou := true; PanelNavegador.Visible := false; end; end; ------------- Chromium1LoadEnd
Abaixo uma imagem de como ficou...
- 2
-
47 minutos atrás, Alexandre de Paula disse:
Bom dia @Douglas Conceição,
Se possível anexe os arquivos alterados, assim conseguimos avaliar corretamente as alterações realizadas.
Obrigado.
ACBrBoleto.pas ACBrBoletoWS.Rest.OAuth.pas ACBrBoletoWS.Rest.pas
- 1
-
Bom dia, aqui estão as alterações necessárias que eu fiz para funcionar do método que passa o texto dos arquivos diretamente, ao invés de passar o local do arquivo.
//ACBrBoleto.pas // adicionado essas properties property Certificado: AnsiString read FCertificado write SetCertificado; property ChavePrivada: AnsiString read FChavePrivada write SetChavePrivada; ... procedure TACBrWebService.SetCertificado(const Value: AnsiString); begin FCertificado := Value; FArquivoCRT := EmptyStr; end; procedure TACBrWebService.SetChavePrivada(const Value: AnsiString); begin FChavePrivada := Value; FArquivoKEY := EmptyStr; end; // ao usar, passar direto o conteúdo do certificado ao invés do arquivo. // WebService.ArquivoCRT := 'C:\douglas\Boleto\Sicoob\SicoobCertificado.pem'; // WebService.ArquivoKEY := 'C:\douglas\Boleto\Sicoob\SicoobChavePrivada.key'; WebService.Certificado := MemoCertificado.Lines.Text; WebService.ChavePrivada := MemoKey.Lines.Text; // ACBrBoletoWS.Rest.pas uses ACBrOpenSSLUtils; // modificado a função de definir o certificado. procedure TBoletoWSREST.DefinirCertificado; begin BoletoWS.ArquivoCRT := Boleto.Configuracoes.WebService.ArquivoCRT; BoletoWS.ArquivoKEY := Boleto.Configuracoes.WebService.ArquivoKEY; // Adicionando a chave privada if NaoEstaVazio(BoletoWS.ChavePrivada) then begin if StringIsPEM(BoletoWS.ChavePrivada) then HTTPSend.Sock.SSL.PrivateKey := ConvertPEMToASN1(BoletoWS.ChavePrivada) else HTTPSend.Sock.SSL.PrivateKey := BoletoWS.ChavePrivada; end else if NaoEstaVazio(BoletoWS.ArquivoKEY) then HttpSend.Sock.SSL.PrivateKeyFile := BoletoWS.ArquivoKEY; // Adicionar o certificado if NaoEstaVazio(BoletoWS.Certificado) then begin if StringIsPEM(BoletoWS.Certificado) then HTTPSend.Sock.SSL.Certificate := ConvertPEMToASN1(BoletoWS.Certificado) else HTTPSend.Sock.SSL.Certificate := BoletoWS.Certificado; end else if NaoEstaVazio(BoletoWS.ArquivoCRT) then HTTPSend.Sock.SSL.CertificateFile := BoletoWS.ArquivoCRT; end; // ACBrBoletoWS.Rest.OAuth.pas uses ACBrOpenSSLUtils; // modificado o create para ler o certificado constructor TOAuth.Create(ASSL: THTTPSend; AACBrBoleto : TACBrBoleto = nil ); begin if Assigned(ASSL) then FHTTPSend := ASSL; FACBrBoleto := AACBrBoleto; // adiciona a chave privada if NaoEstaVazio(AACBrBoleto.Configuracoes.WebService.ChavePrivada) then begin if StringIsPEM(AACBrBoleto.Configuracoes.WebService.ChavePrivada) then FHTTPSend.Sock.SSL.PrivateKey := ConvertPEMToASN1(AACBrBoleto.Configuracoes.WebService.ChavePrivada) else FHTTPSend.Sock.SSL.PrivateKey := AACBrBoleto.Configuracoes.WebService.ChavePrivada; end else if NaoEstaVazio(AACBrBoleto.Configuracoes.WebService.ArquivoKEY) then FHTTPSend.Sock.SSL.PrivateKeyFile := AACBrBoleto.Configuracoes.WebService.ArquivoKEY; // adiciona o certificado if NaoEstaVazio(AACBrBoleto.Configuracoes.WebService.Certificado) then begin if StringIsPEM(AACBrBoleto.Configuracoes.WebService.Certificado) then FHTTPSend.Sock.SSL.Certificate := ConvertPEMToASN1(AACBrBoleto.Configuracoes.WebService.Certificado) else FHTTPSend.Sock.SSL.Certificate := AACBrBoleto.Configuracoes.WebService.Certificado; end else if NaoEstaVazio(AACBrBoleto.Configuracoes.WebService.ArquivoCRT) then FHTTPSend.Sock.SSL.CertificateFile := AACBrBoleto.Configuracoes.WebService.ArquivoCRT; FAmbiente := AACBrBoleto.Configuracoes.WebService.Ambiente; FClientID := AACBrBoleto.Cedente.CedenteWS.ClientID; FClientSecret := AACBrBoleto.Cedente.CedenteWS.ClientSecret; FScope := AACBrBoleto.Cedente.CedenteWS.Scope; FURL := ''; FContentType := ''; FGrantType := ''; FToken := ''; FExpire := 0; FErroComunicacao := ''; FPayload := False; FAuthorizationType := atBearer; end;
-
9 minutos atrás, FSoftware disse:
Opa, obrigado, também achei outra solução, para alimentar o componente eu salvou o conteúdo do meu Field ,onde esta meu certificado no BD, em uma StringList e dou um SaveToFile e passo o caminho onde salvei esse arquivo
Assim, vc fica criando o arquivo toda vez que for usar ele né, é uma alternativa mesmo, a que vou postar mexe só nos fontes do acbr e funciona, vamos vê se eles vão alterar, até a tarde eu posto.
-
57 minutos atrás, FSoftware disse:
No meu caso tambem gostaria de guardar o certificado no banco e utiliza-lo alimentando o componente, e sou estou conseguindo passando o caminho onde esta o arquivo, Alguem poderia ajudar como solucionar ?
Opa amigo, eu consegui só que tive que alterar nos fontes do acordo, amanhã eu monto um esquema e posto aqui para ver se eles atualizam para todo mundo ou vc mesmo vai lá e muda.
-
Exemplo de como eu uso no pix e funciona da maneira que eu gostaria que funcionasse no boleto:
ACBrPSPSicoob1.ChavePrivada := FieldByName('privatekeypixsicoob').AsAnsiString; ACBrPSPSicoob1.Certificado := FieldByName('certificadopixsicoob').AsAnsiString;
-
Boa Tarde! Estou fazendo a integração do ACBrBoleto para o banco Sicoob e estou passando por um problema, a questão é a seguinte..
Consegui fazer o ACBrBoleto Exemplo funcionar perfeitamente, porem para colocar em meu sistema eu precisava que uma parte fosse diferente, em relação a validação que o Sicoob exige, que é o certificado.
No exemplo acbr é passado da seguinte forma:
WebService.ArquivoCRT := 'C:\douglas\Boleto\Sicoob\SicoobCertificado.pem'; WebService.ArquivoKEY := 'C:\douglas\Boleto\Sicoob\SicoobChavePrivada.key';
Entretanto, ao invés de passar o caminho do arquivo, eu gostaria de passar o conteúdo do arquivo, pois eu tenho o conteúdo salvo em meu banco de dados, assim nao precisando do arquivo. Eu ja realizo isso pelo ACBrPix, pois la tem uma propriedade que recebe deste jeito, porem aqui no boleto nao achei esta opção de passar diretamente.
Como eu queria passar:
WebService.ArquivoCRT := '-----BEGIN CERTIFICATE-----' + 'MIIHPTCCBSWgAwIBAgIIMD8iBARHZXwwDQYJKoZIhvcNAQELBQAwWTELMAkGA1UE' ... + 'WHKi5RGWwQdjo9vXRTB4cTsnrbenvNrivJPAShPXQjbm' + '-----END CERTIFICATE-----'; WebService.ArquivoKEY := '-----BEGIN RSA PRIVATE KEY-----' + 'MIIEowIBAAKCAQEAgMDt48BLEuk/+gDX+PugSWMwxpK87SImir4n3a2A75FOvZkm' ... + 'sSlkF0VJ3sXN/tpQf3c3kQFvKBmlbcsMG8s58GPkpuNAzUrod2Vk' + '-----END RSA PRIVATE KEY-----';
Adentrando mais o codigo, encontrei o metodo que faz esta validação que é o define certificado:
procedure TBoletoWSREST.DefinirCertificado; begin BoletoWS.ArquivoCRT := Boleto.Configuracoes.WebService.ArquivoCRT; BoletoWS.ArquivoKEY := Boleto.Configuracoes.WebService.ArquivoKEY; // Adicionando o Certificado if NaoEstaVazio(BoletoWS.ArquivoCRT) then HTTPSend.Sock.SSL.CertificateFile := BoletoWS.ArquivoCRT; if NaoEstaVazio(BoletoWS.ArquivoKEY) then HTTPSend.Sock.SSL.PrivateKeyFile := BoletoWS.ArquivoKEY; { if NaoEstaVazio(BoletoWS.ArquivoCRT) then HTTPSend.Sock.SSL.Certificate := BoletoWS.ArquivoCRT; if NaoEstaVazio(BoletoWS.ArquivoKEY) then HTTPSend.Sock.SSL.PrivateKey := BoletoWS.ArquivoKEY; Metodo que achei mas nao consegui fazer funcionar } end;
Tentei utilizar trocando o CertificateFile por apenas Certificate, porem nao consegui fazer funcionar. Gostaria de saber se alguem ja passou por um problema parecido ou se tem algum outro metodo de fazer o que eu quero, que é passar estes dados por string e nao colocando o caminho do arquivo.
Agradeço a ajuda. -
23 minutos atrás, Douglas Conceição disse:
Boa Tarde, gostaria de uma ajuda com um erro. Estou tentando passar os dados do projeto NFSex da ACBr, para a emissão de NFSe do meu sistema, porem estou com um erro que não consegui descobrir o que pode ser.
No exemplo do ACBr eu consegui emitir normalmente, vou deixar em baixo linkado o xml de envio do Exemplo e de meu programa, e o arquivo de retorno dos dois.
Para deixar mais explicito o erro, irei linkar abaixo.GerarNfseResposta xmlns="http://megasoftarrecadanet.com.br/xsd/nfse_v01.xsd"> <ListaMensagemRetorno> <MensagemRetorno> <Codigo>L000</Codigo> <Mensagem>Economico não encontrado</Mensagem> </MensagemRetorno> </ListaMensagemRetorno> </GerarNfseResposta>
GerarNfseEnvio_ExemploACBr.xml 4.61 kB · 0 downloads GerarNfseEnvio_MeuPrograma.xml 4.61 kB · 0 downloads GerarNfseResposta_ExemploACBr.xml 2.13 kB · 0 downloads GerarNfseResposta_MeuPrograma.xml 245 B · 0 downloads
Descobri o motivo do erro, é simplismente porque o cnpj estava de outra empresa!
-
Boa Tarde, gostaria de uma ajuda com um erro. Estou tentando passar os dados do projeto NFSex da ACBr, para a emissão de NFSe do meu sistema, porem estou com um erro que não consegui descobrir o que pode ser.
No exemplo do ACBr eu consegui emitir normalmente, vou deixar em baixo linkado o xml de envio do Exemplo e de meu programa, e o arquivo de retorno dos dois.
Para deixar mais explicito o erro, irei linkar abaixo.GerarNfseResposta xmlns="http://megasoftarrecadanet.com.br/xsd/nfse_v01.xsd"> <ListaMensagemRetorno> <MensagemRetorno> <Codigo>L000</Codigo> <Mensagem>Economico não encontrado</Mensagem> </MensagemRetorno> </ListaMensagemRetorno> </GerarNfseResposta>
GerarNfseEnvio_ExemploACBr.xml GerarNfseEnvio_MeuPrograma.xml GerarNfseResposta_ExemploACBr.xml GerarNfseResposta_MeuPrograma.xml
-
59 minutos atrás, Daniel InfoCotidiano disse:
Mas não seria uma boa prática enviar todos os dados?
Se você enviar uma instrução de protesto não vai ser rejeitado a instrução por falta de dados?
Como vão notificar o protesto sem os dados ?Realmente, então suponho que seja melhor adicionar uma validação de campos obrigatórios ao invés de tratar o erro na linha que marquei.
É melhor assim para os dados completos, e que se estiver sem não vai acontecer um erro e não informar nada, como esta acontecendo hj. -
Boa Tarde, gostaria de fazer uma sugestão. Segue o código abaixo:
try JsonDadosPagador.Add('tipoInscricao').Value.AsInteger := StrToInt(IfThen(Length( OnlyNumber(ATitulo.Sacado.CNPJCPF)) = 11,'1','2')); JsonDadosPagador.Add('numeroInscricao').Value.AsNumber := StrToInt64(OnlyNumber(ATitulo.Sacado.CNPJCPF)); JsonDadosPagador.Add('nome').Value.AsString := ATitulo.Sacado.NomeSacado; JsonDadosPagador.Add('endereco').Value.AsString := ATitulo.Sacado.Logradouro + ' ' + ATitulo.Sacado.Numero; JsonDadosPagador.Add('cep').Value.AsInteger := StrToInt(OnlyNumber(ATitulo.Sacado.CEP)); //ERRO AQUI JsonDadosPagador.Add('cidade').Value.AsString := ATitulo.Sacado.Cidade; JsonDadosPagador.Add('bairro').Value.AsString := ATitulo.Sacado.Bairro; JsonDadosPagador.Add('uf').Value.AsString := ATitulo.Sacado.UF; //JsonDadosPagador.Add('telefone').Value.AsString := JsonPairPagador := TJsonPair.Create(AJson, 'pagador'); try JsonPairPagador.Value.AsObject := JsonDadosPagador; AJson.Add('pagador').Assign(JsonPairPagador); finally JsonPairPagador.Free; end; finally JsonDadosPagador.Free; end;
Eu estava verificando a documentação do Banco do Brasil, e na integração com boleto, os unicos campos obrigatórios para o preenchimento da parte do Pagador são:
tipoInscricao e numeroInscricao.
Quando fui realizar um teste onde o pagador não tem CEP, deu um erro na linha acima, na unit ACBrBoletoW_BancoBrasil_API, pois esta convertendo uma string vazia para um inteiro.
Se puder adicionar uma validação, fico agradecido, que ai não precisa de colocar CEP obrigatório, já que para o Banco do Brasil não é, n sei para os outros bancos ainda. -
Cara, me ajudou muito. Já tinha feito a integração quase toda na mão, mas o que vale é a experiência, obrigado!
-
1 minuto atrás, Juliomar Marchetti disse:
Mas porque se tem o ACBrBoleto e o mesmo já faz isso pra ti!
Acbr boleto nao faz o que eu quero, que é enviar imediatamente o boleto, fazer as consultas da situação de como esta, identificar que ja esta pago, tipo como o NFE funciona, ou faz e eu nao to sabendo ?
-
Bom dia, estou tentando fazer uma integração de boleto com o Banco do Brasil, usando o RestRequest, quando eu faço o POST pelo POSTMAN, vai tudo 100%, porem quando eu tento colocar em meu projeto delphi, da Bad Request.
Os parâmetros que eu tenho que passar sao:
- URL
Header
- Authorization
- Content_type
- Content_lenght
- Host
Body
- Grand_Type
- Scope
Passando somente estes, no POSTMAN funciona. porem em meu código não vai, irei deixar uma imagem do POSTMAN e meu código como exemplo, se puderem me ajudar, muito agradecido.
procedure TFRMFI056A.GeraToken; var AuthHeaderValue: String; ClientId, ClientSecret: String; Content: TStringStream; ContentLength: string; RequestBody: TStringStream; begin ClientId := BaGeralModel.Clientidpixbb; ClientSecret := BaGeralModel.Clientsecretpixbb; try RESTClient4.BaseURL := 'https://oauth.hm.bb.com.br/oauth/token'; AuthHeaderValue := 'Basic xxxxCodigoBasicAquixxxx; RESTRequest4.Params.AddHeader('Authorization', AuthHeaderValue); RESTRequest4.Params.ParameterByName('Authorization').Options := [poDoNotEncode]; RequestBody := TStringStream.Create('grant_type=client_credentials&scope=cobrancas.boletos-requisicao+cobrancas.boletos-info'); RESTRequest4.ClearBody; RESTRequest4.AddBody(RequestBody, TRESTContentType.ctAPPLICATION_X_WWW_FORM_URLENCODED); RESTRequest4.Params.AddHeader('Content-Type', 'application/x-www-form-urlencoded'); ContentLength := IntToStr(RequestBody.Size); RESTRequest4.Params.AddHeader('Content-Length', ContentLength); // Adicionar Host ao cabeçalho RESTRequest4.Params.AddHeader('Host', 'oauth.hm.bb.com.br'); try RESTRequest4.Execute; if RESTResponse4.StatusCode = 404 then begin // Exibir o conteúdo da resposta em um Memo ou mostrar uma mensagem de erro Memo1.Lines.Text := RESTResponse4.Content; ShowMessage('Erro 404: O recurso solicitado não foi encontrado.'); end; except on E: Exception do begin // Exibir mensagem de erro genérica Memo1.Lines.Text := RESTResponse4.Content; ShowMessage('Erro ao tentar realizar a solicitação: ' + E.Message); end; end; finally end; end;
-
Bom dia, consegui a solução, na verdade o provedor Megasoft nao tem uma URL de homologação, a URL de produção e de teste sao as mesmas, se ta em homologação ou em produção, é eles que mudam la no site deles, confirmei isso com eles e eles ja mudaram para produção aqui para mim, agora tudo esta funcionando, muito obrigado!
Consulta CPF - Nome civil e social
em ACBrTCP
Postado
ACBrConsultaCPF.pas