Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #11  
Antiguo 19-10-2024
Avatar de bmfranky
bmfranky bmfranky is offline
Miembro
 
Registrado: may 2024
Ubicación: Gandia, Valencia
Posts: 863
Poder: 3
bmfranky Va por buen camino
Enviar a pelo xml en c#

Cita:
Empezado por ermendalenda Ver Mensaje
Ni idea, aun no me he metido con los envíos, los compañeros seguro que te ayudan. Pero tienes que hener en cuenta que el xml no se manda tal cual. Tienes que empaquetarlo como soap, en eso no te puedo ayudar,.por que a pelo un soap es complicado (praxticamente i posible si nl conoces en profundidad coml funcionan las funciones de firmas etc), hay que firmados con hash etc.
Pero con autoafirma.exe si puedes investigar, aunque tun pelin complicado y no se si se ajustará a los tiempos que necesitas para las generaciones. La otra opción es que compras alguna función api/dll para estas cosas, hay un par de ellas que son adaptables a casi cualquier software de desarrollo antiguo
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.
Cita:
//facxml es un string que contiene el xml añadimos cabecera

facXml = facXml.Replace("<?xml version=\"1.0\" encoding=\"utf-16\"?>", "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Header /> <soapenv:Body >");
//en mi caso me generaba mal esta etiqueta

facXml = facXml.Replace("<RegFactuSistemaFacturacion xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">", "<RegFactuSistemaFacturacion xmlns=\"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd\">");
//añadimos el ending soap.
facXml = facXml + " </soapenv:Body> </soapenv:Envelope > ";
//lo pasamos a un document para poder realizar la llamada

XmlDocument doc = new XmlDocument();
doc.LoadXml(facXml.Replace("utf-16", "utf-8"));
//llamamos a la funcion que hace la consula soap

string ret = Call("https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP", "RegistroAlta", doc);
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]
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Hijo de Informáticos gluglu Humor 3 13-03-2007 11:05:35
Adictos informaticos ... Trigger Humor 2 11-10-2004 12:18:32
Nosotros los Informáticos Trigger Humor 1 10-10-2004 14:58:09
Patrón de los Informáticos. obiwuan Varios 20 10-09-2003 14:44:54
Chistes Informaticos jhonny Humor 2 11-08-2003 21:59:09


La franja horaria es GMT +2. Ahora son las 12:07:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi