Ir para conteúdo
samuelcorf

Geração de Nota Fiscal Eletrônica Com C#

Recommended Posts

Boa tarde pessoal,

 

Estou criando um software em c# que deverá emitir nota fiscal eletrônica. Já estudei bastante sobre o tema, fiz diversos testes porém estou com o seguite problema: " Could not establish secure channel for SSL/TLS with authority 'hnfe.fazenda.mg.gov.br' ".

 

Sei que a tendência é achar que eu ainda não estudei sobre o assunto, porque geralmente este é o primeiro erro que acontece quanto tentamos consumir o WebService por causa da falta de certificado. Infelizmente este não é o meu caso. Abaixo uma descrição dos passos que já fiz:

 

1- Consegui e instalei no meu computador um certificado digital válido, do tipo A1.

 

2- Gerei um XML válido para a NFE. Para validar o xml eu utilizei um site que avalia e te mostra campos faltantes ou com dados inválidos. O site é o do link a seguir: http://validadornfe.tecnospeed.com.br/

 

3- Adicionei um Service Reference ao meu projeto com o link de homologação para geração de NFE do estado de Minas Gerais:

https://hnfe.fazenda.mg.gov.br/nfe2/services/RecepcaoEvento?wsdl

 

4- Criei uma assinatura digital para meu xml e validei o documento com assinatura no site

https://www.receita.fazenda.gov.br/Aplicacoes/SSL/ATBHE/Assinadoc/ValidadorAssinaturas.app/valida.aspx,

após carregar o meu xml o site me dá a seguinte mensagem: A assinatura digital do documento fornecido é válida.

 

5- Criei um método para enviar a nfe, estou anexando abaixo o código bem comentado alguém pode me ajudar por favor a identificar onde eu estou errando?

 private void btEnviar_Click(object sender, EventArgs e)
        {

            //declara o objesto xml
            System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();

            //Classe usada para buscar o certificado digital
            var geraxml = new Teste.cGeraXML();

            //Retorna o certificado após exibir uma tela para que o usuário selecione o mesmo
            X509Certificate2 certificado = geraxml.BuscaNome("");

            //Carrega o xml
            xmldoc.Load("c:\\xml\\myXmFile_Assinado.xml");

            //Busca o nó enviNFe 
            var obj_nodeenviNFE = xmldoc.GetElementsByTagName("enviNFe");

            //Cria o objeto do cabeçalho
            var obj_cabecalho = new ServiceHomologacao.nfeCabecMsg();

            //Atribui os valores
            obj_cabecalho.cUF = "31";
            obj_cabecalho.versaoDados = "2.00";

            //Cria o objeto do webservice de envio
            var objService = new ServiceHomologacao.RecepcaoEventoSoap12Client();


            //Atribui o certificado, não sei se este passo deve ser feito, já que 
            //o documento está assinado. Desconfio sériamente que o erro esteja aqui, 
            //porém não faço idéia de como atribuir este certificado ao objeto do service
            //reference
            objService.ClientCredentials.ClientCertificate.Certificate =certificado;

            //Envia os dados
            objService.nfeRecepcaoEvento(ref obj_cabecalho, obj_nodeenviNFE[0]);     



        }

Se alguém conhece de NFE, me ajudem por favor. Já estou meio que desesperado com isso. Obrigado!!

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por revendacampi
      Olá, estou desenvolvendo um projeto em PHP onde ao ler o QR code eu consigo pegar as informações tais como CNPJ e Valor, alguem sabe alguma forma que eu consiga fazer isso de onde posso puxar as informações do QR Code ou se o SEFAZ MT tem alguma api que consigo puxar atraves do qr code.
    • Por Jonathacsantos
      Boa tarde, sou novo na programação, comecei por conta própria e agora estou com um pequeno problema, meu programa depende de uma pasta criada pra executar um .exe que fica dentro de uma outra pasta, sendo que eu preciso que ele leia o .exe independente de onde ele fica instalado, vou mostrar uma parte do código para tentar explicar 
      private void AcessRemo_Click(object sender, EventArgs e) { foreach ( var process in Process.GetProcessesByName("TeamViewer")) { process.Kill(); } Process.Start("C:\\Teste\\suporteremoto.exe"); ele fecha um teamviewer em execução e executa uma versão especifica do teamviewer, sendo que nos meus testes funciona pq eu tenho essa pasta ai chamada teste, mas o programa instala em Program Files, sendo que se for 64, ele vai pra Program Files (x86), dai gostaria de fazer ele ler, tipo um [LocalPath] , mas não sei como , se alguem puder me ajudar ou me da uma luz eu agradeço muito.
    • Por lucasrodrigues
      Estou com esse problema ao tentar vincular uma tabela do MySql a um DataSet. Utilizo o MySqlConnector 8.0.13, MySql-For-VisualStudio 1.2.8.

    • Por jtc-carr
      Linguagem c
      Queria a partir de um ficheiro fazer varias somas do seu conteúdo por exemplo de caracteres especiais, vogais, letra "a" , números, De forma a que devolve-se por exemplo 5 linhas, 4 caracteres especiais, 7 vogais, 9 "a", 6 numeros, num total de 40 caracteres, para os numeros fiz um if, para a função mas não funciona como devia
      while( (texto[MAX]=fgetc(textos))!= EOF ) if(texto[MAX] == '\n') linha++; printf("Existem %d linhas no arquivo\n", linha); if (i == '0' || i == '1' || i == 2' || i == '3' || i == '4' || i == '5' || i == 6' || i == '7' || i == '8'|| i == '9' ) Ajuda seria bem vinda, que queria perceber bem isto
    • Por Maicon Santos
      Foi me passada a tarefa de fazer um sistema onde o usuário (funcionário 1) (Funcionário da empresa X) irá fazer um cadastro com suas informações, após esse cadastro essas informações serão avaliadas por outro funcionário (funcionário 2) da empresa X que fica responsável apenas por verificar as informações desse usuário e dar permissões a ele. Até então é um sistema simples de cadastro.
      Após o funcionário 1 fazer o cadastro o funcionário 2 avaliará essas informações para ver se esse usuário pode ter acesso a conta bancária da empresa. (Pera! Como assim?) Exatamente isso, o usuário vai se cadastrar e se ele for apto a acessar a conta bancária da empresa o sistema terá que fazer o login na conta bancária da empresa, ou seja o sistema deve apenas verificar os dados do funcionário 1, se ele for apto abrir a conta da empresa o sistema terá que passar os dados pelo internet banking do Santander.
       
      Um outro exemplo que talvez facilite entender:
      Os funcionários 1, 2 e 3 trabalham juntos gerenciando as finanças da empresa, então todos eles precisam acessar a conta bancaria da empresa, mas o gerente para não ter que passar o login e senha para eles quer que o sistema faça esse login, sem que os funcionários saibam esses devidos dados, então os funcionários farão um cadastro no sistema e após fazer o login no mesmo eles automaticamente fazem o login na conta do Santander da empresa
       
      Basicamente isso, minhas dúvidas até o momento:
      Isso é realmente possível? Fazer o login no internet banking, que tem a função de ser muito seguro, através de um outro sistema
      Eu tenho a disponibilidade para escolher entre fazer um sistema desktop (usando C#, que eu tenho mais domínio) ou fazer um sistema WEB (que eu não possuo tanto domínio assim das linguagens), para fazer esse tipo de trabalho, o que seria mais indicado?
      Quais dicas vocês podem me dar para essa tarefa? Eu trabalho na área de desenvolvimento a pouco tempo, por isso não tenho muito conhecimento de sistemas desse nível, qualquer direção será de grande ajuda.
      Grato!
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.