Baixar Xml da NFC-e

Boa Tarde, estou tentando fazer um download de uma nota já emitida porem, ao salva-lá, o XML abre como se fosse um arquivo binário, segue o código:

'salvamento do xml nfceProc
Dim resultXmlProc As Client.FileParameter = apiInstance.BaixarXmlNfce(id:=result.id)

If (Directory.Exists(AppDomain.CurrentDomain.BaseDirectory & "NFCE_xml_proc\") = False) Then
    Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory & "NFCE_xml_proc\")
End If

Using fileStream As FileStream = File.Create(AppDomain.CurrentDomain.BaseDirectory & "\NFCE_xml_proc\" + result.chave + ".txt")

    resultXmlProc.Content.Seek(0, SeekOrigin.Begin)
    resultXmlProc.Content.CopyTo(fileStream)

End Using

Olá @julio, seja bem-vindo à Nuvem Fiscal!

O código a princípio está correto. O que seria “como se fosse um arquivo binário”?
Qual seria o id da nota, e qual o conteúdo “binário” que você diz estar recebendo?

Bom dia, o id da nota, eu uso do Dfe de retorno de quando uma nota é emitida;
O arquivo, quando o abro ou tento converter para um XMLDocument, o conteúdo exibido é neste estilo:
" �������

�9�r�X�����T�$���)��D�?S$!IDI�O��q_��v�{fw�o]������ ��{�Lڠ��<�����/� �r?��o/�%�.^~_R�9��ܛ����r���7�����I�Q�9�[�����/�N'��2{��%��/�^R����e"��^�����B ��0������3_ ��f(�����Iy���p

�G�S�� �ʜZ-�m��������s����2

�����Ys0�)�§����+��"�� �Ͱ���+ �0�T]��)h�c\P�=�Q��d��s���8�’��r�O��uըi�(����~�:u�h���’a��!�]_�2’l�=U+��8�T�޻b��)P��e��[(�����4q���^�X

��]��i�p� ����=(h$Rw���,�oL�/LV�iɶ©@fR�BA�V�۰\Ҡf��L$@/����y�����2a�n��ug��� &���N�^�8$��ԃ��G����(�o&�ז6CH��vz��4��<t��S�a`J���d$B_���%��Ă$�M

�5�����a9?�’�Ta)X�/C}��`? s#���H�iei��D�$P{���բ’�d��v�˒%q4’��H�b��a��խ*�,�N^'���U��Y}����(

#�ڣ��XAՖ8�@�u^����n���0c@����~����p�Y#�jaK=о�f���Sx�j�a�7n��iq$��’��l��AS�o�PG�_ V^����’J���������4��%��Q�/�a�XS5�嘚e�. ���Om(6X�yݯΞ9�l����@T;�z’���(y��>�V`�r��L�F�S�w€��y’�ï�����B�����3A�ia�T |�>( b�>��zT��k�.h�� uāe�gbz�jYU��O�;�׵n�

�-@�{�jA���e����Ee{�Pu�d�x|�q���3��.�pX�Z?O���a����@�>[ l����p��̏��l

�̭ds�/�gn�~�^�4O����-;{���y���[U��y۟��\�ߋo�r����?�3��sr�s�H� ������:0�-�a�g�Gߨ�L؋����^�UͰ)j�H����(oʿ�zt�[^�P��(���8+�� 2�:Y�E�v=�\�䠾�>8

B���K�W*-�׊@Ͼ��2�^�!u�}q������>�Z]�Wd�׵`beҷ�������i��5���

�����#�޷�R��& ��"����I�G�F

;'i��zOzF:w�L��kg���y�a��FA_%)�3���� ���z�z�[��D+���~�

��a�]�Sh!J9�4�byzz�/xg]ui֢��U�#

vk�X�$~���Q��jmJD{;I��Y����g�J�l�+�<���|��/�V�o��\��M��@��$\ݟ�H�q�ٮ-�c���1>np�Z��j�̟�&�B�12F��a�aqv��֧�UŖ ��|.=C�Ȑ~��\$

O�D

� '{,p}�Xݺ9c1l��t�b�9��giKW�J�3��_��5;�ŕY��y���\��)�Ww�{�t ��ݷocҿ$����a&9�vF�

�::� �ZY�V{�e�

�Nb�P�=�6���q�q��Oҥ�Z緌Nw{����U��g.2�’ҝ�*;��-��p6��^<�}w,�y���’ �f ;�4d;��n�E��n� w;s�’�i+அ���`I�#"3�gIO���?�X�d!�ipOS���. �;��ףݣE_צl�����o��X�]����I%�Uǎ<��֖����c�wyc���W�#*D�/>���u¨w�w3�_��O��c��9��a{;�u⡻�&��� ?x�������^���Eh�y�[�]����l)�E�C��8o=˂O�L�d�OT�J��-أ�w��yB��� w�’wa�G2

��yM��8�ghݦ��p��7t�Ea7��a&��qn����뵓�c��MU��Z�$���ɓ�jpe�,_�L������0b��y�ϵ�Dc1��lwC���� �ԽnC����3�� ����U1

��oQ�7{�+�ٝ�=W�f���"��>P��9��֚���s>�!��ats� L�]��

�+G�� ��R��FFx�Үa�N���H�.���m�؎s�_����E˚�nz���n�v(==F��=s�����x��Dm���Fw6a���<y�5��;}�yX�����or�.���rw:���0�(`���E���L�9z2:#�B��C��~�l=�X}_q̉ Ò y��=P#C���3���� ��+�ވ���+d����ހ�~����+�?�ަ����^D^�$>ְ�?�k�v���{ Ow��’A�T�Bw�����&S?Y���#������0�����]���F��"�gdZ�ٜ�\h���+�ӝbU�n�^��#�f���mܶ5��p�;��Ԑgd�Ͻ���!c�ۻ\���.[<�r�S��N��N�§��k�?������g�’&�D��’s� ���s䘾"�V"XK�[!&setj�h��rݦB�d��b�*�k����E��5:P���ޝ�c���N�� ����=��}�؊��_czpօǪ� �ɹ��w�^�uƆas���aݏwuĤ����㗽�l�a��P�p�v��vs�֕��C�q��g&k���]A

�.\Ѫ���Ye�’�1� �>/��&�L@��YDž!�����C���ah��3O[�F�k�*&h�zBL&DssS����<\K�&�+�x�>O��p�A�h�w�m�_ �r��na��m��%Ȟ 07|�ab˳�uL,C$u}̽�r�2��{s�s�L� f����O�.y��t=���� �C��eU]\F�sߝ�MF��⬷P*ݶvaNr�?�$��OM��

�;>�%Ro�mge�

yl1� ��h˓A����-Z��1�}�9�BV�seg��~���z�5W����lz�|5���"� N��-eLV¯�׵���u

�/���d���͔ P+/QA�Ԁdp�k�BO�w]����-g���.��zZ���*��آA� m��e#}`X%n�%h����6��Bs����x��4�y���l�����F�M㩰���\�؂�!���(_iqզ���)bq���i�]�"���]����uM��x��9��V�A$'�0��g{PZ��3}m�CU���>�N�N^Hn6�S�.�E3�IzzQ�f��8-J��sX׃2�r�$߳pW�E�Z�+L���

�B,1cKA?��F�x��>o����ވ��\��蟿_�V�o�?\rt�D����P��C�����<~��w�=���3

�P��<�������;`~����Od�~��7A�4�)?

��o^}ޅ(Ϭ���?��]��͗tS�w����|�T��w&����GG��M|� ��@��HX�/b�ܤx��"

Não há nenhum problema no seu código. Consegue fazer um programa mínimo de teste que reproduza o problema, e colocar aqui? Obviamente, só não colocando suas credenciais.

Module Program

Public Class retornoTokenApi

    Public Property access_token As String
    Public Property token_type As String
    Public Property expires_in As Integer
    Public Property scope As String

End Class

Sub Main(args As String())
    Console.WriteLine("Hello World!")

    Dim objString = "" 'JSON DE UM OBJETO NfePedidoEmissao DE TESTE VALIDO

    Dim body As NfePedidoEmissao = JsonConvert.DeserializeObject(Of NfePedidoEmissao)(objString)


    'enviar para a API
    Try

        Dim options = New RestClientOptions("https://auth.nuvemfiscal.com.br")
        Dim client = New RestClient(options)
        Dim request = New RestRequest("/oauth/token", Method.Post)
        request.AddHeader("Content-Type", "application/x-www-form-urlencoded")
        request.AddParameter("client_id", "")
        request.AddParameter("client_secret", "")
        request.AddParameter("grant_type", "client_credentials")
        request.AddParameter("scope", "nfce ")
        Dim response = client.Execute(request)
        Dim objResponse As retornoTokenApi = JsonConvert.DeserializeObject(Of retornoTokenApi)(response.Content)

        Dim config As New Client.Configuration()
        config.BasePath = "https://api.sandbox.nuvemfiscal.com.br"
        'Configure API key authorization: jwt
        'config.AddApiKey("Authorization", objResponse.access_token)

        'Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
        'config.AddApiKeyPrefix("Authorization", "Bearer")
        'Configure OAuth2 access token for authorization: oauth2
        config.AccessToken = objResponse.access_token

        'screate instances of HttpClient, HttpClientHandler to be reused later with different Api classes
        Dim httpClientobj = New HttpClient()
        Dim HttpClientHandlerObj = New HttpClientHandler()
        Dim apiInstance = New NfceApi(httpClientobj, config, HttpClientHandlerObj)

        Dim result As Model.Dfe = apiInstance.EmitirNfce(body)

        If (result.status = Model.Dfe.StatusEnum.Autorizado) Then

            Try

                'salvamento do xml nfceProc
                Dim resultXmlProc As Client.FileParameter = apiInstance.BaixarXmlNfce(id:=result.id)

                If (Directory.Exists(AppDomain.CurrentDomain.BaseDirectory & "NFCE_xml_proc\") = False) Then
                    Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory & "NFCE_xml_proc\")
                End If

                Using fileStream As FileStream = File.Create(AppDomain.CurrentDomain.BaseDirectory & "\NFCE_xml_proc\" + result.chave + ".xml")

                    resultXmlProc.Content.Seek(0, SeekOrigin.Begin)
                    resultXmlProc.Content.CopyTo(fileStream)

                End Using

            Catch ex As Exception



            End Try

        End If


    Catch ex As Exception



    End Try


End Sub

End Module

Olá Julio,

O programa não compila. Favor enviar o conteúdo completo do Program.vb e as dependências utilizadas.

Imports System
Imports NuvemFiscal.Sdk.Model
Imports NuvemFiscal.Sdk.Api
Imports NuvemFiscal.Sdk.Client
Imports Newtonsoft.Json
Imports NuvemFiscal.Sdk
Imports System.IO
Imports System.Net
Imports System.Net.Http
Imports System.Net.Mail
Imports RestSharp

Module Program

    Public Class retornoTokenApi

        Public Property access_token As String
        Public Property token_type As String
        Public Property expires_in As Integer
        Public Property scope As String

    End Class

    Sub Main(args As String())

        Dim objString = "" 'JSON DE UM OBJETO NfePedidoEmissao DE TESTE VALIDO

        Dim body As NfePedidoEmissao = JsonConvert.DeserializeObject(Of NfePedidoEmissao)(objString)


        'enviar para a API
        Try

            Dim options = New RestClientOptions("https://auth.nuvemfiscal.com.br")
            Dim client = New RestClient(options)
            Dim request = New RestRequest("/oauth/token", Method.Post)
            request.AddHeader("Content-Type", "application/x-www-form-urlencoded")
            request.AddParameter("client_id", "")
            request.AddParameter("client_secret", "")
            request.AddParameter("grant_type", "client_credentials")
            request.AddParameter("scope", "nfce ")
            Dim response = client.Execute(request)
            Dim objResponse As retornoTokenApi = JsonConvert.DeserializeObject(Of retornoTokenApi)(response.Content)

            Dim config As New Client.Configuration()
            config.BasePath = "https://api.sandbox.nuvemfiscal.com.br"
            'Configure API key authorization: jwt
            'config.AddApiKey("Authorization", objResponse.access_token)

            'Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
            'config.AddApiKeyPrefix("Authorization", "Bearer")
            'Configure OAuth2 access token for authorization: oauth2
            config.AccessToken = objResponse.access_token

            'screate instances of HttpClient, HttpClientHandler to be reused later with different Api classes
            Dim httpClientobj = New HttpClient()
            Dim HttpClientHandlerObj = New HttpClientHandler()
            Dim apiInstance = New NfceApi(httpClientobj, config, HttpClientHandlerObj)

            Dim result As Model.Dfe = apiInstance.EmitirNfce(body)

            If (result.status = Model.Dfe.StatusEnum.Autorizado) Then

                Try

                    'salvamento do xml nfceProc
                    Dim resultXmlProc As Client.FileParameter = apiInstance.BaixarXmlNfce(id:=result.id)

                    If (Directory.Exists(AppDomain.CurrentDomain.BaseDirectory & "NFCE_xml_proc\") = False) Then
                        Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory & "NFCE_xml_proc\")
                    End If

                    Using fileStream As FileStream = File.Create(AppDomain.CurrentDomain.BaseDirectory & "\NFCE_xml_proc\" + result.chave + ".xml")

                        resultXmlProc.Content.Seek(0, SeekOrigin.Begin)
                        resultXmlProc.Content.CopyTo(fileStream)

                    End Using

                Catch ex As Exception



                End Try

            End If


        Catch ex As Exception



        End Try


    End Sub
End Module

este é todo o código, feito em um projeto Aplicativo do console em .Net 8.0 (ainda que o problema se apresento primeiro no .Net Framework 4.6.1), e foram instalados os pacotes RestSharp, NuvemFiscal.Sdk e Newtonsoft.Json, também é necessário seta a variável objString com um JSON de um objeto da classe NfePedidoEmissao valido, a fim de ser desserializada.

Foi possível executar este código ?

Não. Ocorre o seguinte erro:

  Program.vb(42, 35): [BC36589] Type parameter 'T' for extension method 'Public Function Execute(Of T)(request As RestRequest) As RestResponse(Of T)' defined in 'RestClientExtensions' cannot be inferred.

Na seguinte linha:

            Dim response = client.Execute(request)
Dim response = client.Execute(request)

esta função serve apenas para retornar o token de acesso, fique livre para substitui-lo por outro método.

Você não está usando esse código, então?
Seria bom sempre indicar o mesmo código que está usando para minimizar qualquer outro tipo de influência

Eu utilizei este mesmo código, porem, não obtive esse erro mas, aparentemente, é alguma coisa no RestSharp, na parte de obter o Token de acesso, até ai esta funcionando bem o programa, utilizo para emitir a nota, o erro ocorre logo após, ao consultar o XML na API.
Sobre este erro que ocorreu, não tenho ideia do que seria, mas não ocorre na minha parte.
Poderia ser alguma questão da versão do pacote do RestSharp ou qualquer coisa neste sentido.

Alterando o Restsharp para versão 110.2, o erro de compilação sumiu.

O seu código está emitindo uma nota. Não posso rodar um código de emissão de nota em seu nome.

Poderia, por gentileza, criar um exemplo que execute do seu lado, completo, e reproduza o problema? Isso é a princípio um suporte de .NET VB, estamos tentando ajudar, mas precisamos da sua ajuda para evitar todo esse retrabalho.

Por favor, coloque o código completo para o download de uma nota sua que causa o exato problema que você está tendo. Apenas remova as credenciais, o resto por favor deixe exatamente como o código que você está executando.

Se compartilhar o projeto completo (.csproj e demais arquivos necessários) já minimiza também o problema de dependências.

Imports System
Imports NuvemFiscal.Sdk.Model
Imports NuvemFiscal.Sdk.Api
Imports NuvemFiscal.Sdk.Client
Imports Newtonsoft.Json
Imports NuvemFiscal.Sdk
Imports System.IO
Imports System.Net
Imports System.Net.Http
Imports System.Net.Mail
Imports RestSharp

Module Program

    Public Class retornoTokenApi

        Public Property access_token As String
        Public Property token_type As String
        Public Property expires_in As Integer
        Public Property scope As String

    End Class

    Sub Main(args As String())

        'enviar para a API
        Try

            Dim options = New RestClientOptions("https://auth.nuvemfiscal.com.br")
            Dim client = New RestClient(options)
            Dim request = New RestRequest("/oauth/token", Method.Post)
            request.AddHeader("Content-Type", "application/x-www-form-urlencoded")
            request.AddParameter("client_id", "")
            request.AddParameter("client_secret", "")
            request.AddParameter("grant_type", "client_credentials")
            request.AddParameter("scope", "nfce ")
            Dim response = client.Execute(request)
            Dim objResponse As retornoTokenApi = JsonConvert.DeserializeObject(Of retornoTokenApi)(response.Content)

            Dim config As New Client.Configuration()
            config.BasePath = "https://api.sandbox.nuvemfiscal.com.br"
            'Configure API key authorization: jwt
            'config.AddApiKey("Authorization", objResponse.access_token)

            'Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
            'config.AddApiKeyPrefix("Authorization", "Bearer")
            'Configure OAuth2 access token for authorization: oauth2
            config.AccessToken = objResponse.access_token

            'screate instances of HttpClient, HttpClientHandler to be reused later with different Api classes
            Dim httpClientobj = New HttpClient()
            Dim HttpClientHandlerObj = New HttpClientHandler()
            Dim apiInstance = New NfceApi(httpClientobj, config, HttpClientHandlerObj)

            Try

                'salvamento do xml nfceProc
                Dim resultXmlProc As Client.FileParameter = apiInstance.BaixarXmlNfce(id:="")

                If (Directory.Exists(AppDomain.CurrentDomain.BaseDirectory & "NFCE_xml_proc\") = False) Then
                    Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory & "NFCE_xml_proc\")
                End If

                Using fileStream As FileStream = File.Create(AppDomain.CurrentDomain.BaseDirectory & "\NFCE_xml_proc\" + "nota" + ".xml")

                    resultXmlProc.Content.Seek(0, SeekOrigin.Begin)
                    resultXmlProc.Content.CopyTo(fileStream)

                End Using

            Catch ex As Exception



            End Try



        Catch ex As Exception



        End Try


    End Sub
End Module

Bom dia, acredito que esse código esta de acordo, é necessário apenas as credenciais e o id de qualquer nota.

Bom dia, @julio.

Favor informar o id de uma nota sua.

Usei este id para testar no meu lado o erro:
nfc_3a10ddfeb08042d5a352f5e8199c8f83

Olá @julio,

Este é o código correto para iniciar o http client, o http handler e o objeto API:

Dim HttpClientHandlerObj = New HttpClientHandler()
HttpClientHandlerObj.AutomaticDecompression = DecompressionMethods.All
Dim httpClientobj = New HttpClient(HttpClientHandlerObj)
Dim apiInstance = New NfceApi(httpClientobj, config, HttpClientHandlerObj)

Esta solução resolveu o problema, muito obrigado!
Recomendo atualizar a documentação a fim de sanar este erro no futuro.

Este tópico foi fechado automaticamente 24 horas depois da última resposta. Novas respostas não são mais permitidas.