Estou implementando o envio de notas de serviço para a cidade de Fortaleza e estou esbarrando em um problema com o XML de consulta de envio de lote.
A prefeitura de Fortaleza exige que o xml de consulta seja assinado (a do Rio que foi a primeira que eu implementei não exige), mas na hora de assinar qual dado eu devo usar como referência para a assinatura? No envio de lote por exemplo uso Id do LoteRps.
Alguém tem algum exemplo de xml de consulta de envio de lote para Fortaleza e pode me dizer como fez para fazer a assinatura? Estou usando C#, abaixo tem o metodo de assinatura que eu uso.
public static void AssinaXML(XmlDocument xml, X509Certificate2 certificate, string signedNodeName, string parentNode, string idnode)
{
XmlNodeList SignedNode = xml.GetElementsByTagName(signedNodeName);
SignedXml signedXml;
foreach (XmlElement node in SignedNode)
{
string id = node.Attributes.GetNamedItem(idnode) != null ? node.Attributes.GetNamedItem(idnode).InnerText : string.Empty;
signedXml = new SignedXml(node);
signedXml.SigningKey = certificate.PrivateKey;
Reference reference = new Reference("#" + id);
reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
reference.AddTransform(new XmlDsigC14NTransform());
signedXml.AddReference(reference);
KeyInfo keyInfo = new KeyInfo();
keyInfo.AddClause(new KeyInfoX509Data(certificate));
signedXml.KeyInfo = keyInfo;
signedXml.ComputeSignature();
XmlElement xmlSignature = xml.CreateElement("Signature", "http://www.w3.org/2000/09/xmldsig#");
XmlElement xmlSignedInfo = signedXml.SignedInfo.GetXml();
XmlElement xmlKeyInfo = signedXml.KeyInfo.GetXml();
XmlElement xmlSignatureValue = xml.CreateElement("SignatureValue", xmlSignature.NamespaceURI);
string signBase64 = Convert.ToBase64String(signedXml.Signature.SignatureValue);
XmlText text = xml.CreateTextNode(signBase64);
xmlSignatureValue.AppendChild(text);
xmlSignature.AppendChild(xml.ImportNode(xmlSignedInfo, true));
xmlSignature.AppendChild(xmlSignatureValue);
xmlSignature.AppendChild(xml.ImportNode(xmlKeyInfo, true));
var evento = xml.GetElementsByTagName(parentNode);
evento[0].AppendChild(xmlSignature);
}
}