Ir para conteúdo
  • Cadastre-se

Douglas Conceição

Membros
  • Total de ítens

    50
  • Registro em

  • Última visita

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

Douglas Conceição's Achievements

  1. 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.
  2. 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.
  3. 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.
  4. @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é.
  5. 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.
  6. No create do seu formulario, colocou este codigo? Chromium1.CreateBrowser(CEFWindowParent1);
  7. Voce instalou a biblioteca do CEF4Delphi ? Aqui no meu quando coloquei este comando que me passou, verifiquei que fica na unit uCEFInterfaces.
  8. 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.
  9. 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.
  10. 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...
  11. ACBrBoleto.pas ACBrBoletoWS.Rest.OAuth.pas ACBrBoletoWS.Rest.pas
  12. 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;
  13. 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.
  14. 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.
×
×
  • 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.