none
Consumindo NFe por SOAP Message (Sem instanciar o Web Service) RRS feed

  • 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
    quarta-feira, 3 de junho de 2015 18:11