Ir para conteúdo
  • Cadastre-se

PROSIS Informática Ijuí RS

Membros
  • Total de ítens

    3
  • Registro em

  • Última visita

Posts postados por PROSIS Informática Ijuí RS

  1. Em 27/12/2017 at 14:39, Jeihcio Francis disse:

    Eu acabei resolvendo o problema que mencionei acima da seguinte forma: 

     

    Configurações do componente:

     

    If ( Obj.Modelo = A3 ) Then
             Begin
                If FConsultar Then
                   AACBreSocial.Configuracoes.Geral.SSLLib := libCapicom
                Else
                   AACBreSocial.Configuracoes.Geral.SSLLib := libCustom;

                AACBreSocial.Configuracoes.Geral.SSLXmlSignLib := xsNone;
                AACBreSocial.Configuracoes.Certificados.NumeroSerie := Obj.NumeroSerie;
                AACBreSocial.SSL.CarregarCertificado;
             End;

     

    Obs: Eu sei que por default o 'SSLXmlSignLib' vem 'xsNone', mas eu quis deixar explicitamente no código do meu controller que é obrigatório setar esse valor no atributo. 

     

    Depois e antes de enviar eu faço:

     

    { Assinatura digital }
    ACBreSocial1.AssinarEventos;

    { Enviar dados ao webservice }
    ACBreSocial1.Configuracoes.Geral.SSLXmlSignLib := xsXmlSec;
    ACBreSocial1.Enviar(getTipoGrupo(nTabela));

     

    Antes de enviar é obrigatório setar 'xsXmlSec'  para a propriedade 'SSLXmlSignLib', pois no método 'Enviar' da classe 'TACBreSocial' que fica dentro do arquivo 'ACBReSocial' existe a seguinte verificação: 

     

    if SSL.SSLXmlSignLib <> xsXmlSec then
        raise EACBreSocialException.Create('Necessário DigestMethod Algorithm = sha256 -> SSLLib = libOpenSSL'); 

     

    Essas configurações eu fiz no meu código da minha aplicação, já no componente da ACBR tive que fazer as seguintes alterações no arquivo 'ACBrDFeSSL':

     

    Método 'Assinar' da classe 'TDFeSSLXmlSignClass':

     

    function TDFeSSLXmlSignClass.Assinar(const ConteudoXML, docElement,
      infElement: String; SignatureNode: String; SelectionNamespaces: String;
      IdSignature: String; IdAttr: String): String;
    var
      xml: PAnsiChar;
    begin
       FpDFeSSL.SSLCryptLib := cryCapicom;

       xml := PAnsiChar(AnsiString(ConteudoXML));
       TESocialSignature.SignSHA256Ansi(xml, PAnsiChar(AnsiString(infElement)),
                                             PAnsiChar(AnsiString(FpDFeSSL.NumeroSerie)),
                                             PAnsiChar(AnsiString(FpDFeSSL.Senha)));
       Result := string(AnsiString(xml));
    end;

     

    e no método 'Validar' dessa mesma classe:

     

    function TDFeSSLXmlSignClass.Validar(const ConteudoXML, ArqSchema: String; out
      MsgErro: String): Boolean;
    var
      DFeSSL: TDFeSSL;
    begin
       DFeSSL := TDFeSSL.Create;
       Try
          DFeSSL.SetSSLXmlSignLib(xsXmlSec);
          Result := DFeSSL.Validar(ConteudoXML, ArqSchema, MsgErro);
       Finally
          DFeSSL.Free;
       End;
    end;

     

    Essas foram as unicas alterações que fiz para resolver o problema....

    deixei exataente assim e está dando "metodo Enviar não implementado em TDFeSSLHttpClass"
    Aconteceu isso pra alguem?

×
×
  • 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...