Академический Документы
Профессиональный Документы
Культура Документы
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.
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")
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.
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).
Componente NfseUtil.DLL
2. 3. Digitar MMC.EXE; Abrir o console de gerenciamento da Microsoft, conforme tela abaixo:
4.
5.
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.
9.
Clicar no boto OK e a tela do console deve possuir duas rvores de diretrio como tela abaixo:
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.