Вы находитесь на странице: 1из 6

Componente NfseUtil.

DLL
A conexo com os webservices da SEFAZ Salvador realizada com protocolo SSL 3.0 com autenticao mtua. Este padro de conexo requer que a autenticao do servidor e do cliente com certificado digital, assim, o cliente ao tentar a conexo 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 conexo em razo da inexistncia 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 oferea suporte para conexo SSL com autenticao mtua.

Utilizando a DLL NFS-e Util


Para utilizar a DLL gerada necessrio o ter o Framework .NET 2.0 (Microsoft .NET Framework Version 2.0 Redistributable Package (x86)), instalado e prvio 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 necessrio adicionar o componente no projeto: 1. 2. 3. 4. Abra um novo projeto; Selecione o menu PROJECT, opo REFERENCES; Localizar o objeto NfseUtil e selecion-lo; Clicar no boto OK.

Para usar a DLL em Delphi necessrio importar a Type Library da DLL NFe_Util.dll: 1. 2. 3. 4. 5. Abra um novo projeto; Selecione a opo IMPORT TYPE LIBRARY do menu PROJECT; Na janela IMPORT TYPE LIBRARY, clique no boto ADD; Procure o arquivo NFe_Util.tlb; Clique no boto CREATE UNIT.

Assinando o XML
Abaixo o exemplo de cdigo 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 NFSe") txtXML = objNFSE.AssinarXmlString(txtXML, "EnviarLoteRpsEnvio", "My", "Equipe de Desenvolvimento NFS-e")

Pgina 1 de 6 Ultima alterao em 18/05/2010 15:53:00

Componente NfseUtil.DLL
'Validar assinatura XML stsValida = objNFSE.ValidarAssinaturaXmlString(txtXML) If Not stsValida Then txtRetono = "Assinatura invlida." 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 txtRetorno:string) : boolean; var objNFSE: IXml; stsValida: Boolean; begin try objNFSE := CoXML.Create; //Canonizar XML txtXML := objNFSE.CanonicalizarXmlString(txtXML); //Assinar txtXML := NFS-e'); txtXML := Desenvolvimento XML objNFSE.AssinarXmlString(txtXML, 'Rps', 'My', 'Equipe de Desenvolvimento objNFSE.AssinarXmlString(txtXML, 'EnviarLoteRpsEnvio', 'My', 'Equipe de NFS-e');

//Validar assinatura XML stsValida := objNFSE.ValidarAssinaturaXmlString(txtXML); if not stsValida then begin txtRetorno := 'Assinatura invlida.'; 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 mtodo CanonicalizarXmlString para format-lo segundo as normas da W3C. O XML deve ser assinado em duas tags: Rps e EnviarLoteRpsEnvio, atravs do mtodo Esse mtodo precisa do certificado digital para realizar a assinatura. O certificado digital passado informando o nome do repositrio (no exemplo, "My" que o prprio computador) e o nome do certificado (no exemplo, o certificado de testes "Equipe de Desenvolvimento NFS-e").
AssinarXmlString.

Os mtodos com final Document devem ser usados em ambiente .NET (framework 2.0 ou superior) passando como parmetro objetos do tipo XMLDocument. Os mtodos com final String devem ser usados nas demais linguagens de programao. Para verificar se o XML foi assinado corretamente, executa-se o mtodo ValidarAssinaturaXmlString.

Pgina 2 de 6 Ultima alterao em 18/05/2010 15:53:00

Componente NfseUtil.DLL
Enviando o XML via Webservices
Abaixo o exemplo de cdigo para enviar o XML via webservices: Visual Basic:
Private Function EnviaXML(txtXML As String, ByRef txtRetorno As String) As Boolean On Error Resume Next Dim objNFSE As New NfseUtil.Proxy objNFSE.AtribuirCertificadoDigital "My", "Equipe de Desenvolvimento NFS-e" txtRetorno = objNFSE.EnviarLoteRPSUrl(txtXML, "https://nfsehml.sefaz.salvador.ba.gov.br/envioloterps/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', 'Equipe de Desenvolvimento NFS-e'); txtRetorno := objNFSE.EnviarLoteRPSUrl(txtXML, 'https://nfsehml.sefaz.salvador.ba.gov.br/envioloterps/envioloterps.svc'); EnviaXML := True; except on e : Exception do begin EnviaXML := False; txtRetorno := e.Message; end; end; end;

O certificado digital atribudo ao objeto de conexo com o webservices atravs do mtodo AtribuirCertificadoDigital. Utiliza-se o mtodo EnviarLoteRPSUrl para enviar o XML do lote informando o endereo de destino do webservices. Para usar os mtodos sem o final Url deve ser acrescentado ao WEB.CONFIG da aplicao as referencias aos webservices descritas no arquivo WEBCONFIG.TXT (somente para aplicaes em .NET framework 2.0 ou superior).

Configurando o certificado do repositrio MY


O componente NfseUtil utiliza os certificados digitais que esto instalados no repositrio MY do computador local. Por padro, ao instalar um certificado digital, este instalado no repositrio do usurio local. Abaixo os passos para incluir o certificado no repositrio correto: 1. Clicar no boto Iniciar, opo Executar; Pgina 3 de 6 Ultima alterao em 18/05/2010 15:53:00

Componente NfseUtil.DLL
2. 3. Digitar MMC.EXE; Abrir o console de gerenciamento da Microsoft, conforme tela abaixo:

4.

Abrir o menu Arquivo, opo Adicionar/remover snap-in;

5.

Clicar no boto Adicionar e selecionar opo Certificados;

Pgina 4 de 6 Ultima alterao em 18/05/2010 15:53:00

Componente NfseUtil.DLL
6. Selecionar opo Minha conta do usurio e confirmar;

7.

Repetir os passos 5 e 6, para adicionar outra snap-in de certificado, mas selecionando opo Conta do computador. Na tela abaixo, manter opo computador local selecionado e confirmar;

8.

A tela de snap-in deve possui duas opes como tela abaixo:

9.

Clicar no boto OK e a tela do console deve possuir duas rvores de diretrio como tela abaixo:

Pgina 5 de 6 Ultima alterao em 18/05/2010 15:53:00

Componente NfseUtil.DLL

10. O certificado digital instalado estar na pasta Certificados (usurio local), Pessoal, Certificados; 11. Selecionar o certificado desejado e copi-lo (boto direito do mouse, opo 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 repositrio MY do computador local.

Pgina 6 de 6 Ultima alterao em 18/05/2010 15:53:00

Вам также может понравиться