![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
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. |
|
#2
|
||||
|
||||
|
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. |
|
#3
|
|||
|
|||
|
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 |
|
#4
|
||||
|
||||
|
Cita:
Hola, puede probar esto, a mi me funciona, me devuelve el codigo de error y el texto del mismo. Cita:
|
|
#5
|
|||
|
|||
|
Lo acabo de probar y me funciona. Muchas gracias bmfranky
|
|
#6
|
|||
|
|||
|
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. |
|
#7
|
||||
|
||||
|
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. |
|
#8
|
||||
|
||||
|
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();
}
}
|
|
#9
|
||||
|
||||
|
Funcion generar QR C#
Una vez puesto, ahunque nadie me la ha pedido , adjunto mi funcion para generar el QR
Primero que nada instalar el paquete nuget Cita:
Código:
/// <summary>
/// Funcion para generar el QR segun la especificacion Veri*Factu
/// </summary>
/// <param name="nif">Nif obligado..</param>
/// <param name="nfac">Numero de factura incluyendo serie.</param>
/// <param name="fecha">Fecha factura. Se sutituye por si acaso "/" por "-" </param>
/// <param name="importe">Ssustituye coma por el punto decimal, solo acepta 2 decimales tener en cuenta al parsear.</param>
/// <returns></returns>
public static byte[] generaQR(string nif, string nfac, string fecha, string importe)
{
string cadenaQr = Program.webVerificacion + "nif=" + nif + "&numserie=" + nfac + "&fecha=" + fecha.Replace("/", "-") + "&importe=" + importe.Replace(",",".");
QRCodeGenerator qrGen = new QRCodeGenerator();
QRCodeData qrDatos = qrGen.CreateQrCode(cadenaQr, QRCodeGenerator.ECCLevel.M);
QRCode qrCodigo = new QRCode(qrDatos);
Bitmap qrImagen = qrCodigo.GetGraphic(10, Color.Black, Color.White, false);
//Image imageIn2 = generaQRI(cadenaQr);
while (null == qrImagen)//espera hasta que este generada la imagen antes de convertir.
{
}
using (var ms = new MemoryStream())
{
qrImagen.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
return ms.ToArray();
}
|
|
#10
|
|||
|
|||
|
Siguen sin comprobar encadenamiento
He leido un post de que estaban comprobando el encadenamiento.
Yo he hecho 2 pruebas, he enviado encadenando mal y volviendo a enviar como primer registro y me lo ha aceptado todo como correcto Por cierto Ya me funciona QR de sustitutivas y de rectificativas. A los QR en pdf les he añadido que si se pulsan vaya al mismo enlace que leyendolo. No sé si eso al final era un requisito, pero no cuesta nada ponerlo. Tambien he verificado que si envio una factura y despues envio anulacion ya dice que no existe al leer el QR de nuevo, tal y como han puesto en la ultima modificación de respuestas. |
|
#11
|
|||
|
|||
|
Con SII yo podia acceder a la AEAT y comprobar los registros enviados con sus datos.
En VERI*FACTU hay alguna forma de ver en la AEAT las facturas enviadas ??? Estoy teniendo problemas con la HUELLA cuando ya lo tenia funcionando OK Necesito ver que HUELLA tiene AEAT de los registros ya enviados para ver el ultimo con su huella y poder calcular la HUELLA del nuevo registro |
|
#12
|
||||
|
||||
|
Cita:
![]() , si encadenas mal, hasta que encadenes bien *falla. Mejor dicho da aceptado con errores, si das como primer registro, te pone a cero el encadenamiento, por lo menos de momento. |
|
#13
|
|||
|
|||
|
Cita:
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|