-
Notifications
You must be signed in to change notification settings - Fork 1
/
Endpoints.cs
107 lines (93 loc) · 4.09 KB
/
Endpoints.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
Classe com as funções para localizar os endereços dos serviços no arquivo xml
Autor: Vinícius Rossmann Nunes
Ultima modificação: outubro/2020 - implementado
*/
using System.Xml;
using System.Reflection;
namespace DFe_Util_HM
{
class Endpoints
{
//Função que obtem o endpoint para as operações de distribuição (DFeDistribuicao)
//Atenção: tipoDoc deve ser passado como está no arquivo de endpoints (NFe, CTe, etc.)
public string getUrlDistribuicao(string tipoDoc, int ambiente)
{
try
{
//obtem o documento xml que contem as urls
XmlDocument doc = getArquivoURL();
//Se não conseguir obter o arquivo, retorna nulo
if (doc == null) return null;
//seleciona o nó do arquivo xml de acordo com o documento (NFe, CTe)
XmlNode nodeDocumento = doc.GetElementsByTagName(tipoDoc).Item(0);
if (nodeDocumento == null) return null;
//Obtem a url desejada de acordo com o ambiente (homologacao/distribuicao)
string sAmb;
sAmb = ambiente == 1 ? "producao" : "homologacao";
XmlNode nodeWS = nodeDocumento.SelectSingleNode("descendant::distribuicao").SelectSingleNode("descendant::" + sAmb);
return nodeWS.InnerText;
}
catch
{
//caso ocorra erro durante a execução, retorna nulo
return null;
}
}
//Função que obtem o endpoint para operações de NF-e e NFC-e
public string getUrlNFE(string siglaWS, int ambiente, string operacao, bool nfc)
{
try
{
//Coloca a sigla em caracteres maiúsculos (assim como está no arquivo xml)
siglaWS = siglaWS.ToUpper();
//obtem o documento xml que contem as urls
XmlDocument doc = getArquivoURL();
//Se não conseguir obter o arquivo, retorna nulo
if (doc == null) return null;
XmlNode nodeNFCe = null;
XmlNode nodeAmbiente = null;
//Se for NFC-e procura primeiro nos webservices específicos para NFC-e
if (nfc) {
nodeNFCe = doc.GetElementsByTagName("NFCe").Item(0);
nodeAmbiente = nodeNFCe.SelectSingleNode("descendant::ambiente[sigla='" + siglaWS + "']");
}
//Caso não seja NFC ou não tenha encontrado, procura nos webservices de NF-e
if (nodeAmbiente == null)
{
XmlNode nodeNFe = doc.GetElementsByTagName("NFe").Item(0);
nodeAmbiente = nodeNFe.SelectSingleNode("descendant::ambiente[sigla='" + siglaWS + "']");
}
//Caso ainda não tenha encontrado, retorna nulo
if (nodeAmbiente == null) return null;
//Obtem a URL para o ambiente e operação específico
string sAmb;
sAmb = ambiente == 1 ? "producao" : "homologacao";
var nodeWebService = nodeAmbiente.SelectSingleNode("descendant::"+sAmb+"").SelectSingleNode("descendant::"+operacao);
return nodeWebService.InnerText;
}
catch
{
//caso ocorra erro durante a execução, retorna nulo
return null;
}
}
//Função que obtém o documento XML que possui os endpoints (webservices4.xml)
private XmlDocument getArquivoURL()
{
try
{
string path = Assembly.GetExecutingAssembly().CodeBase.Replace("file:\\", "").ToUpper().Replace("DFE_UTIL_HM.DLL", "");
path += "URL\\webservices4.xml";
XmlDocument doc = new XmlDocument();
doc.Load(path);
return doc;
}
catch
{
//caso ocorra erro durante a execução, retorna nulo
return null;
}
}
}
}