Inquiridor
Consumindo NFe por SOAP Message (Sem instanciar o Web Service)

Pergunta
-
Olá pessoal a tempos estou com problemas relacionados a referenciar WebServices de alguns estados, problemas esses que o projeto ACBr(Delphi) não passa e descobri o motivo, eles usam o SOAP e não instanciam os mesmos, então estou tentando usar esse processo e de certo modo consegui porem estou com algum erro que não consigo decifrar vou compartilhar com vocês para que se alguém queira contribuir possamos resolver
'..: Classe modificada para adicionar o certificado ao client Public Class MyClient Inherits WebClient Public Property Certificado As X509Certificate2 Protected Overrides Function GetWebRequest(address As Uri) As WebRequest Dim request As HttpWebRequest = MyBase.GetWebRequest(address) request.ClientCertificates.Add(Certificado) Return request End Function End Class
Function ConsultaStatusSOAP(webServiceAsmxUrl As String, UF As String) As String '..: Instancio aqui minha classe que herda de WebClient modificada para adicionar o certificado no client Dim client As New MyClient() Dim TextoRetorno As String = "" Dim Texto As New StringBuilder '..: Monto aqui o texto do XML para consulta de Status, este vai ser "encapsulado" dentro do pacote soap Texto.Append("<consStatServ versao=""3.10"">") Texto.Append("<tpAmb>1</tpAmb>") Texto.Append("<cUF>" & CodigoUF(UF) & "</cUF>") Texto.Append("<xServ>STATUS</xServ>") Texto.Append("</consStatServ>") 'Acho que pode estar relacionado aqui. client.Headers.Add("SOAPAction", "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2") 'Adiciono o certificado ao meu client para a autenticação client.Certificado = Certificado() Try '..:Mensagem SOAP Dim Mensagem As String = "<?xml version=""1.0"" encoding=""utf-8""?><soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope""><soap12:Header><nfeCabecMsg xmlns=""http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2""><cUF>" & CodigoUF(UF) & "</cUF><versaoDados>3.10</versaoDados></nfeCabecMsg></soap12:Header><soap12:Body><nfeDadosMsg xmlns=""http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"">" & Texto.ToString & "</nfeDadosMsg></soap12:Body></soap12:Envelope>" '..:Transformo em um array de bytes para o envio Dim BytesMensagem As Byte() = Encoding.UTF8.GetBytes(Mensagem) '..: Envio a mensagem e obtenho o retorno em array de bytes Dim Resultado As Byte() = client.UploadData(webServiceAsmxUrl, BytesMensagem) '..: Transformo o retorno em string novamente TextoRetorno = System.Text.Encoding.UTF8.GetString(Resultado) Catch ex As Exception TextoRetorno = "Erro: " & ex.Message Finally client.Dispose() End Try Return TextoRetorno End Function Public Function CodigoUF(ByVal UF As String) As Byte CodigoUF = 99 Select Case UF Case "AC" '[Description("Acre")] Return 12 Case "AL" '[Description("Alagoas")] Return 27 Case "AM" '[Description("Amazonas")] Return 13 Case "AP" '[Description("Amapá")] Return 16 Case "BA" '[Description("Bahia")] Return 29 Case "CE" '[Description("Ceará")] Return 23 Case "DF" '[Description("Distrito Federal")] Return 53 Case "ES" '[Description("Espírito Santo")] Return 32 Case "GO" '[Description("Goias")] Return 52 Case "MA" '[Description("Maranhão")] Return 21 Case "MT" '[Description("Mato Grosso")] Return 51 Case "MS" '[Description("Mato Grosso do Sul")] Return 50 Case "MG" '[Description("Minas Gerais")] Return 31 Case "PA" '[Description("Pará")] Return 15 Case "PB" '[Description("Paraíba")] Return 25 Case "PR" '//[Description("Paraná")] Return 41 Case "PI" '[Description("Piauí")] Return 22 Case "PE" '[Description("Pernambuco")] Return 26 Case "RJ" '[Description("Rio de Janeiro")] Return 33 Case "RN" '[Description("Rio Grande do Norte")] Return 24 Case "RS" '[Description("Rio Grande do Sul")] Return 43 Case "RO" '[Description("Rondônia")] Return 11 Case "RR" '[Description("Roraima")] Return 14 Case "SC" '[Description("Santa Catarina")] Return 42 Case "SP" '[Description("São Paulo")] Return 35 Case "SE" '[Description("Sergipe")] Return 28 Case "TO" '[Description("Tocantins")] Return 17 End Select End Function
ConsultaStatusSOAP("https://nfe.sefaz.mt.gov.br/nfews/v2/services/NfeStatusServico2", "MT")
Funciona em quase todos os WS, mas não está funcionando com .ASMX
Obrigado
Valdeir Caires
Programador - Precisão Sistemas
- Editado Valdeir Caires quarta-feira, 3 de junho de 2015 20:21 Erro no código