Ver Mensaje Individual
  #11  
Antiguo 19-10-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.761
Reputación: 7
ermendalenda Va por buen camino
Cita:
Empezado por bmfranky Ver Mensaje
La verdad es que opinaba lo mismo que tu de enviar el codigo , pero realmente con el xml formado simplemengte hay que añadir las cabecerass y ending soap y enviar por https, y lo acepta sin mas.
Aqui os dejo la funcion que realiza la consulta a la AEAT, por si a alguienle sirve , segun esta formada necesita que se creen unavarialble que contenga el certificado y otra con la clave del mismo.
byte[] Program.certificado , esta variable contiene el certificado usado para firmar la conexion

string Program.passcertificado, esta variable contiene la clave del certificado

[CODE C#]
/// <summary>
/// Llama a al web service de la AEAT para el VeriFactu seleccionado.
/// </summary>
/// <param name="url">Url destino.</param>
/// <param name="action">Acción a ejecutar.</param>
/// <param name="xmlDocument">Documento soap xml.</param>
/// <returns>Devuelve la respuesta.</returns>
protected static string Call(string url, string action, XmlDocument xmlDocument)
{
HttpWebRequest webRequest = CreateWebRequest(url, action);
X509Certificate2 certificate = new X509Certificate2(Program.certificado, Program.passcertificado); // Aqui se carga el certificado, yo lo almaceno en la base de datos, pero podriai s cargarlo desde un archivo
var tiempo = certificate.SubjectName;
if (certificate == null)
throw new ArgumentNullException(
"Certificate is null. Maybe serial number in configuration was wrong.");

if (certificate.NotAfter < DateTime.Now)
throw new ArgumentNullException(
$"Certificate is out of date. NotAfter: {certificate.NotAfter}.");

webRequest.ClientCertificates.Add(certificate);

using (Stream stream = webRequest.GetRequestStream())
{
xmlDocument.Save(stream);
}
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
string statusDescription = response.StatusDescription;
Stream dataStream = response.GetResponseStream();
string responseFromServer;
using (StreamReader reader = new StreamReader(dataStream))
{
responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
}
return responseFromServer;
}

[/code]
Wow
Te sería muy complicado poner ecomo quedaria formado el xml empaquetado, buff ojalá.