6
Componente NfseUtil.DLL Página 1 de 6 Ultima alteração em 18/05/2010 15:53:00 A conexão com os webservices da SEFAZ Salvador é realizada com protocolo SSL 3.0 com autenticação mútua. Este padrão de conexão requer que a autenticação do servidor e do cliente com certificado digital, assim, o cliente ao tentar a conexão deve enviar um certificado digital “atachada” à mensagem para o servidor. Os desenvolvedores que utilizam linguagem de plataforma WIN32 enfrentam uma maior dificuldade para implementar este tipo de conexão em razão da inexistência de suporte nativo para a linguagem utilizada (Delphi 5/6/7, VB 5/6, etc.). O caminho mais curto para acessar os webservices é criar a DLL em uma linguagem que ofereça suporte para conexão SSL com autenticação mútua. Utilizando a DLL NFS-e Util Para utilizar a DLL gerada é necessário o ter o Framework .NET 2.0 (Microsoft .NET Framework Version 2.0 Redistributable Package (x86) ), instalado e prévio registro da DLL no Windows que pode ser realizada da seguinte forma: RegSvcs NFSeUtil.dll /tlb:NFSeUtil.tlb (ou execute registraDLL.bat) O exemplo de uso da DLL foi escrito em Visual Basic 6 e Delphi 7. Para usar a DLL em Visual Basic é necessário adicionar o componente no projeto: 1. Abra um novo projeto; 2. Selecione o menu PROJECT, opção REFERENCES; 3. Localizar o objeto NfseUtil e selecioná-lo; 4. Clicar no botão OK. Para usar a DLL em Delphi é necessário importar a Type Library da DLL NFe_Util.dll: 1. Abra um novo projeto; 2. Selecione a opção IMPORT TYPE LIBRARY do menu PROJECT; 3. Na janela IMPORT TYPE LIBRARY, clique no botão ADD; 4. Procure o arquivo NFe_Util.tlb; 5. Clique no botão CREATE UNIT. Assinando o XML Abaixo o exemplo de código para assinar o XML: Visual Basic: Private Function ValidaXML(txtXML As String, ByRef txtRetorno As String) As Boolean On Error GoTo TrataErro Dim objNFSE As New NfseUtil.Xml Dim stsValida As Boolean 'Canonizar XML txtXML = objNFSE.CanonicalizarXmlString(txtXML) 'Assinar XML txtXML = objNFSE.AssinarXmlString(txtXML, "Rps", "My", "Equipe de Desenvolvimento NFS- e") txtXML = objNFSE.AssinarXmlString(txtXML, "EnviarLoteRpsEnvio", "My", "Equipe de Desenvolvimento NFS-e")

Leia-me.pdf

  • Upload
    vviini

  • View
    116

  • Download
    9

Embed Size (px)

Citation preview

Page 1: Leia-me.pdf

Componente NfseUtil.DLL

Página 1 de 6

Ultima alteração em 18/05/2010 15:53:00

A conexão com os webservices da SEFAZ Salvador é realizada com protocolo SSL 3.0 com autenticação

mútua. Este padrão de conexão requer que a autenticação do servidor e do cliente com certificado

digital, assim, o cliente ao tentar a conexão deve enviar um certificado digital “atachada” à mensagem

para o servidor.

Os desenvolvedores que utilizam linguagem de plataforma WIN32 enfrentam uma maior dificuldade

para implementar este tipo de conexão em razão da inexistência de suporte nativo para a linguagem

utilizada (Delphi 5/6/7, VB 5/6, etc.).

O caminho mais curto para acessar os webservices é criar a DLL em uma linguagem que ofereça suporte

para conexão SSL com autenticação mútua.

Utilizando a DLL NFS-e Util

Para utilizar a DLL gerada é necessário o ter o Framework .NET 2.0 (Microsoft .NET Framework Version

2.0 Redistributable Package (x86)), instalado e prévio registro da DLL no Windows que pode ser

realizada da seguinte forma:

RegSvcs NFSeUtil.dll /tlb:NFSeUtil.tlb (ou execute registraDLL.bat)

O exemplo de uso da DLL foi escrito em Visual Basic 6 e Delphi 7.

Para usar a DLL em Visual Basic é necessário adicionar o componente no projeto:

1. Abra um novo projeto;

2. Selecione o menu PROJECT, opção REFERENCES;

3. Localizar o objeto NfseUtil e selecioná-lo;

4. Clicar no botão OK.

Para usar a DLL em Delphi é necessário importar a Type Library da DLL NFe_Util.dll:

1. Abra um novo projeto;

2. Selecione a opção IMPORT TYPE LIBRARY do menu PROJECT;

3. Na janela IMPORT TYPE LIBRARY, clique no botão ADD;

4. Procure o arquivo NFe_Util.tlb;

5. Clique no botão CREATE UNIT.

Assinando o XML

Abaixo o exemplo de código para assinar o XML:

Visual Basic: Private Function ValidaXML(txtXML As String, ByRef txtRetorno As String) As Boolean On Error GoTo TrataErro Dim objNFSE As New NfseUtil.Xml Dim stsValida As Boolean 'Canonizar XML txtXML = objNFSE.CanonicalizarXmlString(txtXML) 'Assinar XML txtXML = objNFSE.AssinarXmlString(txtXML, "Rps" , "My", "Equipe de Desenvolvimento NFS-e") txtXML = objNFSE.AssinarXmlString(txtXML, "Envi arLoteRpsEnvio", "My", "Equipe de Desenvolvimento NFS-e")

Page 2: Leia-me.pdf

Componente NfseUtil.DLL

Página 2 de 6

Ultima alteração em 18/05/2010 15:53:00

'Validar assinatura XML stsValida = objNFSE.ValidarAssinaturaXmlString( txtXML) If Not stsValida Then txtRetono = "Assinatura inválida." ValidaXML = False Return End If txtRetorno = txtXML ValidaXML = True Exit Function TrataErro: txtRetorno = Err.Description ValidaXML = False End Function

Delphi: function ValidaXML(var txtXML:string; var txtRetorn o:string) : boolean; var objNFSE: IXml; stsValida: Boolean; begin try objNFSE := CoXML.Create; //Canonizar XML txtXML := objNFSE.CanonicalizarXmlString(txtX ML); //Assinar XML txtXML := objNFSE.AssinarXmlString(txtXML, 'R ps', 'My', 'Equipe de Desenvolvimento NFS-e'); txtXML := objNFSE.AssinarXmlString(txtXML, 'E nviarLoteRpsEnvio', 'My', 'Equipe de Desenvolvimento NFS-e'); //Validar assinatura XML stsValida := objNFSE.ValidarAssinaturaXmlStri ng(txtXML); if not stsValida then begin txtRetorno := 'Assinatura inválida.'; ValidaXML := False; exit; end; txtRetorno := txtXML; ValidaXML := True; except on e : Exception do begin ValidaXML := False; txtRetorno := e.Message; end; end; end;

O XML antes de ser assinado deve passar pelo método CanonicalizarXmlString para formatá-lo

segundo as normas da W3C.

O XML deve ser assinado em duas tags: Rps e EnviarLoteRpsEnvio , através do método

AssinarXmlString . Esse método precisa do certificado digital para realizar a assinatura. O certificado

digital é passado informando o nome do repositório (no exemplo, "My" que é o próprio computador) e o

nome do certificado (no exemplo, o certificado de testes "Equipe de Desenvolvimento NFS-e" ).

Os métodos com final Document devem ser usados em ambiente .NET (framework 2.0 ou superior)

passando como parâmetro objetos do tipo XMLDocument. Os métodos com final String devem ser

usados nas demais linguagens de programação.

Para verificar se o XML foi assinado corretamente, executa-se o método ValidarAssinaturaXmlString .

Page 3: Leia-me.pdf

Componente NfseUtil.DLL

Página 3 de 6

Ultima alteração em 18/05/2010 15:53:00

Enviando o XML via Webservices

Abaixo o exemplo de código para enviar o XML via webservices:

Visual Basic: Private Function EnviaXML(txtXML As String, ByRef t xtRetorno As String) As Boolean On Error Resume Next Dim objNFSE As New NfseUtil.Proxy objNFSE.AtribuirCertificadoDigital "My", "Equip e de Desenvolvimento NFS-e" txtRetorno = objNFSE.EnviarLoteRPSUrl(txtXML, "https://nfsehml.sefaz.salvador.ba.gov.br/enviolote rps/envioloterps.svc") EnviaXML = True Exit Function TrataErro: txtRetorno = Err.Description EnviaXML = False End Function

Delphi: function EnviaXML(var txtXML:string; var txtRetorno :string) : boolean; var objNFSE: IProxy; begin try objNFSE := CoProxy.Create; objNFSE.AtribuirCertificadoDigital('My', 'E quipe de Desenvolvimento NFS-e'); txtRetorno := objNFSE.EnviarLoteRPSUrl(txtX ML, 'https://nfsehml.sefaz.salvador.ba.gov.br/enviolote rps/envioloterps.svc'); EnviaXML := True; except on e : Exception do begin EnviaXML := False; txtRetorno := e.Message; end; end; end;

O certificado digital é atribuído ao objeto de conexão com o webservices através do método

AtribuirCertificadoDigital .

Utiliza-se o método EnviarLoteRPSUrl para enviar o XML do lote informando o endereço de destino do

webservices.

Para usar os métodos sem o final Url deve ser acrescentado ao WEB.CONFIG da aplicação as

referencias aos webservices descritas no arquivo WEBCONFIG.TXT (somente para aplicações em .NET

framework 2.0 ou superior).

Configurando o certificado do repositório MY

O componente NfseUtil utiliza os certificados digitais que estão instalados no repositório MY do

computador local. Por padrão, ao instalar um certificado digital, este é instalado no repositório do

usuário local. Abaixo os passos para incluir o certificado no repositório correto:

1. Clicar no botão Iniciar, opção Executar;

Page 4: Leia-me.pdf

Componente NfseUtil.DLL

Página 4 de 6

Ultima alteração em 18/05/2010 15:53:00

2. Digitar MMC.EXE;

3. Abrirá o console de gerenciamento da Microsoft, conforme tela abaixo:

4. Abrir o menu Arquivo, opção Adicionar/remover snap-in;

5. Clicar no botão Adicionar e selecionar opção Certificados;

Page 5: Leia-me.pdf

Componente NfseUtil.DLL

Página 5 de 6

Ultima alteração em 18/05/2010 15:53:00

6. Selecionar opção Minha conta do usuário e confirmar;

7. Repetir os passos 5 e 6, para adicionar outra snap-in de certificado, mas selecionando opção

Conta do computador. Na tela abaixo, manter opção computador local selecionado e

confirmar;

8. A tela de snap-in deve possui duas opções como tela abaixo:

9. Clicar no botão OK e a tela do console deve possuir duas árvores de diretório como tela abaixo:

Page 6: Leia-me.pdf

Componente NfseUtil.DLL

Página 6 de 6

Ultima alteração em 18/05/2010 15:53:00

10. O certificado digital instalado estará na pasta Certificados (usuário local), Pessoal, Certificados;

11. Selecionar o certificado desejado e copiá-lo (botão direito do mouse, opção Copiar);

12. Abrir pasta Certificados (computador local), Pessoal, Certificados e colar o certificado digital,

conforme tela abaixo:

13. Dessa forma, o certificado foi instalado corretamente no repositório MY do computador local.