Upload
vviini
View
116
Download
9
Embed Size (px)
Citation preview
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")
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 .
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;
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;
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:
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.