![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#3101
|
|||
|
|||
|
Cita:
|
|
#3102
|
|||
|
|||
|
Cita:
Edit: Disculpa , ya lo encontré, en cotejo de documentos Última edición por pablog2k fecha: 22-10-2024 a las 10:02:03. |
|
#3103
|
|||
|
|||
|
Cita:
Hola ermendalenda como lo haces para obtener toda la respuesta html completa en el caso de un error en el certificado? Acabo de hacer la prueba con un certificado no válido y ha saltado una excepción al enviar, de tipo ProtocolException y en el mensaje hay los primeros 1024 caracteres de lo que has posteado tu pero no está entero y no puedo ver la parte del error de certificado. Dice solo esto: Código PHP:
Yo utilizo C# .Net Muchas gracias |
|
#3104
|
||||
|
||||
|
Cita:
Sobretodo ahora que aveces responden el nuevo campo type vacio y da error. |
|
#3105
|
|||
|
|||
|
Cita:
Gracias |
|
#3106
|
|||
|
|||
|
Me apunto a la explicacion
|
|
#3107
|
|||
|
|||
|
si trabajais con Delphi, en el componente HTTPRIO que hace el envío, evento OnAfterExecute:
ahí os guarda la respuesta en la ruta que indiquéis |
|
#3108
|
|||
|
|||
|
Sabéis si han cambiado algo respecto al calculo de la huella digital. ???
De repente me dice que no coincide. esto es lo que indica la respuesta de AEAT DescripcionErrorRegistro>El cálculo de la huella suministrada es incorrecta. Datos de entrada cálculo huella: IDEmisorFactura=33461360V&NumSerieFactura=02-2024-13784&FechaExpedicionFactura=21-10-2024&TipoFactura=F1&CuotaTotal=1.81&ImporteTotal=10.45&Huella=C0E0A0F622EFF0A77A41E4 7C13972AEAB8E05A85E81D6B873942238A1A670BC5&FechaHoraHusoGenRegistro=2024-10-22T11:15:05+02:00 Huella calculada: 12EB4A6836E721DB0737F03A04EBDFF73D35B3A3D097F549548F00A259C65AFD |
|
#3109
|
||||
|
||||
|
Cita:
Cita:
Hola, he implementado esta funcion , si la de aeat da error de serializacion o otro no interpretable uso esta. Código:
/// <summary>
/// Envio del registro de la factura a la aeat
/// </summary>
/// <param name="facAPresentar">Registro creado con las funciones de la aeat.</param>
/// <param name="action">Accion a realizar por defecto registro alta</param>
/// <returns>Devuelve la respuesta completa de la aeat</returns>
public string consultaAEAT(RegFactuSistemaFacturacion facAPresentar,string action = "RegistroAlta")
{
XmlSerializer serializaFactura = new XmlSerializer(typeof(RegFactuSistemaFacturacion));
string facXml = "";
using (var xmlw = new StringWriter())
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.Encoding = Encoding.UTF8;
using (XmlWriter writter = XmlWriter.Create(xmlw, settings))
{
serializaFactura.Serialize(writter, facAPresentar);
facXml = xmlw.ToString();
}
}
facXml = facXml.Replace("<?xml version=\"1.0\" encoding=\"utf-16\"?>", "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Header /> <soapenv:Body >");
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\">");
//facXml = facXml.Replace("</SistemaInformatico>", "</SistemaInformatico> \r\n <FechaHoraHusoGenRegistro xmlns=\"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd\">" + timeStamp +"</FechaHoraHusoGenRegistro>");
facXml = facXml + " </soapenv:Body> </soapenv:Envelope > ";
////////////////////////// <----- Prueba extraccion sin serializar
XmlDocument doc = new XmlDocument();
doc.LoadXml(facXml.Replace("utf-16", "utf-8"));
HttpWebRequest webRequest = CreateWebRequest("https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP", action);
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
X509Certificate2 certificate = new X509Certificate2(Program.certificado, Program.passcertificado); //requiere estas variables globalescontienen el certificado y su clave
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())
{
doc.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;
//retorno = client.RegFactuSistemaFacturacion(facAPresentar);
}
|
|
#3110
|
||||
|
||||
|
Cita:
|
|
#3111
|
||||
|
||||
|
Cita:
Código:
/// <summary>
/// Crea la instancia WebRequest para enviar la petición
/// al web service de la AEAT.
/// </summary>
/// <param name="url">Url del web service.</param>
/// <param name="action">Acción del web service.</param>
/// <returns></returns>
private static HttpWebRequest CreateWebRequest(string url, string action)
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Headers.Add("SOAPAction", action);
webRequest.ContentType = "text/xml;charset=\"utf-8\"";
webRequest.Accept = "text/xml";
webRequest.Method = "POST";
return webRequest;
}
Código:
string retornoConsulta = consultaAEAT(facAPresentar); Última edición por bmfranky fecha: 22-10-2024 a las 14:08:16. |
|
#3112
|
||||
|
||||
|
Funcion para pasar el xml generado a la AEAT
Hola, adjunto la funcion en c# par aenviar la consulta a la aeat, sin usar la funcion del xlsd, para evitar los fallos de parseo.
Código:
/// <summary>
/// Envio el registro de la factura a la aeat
/// </summary>
/// <param name="facAPresentar">Registro creado con las funciones de la aeat.</param>
/// <param name="certificado">arreglo en bytes que contiene el certificado</param>
/// <param name="passcertificado">Password necesario para acceder al certificado</param>
/// <returns>Devuelve la respuesta completa de la aeat</returns>
public string consultaAEAT(RegFactuSistemaFacturacion facAPresentar,byte[] certificado,string passcertificado)
{
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
XmlSerializer serializaFactura = new XmlSerializer(typeof(RegFactuSistemaFacturacion));
string facXml = "";
using (var xmlw = new StringWriter())
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.Encoding = Encoding.UTF8;
using (XmlWriter writter = XmlWriter.Create(xmlw, settings))
{
serializaFactura.Serialize(writter, facAPresentar);
facXml = xmlw.ToString();
}
}
facXml = facXml.Replace("<?xml version=\"1.0\" encoding=\"utf-16\"?>", "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Header /> <soapenv:Body >");
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\">");
//facXml = facXml.Replace("</SistemaInformatico>", "</SistemaInformatico> \r\n <FechaHoraHusoGenRegistro xmlns=\"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd\">" + timeStamp +"</FechaHoraHusoGenRegistro>");
facXml = facXml + " </soapenv:Body> </soapenv:Envelope > ";
////////////////////////// <----- Prueba extraccion sin serializar
XmlDocument doc = new XmlDocument();
doc.LoadXml(facXml.Replace("utf-16", "utf-8"));
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP");
//webRequest.Headers.Add("SOAPAction", action);
webRequest.ContentType = "text/xml;charset=\"utf-8\"";
webRequest.Accept = "text/xml";
webRequest.Method = "POST";
X509Certificate2 certificate = new X509Certificate2(certificado, passcertificado); //requiere estas variables globalescontienen el certificado y su clave
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())
{
doc.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;
}
Se usaria asi. Cita:
Ya me comentais si a alguien le ha resultado util. |
|
#3113
|
||||
|
||||
|
Gracias por el aporte. Actualizo el mensaje#2
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#3114
|
|||
|
|||
|
Cita:
Muchas gracias bmfranky, de esta forma si puedo obtener el html completo, que en mi caso es una página web de hacienda con el error 403 indicando que hay algún problema con el certificado. a ver si puedo sacar textos limpios para mostrar al usuario. Saludos |
|
#3115
|
||||
|
||||
|
Cita:
Hola, puede probar esto, a mi me funciona, me devuelve el codigo de error y el texto del mismo. Cita:
|
|
#3116
|
|||
|
|||
|
Lo acabo de probar y me funciona. Muchas gracias bmfranky
|
|
#3117
|
|||
|
|||
|
Error con httprio
al ejecutar la siguiente línea de código :
var res:RespuestaRegFactuSistemaFacturacion := RespuestaRegFactuSistemaFacturacion.Create; try ----> res := GetsfPortTypeVerifactu( False, '', HTTPRIO1 ).RegFactuSistemaFacturacion( RegFactuSisFactu ); except end; |
|
#3118
|
|||
|
|||
|
Cita:
Hola, estoy planteándome hacer el desarrollo en Delphi o en C# (mundo en el que estoy empezando por completo). ¿Podrías poner un pequeño ejemplo de como una vez importado el wsdl se van inicializando y rellenando los nodos de la factura para posteriormente hacer el envío?. Gracias de antemano. |
|
#3119
|
||||
|
||||
|
Ejemplo paso a paso c#
Código:
//creamos la factura paso a paso.
RegFactuSistemaFacturacion facAPresentar = new RegFactuSistemaFacturacion();
//rellenamos la cabecera
ServicioVerifactu.Cabecera cabecera = new ServicioVerifactu.Cabecera();
//creamos obligado presentador y se lo asignamos.
ServicioVerifactu.PersonaFisicaJuridicaESType yo = new ServicioVerifactu.PersonaFisicaJuridicaESType();
yo.NIF = Program.configTaller.Nif;
yo.NombreRazon = Program.configTaller.NombreTaller;
//se lo asignamos a la cabecera
cabecera.ObligadoEmision = yo;
//Creamos especificacion de remision voluntaria y la asignamos a la cabecera
ServicioVerifactu.CabeceraRemisionVoluntaria voluntaria = new ServicioVerifactu.CabeceraRemisionVoluntaria();
voluntaria.Incidencia = ServicioVerifactu.IncidenciaType.N;
voluntaria.FechaFinVeriFactu = "";
voluntaria.IncidenciaSpecified = true;
//voluntaria.IncidenciaSpecified = false;
cabecera.RemisionVoluntaria = voluntaria;
// Asignamos la cabecera a la factura.
facAPresentar.Cabecera = cabecera;
//creamos el registro de factura podrian ser varios, pero solo asignaremos uno.
ServicioVerifactu.RegistroFacturaType[] registroFactura = new ServicioVerifactu.RegistroFacturaType[1];
//Como vamos a dar de alta la factura , creamos el registro de alta
ServicioVerifactu.RegistroFacturacionAltaType altaFactura = new ServicioVerifactu.RegistroFacturacionAltaType();
//Asignamos el ID version
altaFactura.IDVersion = ServicioVerifactu.VersionType.Item10;//de momento la unica accesible
//Identificamos la factura y lo asignamos a el Alta
ServicioVerifactu.IDFacturaExpedidaType iDFactura = new ServicioVerifactu.IDFacturaExpedidaType();
iDFactura.FechaExpedicionFactura = fechaFactura.Text;//Fecha de presentacion de la factura.
iDFactura.IDEmisorFactura = Program.configTaller.Nif;//NIF del obligado emisor
iDFactura.NumSerieFactura = numFactura;//numeo de factura y serie
altaFactura.IDFactura = iDFactura;
Program.facturaSeleccionada.Fecha = fechaFactura.Text;
//asignamos nombre expedidor
altaFactura.NombreRazonEmisor = Program.configTaller.NombreTaller;
//Es por subsanacion ?
altaFactura.Subsanacion = ServicioVerifactu.SubsanacionType.N;
// Se havia rechazado ?
altaFactura.RechazoPrevio = ServicioVerifactu.RechazoPrevioType.N;
if(alta == "RECHAZO")
{
//Es por subsanacion ?
altaFactura.Subsanacion = ServicioVerifactu.SubsanacionType.S;
// Se havia rechazado ?
altaFactura.RechazoPrevio = ServicioVerifactu.RechazoPrevioType.X;
}
if (alta == "SUBSANACION")
{
//Es por subsanacion ?
altaFactura.Subsanacion = ServicioVerifactu.SubsanacionType.S;
// Se havia rechazado ?
altaFactura.RechazoPrevio = ServicioVerifactu.RechazoPrevioType.N;
}
if (alta == "RECHAZO_SUBSANACION")
{
//Es por subsanacion ?
altaFactura.Subsanacion = ServicioVerifactu.SubsanacionType.S;
// Se havia rechazado ?
altaFactura.RechazoPrevio = ServicioVerifactu.RechazoPrevioType.S;
}
//Que tipo de factura estamos creando?
altaFactura.TipoFactura = ServicioVerifactu.ClaveTipoFacturaType.F1;
/*
//Si es rectificativa lo indicamos y cumplimentamos los datos requeridos ya sea rectificada o sustituida son el mismo diseño
altaFactura.TipoRectificativa = ServicioVerifactu.ClaveTipoRectificativaType.I;
Program.FacturaSeleccionada.Tipo=
//aqui consignariamos los datos de las facturas para sutitucion y demas.
int numeroFaR = 1;
ServicioVerifactu.IDFacturaARType[] listFacturasRectificadas = new ServicioVerifactu.IDFacturaARType[numeroFaR];// creamos lista de facturas rectificadas.
ServicioVerifactu.IDFacturaARType facSust = new ServicioVerifactu.IDFacturaARType();//rellenamos la primera
facSust.FechaExpedicionFactura = "FECHA"; //Fecha de emision factura sustituida
facSust.IDEmisorFactura = Program.configTaller.Nif;//Nif expedidor.
facSust.NumSerieFactura = "Num Serie"; //Numero de serie factura sustituida
listFacturasRectificadas[1] = facSust; //le asignamos una por una las facturas rectificadas
altaFactura.FacturasSustituidas = listFacturasRectificadas; //Asignamos al mandato
//creamos desglose de la rectificacion con los totales a rectificar
ServicioVerifactu.DesgloseRectificacionType desgloseRectificacion = new ServicioVerifactu.DesgloseRectificacionType();
desgloseRectificacion.BaseRectificada = ""; // Cuota base a rectificar
desgloseRectificacion.CuotaRecargoRectificado = "";// Hay recargo equivalencia ??
desgloseRectificacion.CuotaRectificada = ""; //Cuota iva rectificada;
altaFactura.ImporteRectificacion = desgloseRectificacion; // asignamos importe de la rectificacion
*/
//Asignamos la fecha en que se izo la operacion si no es en la misma que se expide la factura, en este caso si es la misma, si fuera de reparacion puede variar
altaFactura.FechaOperacion = fechaFactura.Text.Replace("/", "-");
//Asignamos motivo descripcion de la operacion , en este caso venta de materiales;
altaFactura.DescripcionOperacion = "Venta de materiales servidos.";// en caso de reparacion de vehiculo asignar aqui la reparacion.
//Es factura simplificada s/n
altaFactura.FacturaSimplificadaArt7273 = ServicioVerifactu.SimplificadaCualificadaType.N;
//Es factura sin identificar destinatario? s/n
altaFactura.FacturaSinIdentifDestinatarioArt61d = ServicioVerifactu.CompletaSinDestinatarioType.N;
//por tercero ??
//altaFactura.EmitidaPorTerceroODestinatario = ServicioVerifactu.TercerosODestinatarioType.T;
/*
// aqui se consignaria todo lo de terceros.
ServicioVerifactu.PersonaFisicaJuridicaType Tercero = new ServicioVerifactu.PersonaFisicaJuridicaType();
Tercero.NombreRazon = "";
ServicioVerifactu.IDOtroType idTercero = new ServicioVerifactu.IDOtroType();
idTercero.CodigoPais = ServicioVerifactu.CountryType2.ES;
idTercero.ID = "nif"; //identificador
idTercero.IDType = ServicioVerifactu.PersonaFisicaJuridicaIDTypeType.Item02;
Tercero.Item = idTercero;
altaFactura.Tercero = Tercero;
*/
int numDestinatarios = 1;
ServicioVerifactu.PersonaFisicaJuridicaType[] destinatarios = new ServicioVerifactu.PersonaFisicaJuridicaType[numDestinatarios];//lista de destinatarios, para mi siempre 1
//primer destinatario
ServicioVerifactu.PersonaFisicaJuridicaType destinatario = new ServicioVerifactu.PersonaFisicaJuridicaType(); //creamos nuevo destinatario
if (cmbPais.Text != "ESPAÑA" || _documento.Text != "NIF-IVA")
{
ServicioVerifactu.IDOtroType idOtro = new ServicioVerifactu.IDOtroType();
destinatario.NombreRazon = nom.Text + " " + Apellido1.Text + " " + Apellido2.Text;
idOtro.CodigoPais = ServicioVerifactu.CountryType2.ES;// hallar el pais
idOtro.ID = Dni.Text;
idOtro.IDType = tipoPersona(_documento.SelectedIndex);
destinatario.Item = idOtro;
}
else
{
//ServicioVerifactu.PersonaFisicaJuridicaESType cliente = new ServicioVerifactu.PersonaFisicaJuridicaESType();
destinatario.NombreRazon = nom.Text + " " + Apellido1.Text + " " + Apellido2.Text;
//cliente.NIF = Dni.Text;
//cliente.NombreRazon = nom.Text + " " + Apellido1.Text + " " + Apellido2.Text;
destinatario.Item = Dni.Text; //cliente;
}
destinatarios[0] = destinatario;
//se los asignamos a la factura
altaFactura.Destinatarios = destinatarios;
// ahora creamos el desglose uno por tipo de iva
ServicioVerifactu.DetalleType[] desgloses = new ServicioVerifactu.DetalleType[numeroIvas];
//iva 21%
if (asignado21)
{
ServicioVerifactu.DetalleType tipo21 = new ServicioVerifactu.DetalleType();
tipo21.Impuesto = ServicioVerifactu.ImpuestoType.Item01;
tipo21.ClaveRegimen = ServicioVerifactu.IdOperacionesTrascendenciaTributariaType.Item01;//Operaciones regimen general
tipo21.ClaveRegimenSpecified = true;
tipo21.Item = ServicioVerifactu.CalificacionOperacionType.S1;//no esta exenta ni es por inversion del sujeto pasivo...
tipo21.TipoImpositivo = "21.00";
tipo21.BaseImponibleOimporteNoSujeto = (base21 + totalPortes).ToString("F2").Replace(",", ".");// impon21.Text.Replace(",", ".").Replace(" €", "");
bases = bases + base21 + totalPortes;// float.Parse(impon21.Text.Replace(" €",""));
tipo21.CuotaRepercutida = float.Parse(cuota21.Text.Replace(" €", "")).ToString("F2").Replace(",", ".");// cuota21.Text.Replace(",", ".").Replace(" €", "");
cuotas = cuotas + float.Parse(cuota21.Text.Replace(" €", ""));
desgloses[numDetalle] = tipo21;
numDetalle++;
}
//iva10%
if (asignado10)
{
ServicioVerifactu.DetalleType tipo10 = new ServicioVerifactu.DetalleType();
tipo10.ClaveRegimenSpecified = true;
tipo10.Impuesto = ServicioVerifactu.ImpuestoType.Item01;
tipo10.ClaveRegimen = ServicioVerifactu.IdOperacionesTrascendenciaTributariaType.Item01;//Operaciones regimen general
tipo10.Item = ServicioVerifactu.CalificacionOperacionType.S1;//no esta exenta ni es por inversion del sujeto pasivo...
tipo10.TipoImpositivo = "10.00";
tipo10.BaseImponibleOimporteNoSujeto = float.Parse(impon10.Text.Replace(" €", "")).ToString("F2").Replace(",", ".");// impon10.Text.Replace(",", ".").Replace(" €", "");
bases = bases + float.Parse(impon10.Text.Replace(" €", ""));
tipo10.CuotaRepercutida = float.Parse(cuota10.Text.Replace(" €", "")).ToString("F2").Replace(",", ".");// cuota10.Text.Replace(",", ".").Replace(" €", "");
cuotas = cuotas + float.Parse(cuota10.Text.Replace(" €", ""));
desgloses[numDetalle] = tipo10;
numDetalle++;
}
//Iva4%
if (asignado4)
{
ServicioVerifactu.DetalleType tipo04 = new ServicioVerifactu.DetalleType();
tipo04.Impuesto = ServicioVerifactu.ImpuestoType.Item01;
tipo04.ClaveRegimen = ServicioVerifactu.IdOperacionesTrascendenciaTributariaType.Item01;//Operaciones regimen general
tipo04.ClaveRegimenSpecified = true;
tipo04.Item = ServicioVerifactu.CalificacionOperacionType.S1;//no esta exenta ni es por inversion del sujeto pasivo...
tipo04.TipoImpositivo = "04.00";
tipo04.BaseImponibleOimporteNoSujeto = float.Parse(impon4.Text.Replace(" €", "")).ToString("F2").Replace(",", "."); //impon4.Text.Replace(",", ".").Replace(" €", "");
bases = bases + float.Parse(impon4.Text.Replace(" €", ""));
tipo04.CuotaRepercutida = float.Parse(cuota10.Text.Replace(" €", "")).ToString("F2").Replace(",", "."); // cuota4.Text.Replace(",", ".").Replace(" €", "");
cuotas = cuotas + float.Parse(cuota4.Text.Replace(" €", ""));
desgloses[numDetalle] = tipo04;
numDetalle++;
}
//sin iva
if (asignado0)
{
ServicioVerifactu.DetalleType tipo0 = new ServicioVerifactu.DetalleType();
tipo0.Impuesto = ServicioVerifactu.ImpuestoType.Item01;
tipo0.ClaveRegimen = ServicioVerifactu.IdOperacionesTrascendenciaTributariaType.Item01;//Operaciones regimen general
tipo0.ClaveRegimenSpecified = true;
tipo0.Item = ServicioVerifactu.CalificacionOperacionType.N1;//si esta exenta
tipo0.TipoImpositivo = "0.00";
tipo0.BaseImponibleOimporteNoSujeto = float.Parse(impon0.Text.Replace(" €", "")).ToString("F2").Replace(",", ".");// impon0.Text.Replace(",", ".").Replace(" €", "");
bases = bases + float.Parse(impon0.Text.Replace(" €", ""));
//tipo0.CuotaRepercutida = cuota0.Text;
desgloses[numDetalle] = tipo0;
numDetalle++;
}
// se lo asignamos a la factura
altaFactura.Desglose = desgloses;
//asignamos total impuestos
altaFactura.CuotaTotal = cuotas.ToString("F2").Replace(",", ".");
total = cuotas + bases;
//asignamos total factura;
altaFactura.ImporteTotal = total.ToString("F2").Replace(",", ".");
//creamos el encadenamiento
ServicioVerifactu.RegistroFacturacionAltaTypeEncadenamiento cadenaFactura = new ServicioVerifactu.RegistroFacturacionAltaTypeEncadenamiento();
Huella huella = new Huella();
HuellaVerifactu huellaAnterior = new HuellaVerifactu();
string _huella = "";
if (huella.numeroHash() > 0)
{
ServicioVerifactu.EncadenamientoFacturaAnteriorType anterior = new ServicioVerifactu.EncadenamientoFacturaAnteriorType();
huellaAnterior = huella.huellaAnterior();
anterior.FechaExpedicionFactura = huellaAnterior.FechaFactura;
anterior.IDEmisorFactura = huellaAnterior.IdEmisor;
anterior.NumSerieFactura = huellaAnterior.NumFactura;
anterior.Huella = huellaAnterior.Huella;
_huella = huellaAnterior.Huella;
cadenaFactura.Item = anterior;
}
else
{
cadenaFactura.Item = ServicioVerifactu.PrimerRegistroCadenaType.S;
}
altaFactura.Encadenamiento = cadenaFactura;
//ahora identificamos el software
ServicioVerifactu.SistemaInformaticoType programaFacturacion = new ServicioVerifactu.SistemaInformaticoType();
programaFacturacion.NombreSistemaInformatico = "Facturas Taller 2024";//nombre programa
programaFacturacion.NombreRazon = " ";
programaFacturacion.Item = " ";
programaFacturacion.Version = Program.version;
programaFacturacion.IdSistemaInformatico = "A1";
programaFacturacion.NumeroInstalacion = Program.numeroInstalacion;//numero de instalacion
programaFacturacion.TipoUsoPosibleSoloVerifactu = ServicioVerifactu.SiNoType.S;//es verifactu
programaFacturacion.TipoUsoPosibleMultiOT = ServicioVerifactu.SiNoType.N;//varias empresas a la vez
programaFacturacion.IndicadorMultiplesOT = ServicioVerifactu.SiNoType.N;
//ServicioVerifactu.PersonaFisicaJuridicaType[] Destinatarios = new ServicioVerifactu.PersonaFisicaJuridicaType[1];
altaFactura.SistemaInformatico = programaFacturacion;//asignamos tipo systema
altaFactura.TipoHuella = ServicioVerifactu.TipoHuellaType.Item01;//solo se admite un tipo
var fechora = DateTime.Now;
timeStamp = fechora.ToString("yyyy-MM-dd'T'HH:mm:ssK");
altaFactura.FechaHoraHusoGenRegistro = timeStamp;// - new TimeSpan(0, 0, 0, 0, fechora.TimeOfDay.Milliseconds);
//timeStamp = fechora.ToString("yyyy-MM-dd'T'HH:mm:ssK");
altaFactura.Huella = huella.creaHuellaFactura(Program.configTaller.Nif, numFactura, fechaFactura.Text, tipoFactura, cuotas.ToString("F2").Replace(",", "."), total.ToString("F2").Replace(",", "."), _huella, timeStamp);//asignamos huella
//registroFactura[1].Item = altaFactura;
ServicioVerifactu.RegistroFacturaType[] fac = new ServicioVerifactu.RegistroFacturaType[1];
//fac.Initialize();
fac[0] = new ServicioVerifactu.RegistroFacturaType();
fac[0].Item = altaFactura;
facAPresentar.RegistroFactura = fac;
//ServicioVerifactu.RegFactuSistemaFacturacionRequest envio = new ServicioVerifactu.RegFactuSistemaFacturacionRequest();
//envio.RegFactuSistemaFacturacion = facAPresentar;
///////////////////////////// <--- Prueba de serializar la factura --->
XmlSerializer serializaFactura = new XmlSerializer(typeof(ServicioVerifactu.RegFactuSistemaFacturacion));
SoapAttributes soap = new SoapAttributes();
string facXml = "";
using (var xmlw = new StringWriter())
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.Encoding = Encoding.UTF8;
using (XmlWriter writter = XmlWriter.Create(xmlw, settings))
{
serializaFactura.Serialize(writter, facAPresentar);
facXml = xmlw.ToString();
}
}
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
RegFactuSistemaFacturacionResponse response = new ServicioVerifactu.RegFactuSistemaFacturacionResponse();
// response.RespuestaRegFactuSistemaFacturacion = respuesta;
ServicioVerifactu.RegFactuSistemaFacturacionRequest req = new ServicioVerifactu.RegFactuSistemaFacturacionRequest(facAPresentar);
req.RegFactuSistemaFacturacion.Cabecera = cabecera;
ServicioVerifactu.X509DataType x59 = new ServicioVerifactu.X509DataType();
ServicioVerifactu.RSAKeyValueType key = new ServicioVerifactu.RSAKeyValueType();
sfPortTypeVerifactuClient client = new ServicioVerifactu.sfPortTypeVerifactuClient(Program.enlaceVerifactu);
System.ServiceModel.Description.ClientCredentials credenciales = new System.ServiceModel.Description.ClientCredentials();
//client.ClientCredentials.UserName.UserName = Program.configTaller.Nif;
client.ClientCredentials.ClientCertificate.Certificate = new System.Security.Cryptography.X509Certificates.X509Certificate2(Program.certificado, Program.passcertificado);
client.ClientCredentials.UseIdentityConfiguration = true;
client.ClientCredentials.SupportInteractive = true;
//client.ClientCredentials.ServiceCertificate.DefaultCertificate = new System.Security.Cryptography.X509Certificates.X509Certificate2(Program.certificado, Program.passcertificado);
string test = "";
//client.Open();
RespuestaRegFactuSistemaFacturacionType retorno = new RespuestaRegFactuSistemaFacturacionType();
try
{
retorno = client.RegFactuSistemaFacturacion(facAPresentar);
}
Recuerden al importar el webservice cambiar en reference System.DateTyme por string, hay un fallo al serializar la fecha , incluye milisegundos lo que da error, esta mas o menos explicado. Simplemente han de cambiar de donde rellenar los campos, y por ejemplo si envian varios registros a la vez tenerlño en cuenta. |
|
#3120
|
||||
|
||||
|
Hola, esta parte de aqui,
Código:
string facXml = "";
using (var xmlw = new StringWriter())
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.Encoding = Encoding.UTF8;
using (XmlWriter writter = XmlWriter.Create(xmlw, settings))
{
serializaFactura.Serialize(writter, facAPresentar);
facXml = xmlw.ToString();
}
}
|
![]() |
|
|
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 |
|