Ir para conteúdo
  • Cadastre-se

dev botao

ACBrBoleto - Arquivo CRT e Arquivo PEM (Banco Sicoob)


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

Recommended Posts

Postado

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.

Postado (editado)

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;
Editado por Douglas Conceição
Postado

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 ?

Postado
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.

Postado
14 horas atrás, Douglas Conceição disse:

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.

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 

Postado (editado)
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.

Editado por Douglas Conceição
  • 4 semanas depois ...
Postado

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;	

 

  • Consultores
Postado

Bom dia @Douglas Conceição,

Se possível anexe os arquivos alterados, assim conseguimos avaliar corretamente as alterações realizadas.

Obrigado.

Consultor SAC ACBr

Alexandre de Paula
Ajude o Projeto ACBr crescer - Assine o SAC                    

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  ícone Discórdia Discord   

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

 

  • Consultores
Postado

Criada a TK-4308 para avaliar a contribuição.

Obrigado.

  • Curtir 1
Consultor SAC ACBr

Alexandre de Paula
Ajude o Projeto ACBr crescer - Assine o SAC                    

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  ícone Discórdia Discord   

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

 

  • 3 semanas depois ...
  • Consultores
  • Solution
Postado

Por favor atualize seus fontes, pelo SVN do ACBr... 

Já subimos para o nosso repositório de fontes, modificações que podem corrigir algum dos itens referentes a esse tópico...

Por favor atualize seus fontes, faça testes, e se possível comente em uma nova resposta, se o problema foi resolvido...

Dúvidas, sobre o uso do SVN ?  Clique aqui e veja um vídeo

  • Curtir 1
Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

  • 3 semanas depois ...
  • Consultores
Postado

@Idea Sistemas Sistemas
Este post é sobre outro tema , de armazenamento de arquivos. qdo o problema nao for relacionado, vc pode criar um topico novo.
Só um lembrete, o santander API foi uma contribuição pois não temos certificado, mas os usuários que o fizeram, citaram que é necessário criar o workspace uma única vez, seguindo o manual.

 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Este tópico foi criado há 435 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.

The popup will be closed in 10 segundos...