![]() |
![]() |
| 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
|
|||
|
|||
|
Cita:
Código:
<sum1:Encadenamiento> <sum1:RegistroAnterior> <sum1:IDEmisorFactura>AAAA</sum1:IDEmisorFactura> <sum1:NumSerieFactura>44</sum1:NumSerieFactura> <sum1:FechaExpedicionFactura>13-09-2024</sum1:FechaExpedicionFactura> <sum1:Huella>HuellaRegistroAnterior</sum1:Huella> </sum1:RegistroAnterior> </sum1:Encadenamiento> Gracias. |
|
#2
|
||||
|
||||
|
Cita:
|
|
#3
|
|||
|
|||
|
¿Sin el nodo <Encadenamiento> ???
¿Con el nodo encadenamiento y sin nodo <RegistroAnterior>??? Con el nodo <Encadenamiento> y <RegistroAnterior> Código:
El XML no cumple el esquema. Falta informar campo obligatorio.: PrimerRegistro</faultstring><detail><callstack>El XML no cumple el esquema. Falta informar campo obligatorio.: PrimerRegistro WSExcepcion Ahora por lo visto no me cuadra el cálculo de la huella. A ver que más me sale!!! Última edición por xevi fecha: 27-09-2024 a las 10:10:22. |
|
#4
|
||||
|
||||
|
Cita:
Código:
6.1. Caso 1: primer registro de facturación –en este caso, de alta– en un Sistema Informático de Facturación (SIF) Se parte de los siguientes datos de entrada en el XML: 1. IDEmisorFactura: 89890001K 2. NumSerieFactura: 12345678/G33 3. FechaExpedicionFactura: 01-01-2024 4. TipoFactura: F1 5. CuotaTotal: 12.35 6. ImporteTotal: 123.45 7. Huella (*): 8. FechaHoraHusoGenRegistro: 2024-01-01T19:20:30+01:00 (*) Sin contenido, al tratarse del primer registro de ese SIF y, por tanto, no haber registro de facturación anterior. |
|
#5
|
|||
|
|||
|
Esto es para el cálculo del hash/firma, pero para el xml a enviar a VERIFACTU, se debe de informar
Código:
<sum1:Encadenamiento>
<sum1:PrimerRegistro>S</sum1:PrimerRegistro>
</sum1:Encadenamiento>
|
|
#6
|
|||
|
|||
|
buenas
Correcto. Perdona entendi mal la pregunta un saludo |
|
#7
|
||||
|
||||
|
Buenas.
A mi me da un access violation al hacer la llamada. ¿Alguna idea de por qué puede ser? Gracias y un saludo.
__________________
Be water my friend. |
|
#8
|
|||
|
|||
|
hash primer registro
buenas, lee el siguiente enlace, viene bien explicado:
https://www.agenciatributaria.es/sta..._registros.pdf Caso 1: primer registro de facturación –en este caso, de alta– en un Sistema Informático de Facturación (SIF) Se parte de los siguientes datos de entrada en el XML: 1. IDEmisorFactura: 89890001K 2. NumSerieFactura: 12345678/G33 3. FechaExpedicionFactura: 01-01-2024 4. TipoFactura: F1 5. CuotaTotal: 12.35 6. ImporteTotal: 123.45 7. Huella (*): 8. FechaHoraHusoGenRegistro: 2024-01-01T19:20:30+01:00 (*) Sin contenido, al tratarse del primer registro de ese SIF y, por tanto, no haber registro de facturación anterior. Se obtendría la siguiente cadena de caracteres sobre la que aplicar el algoritmo de huella o «hash»: IDEmisorFactura=89890001K&NumSerieFactura=12345678/G33&FechaExped icionFactura=01-01- 2024&TipoFactura=F1&CuotaTotal=12.35&ImporteTotal=123.45&Huella=&Fec haHoraHusoGenRegistro=2024-01-01T19:20:30+01:00 un saludo |
|
#9
|
|||
|
|||
|
dudas
Verifactu me dice que el nif con el que envio la factura no está dado de alta. Como habeís solucionado este tema.
Gracias |
|
#10
|
|||
|
|||
|
Cita:
Comprueba que el nombre corresponda (al menos parcialmente) con el que está dado de alta en la aeat. por ejemplo no puedes poner un nif de persona fisica asociado a un nombre comercial. |
|
#11
|
|||
|
|||
|
Importante Para Envios Con Curl Para Software Antiguo
Hola, creo que es importante que se ponga esto en el primer post. Puede que le "salve la vida" a más de uno que usa desarrollo antiguo, tipo vb 6.0 , delphis antiquísimos etc..
Para realizar los envios con la aplicación Curl.exe. 1. Encapsular el fichero xml en SOAP. Para ello agregar al fichero el inicio y final del soap Código PHP:
Código PHP:
Código PHP:
2.Enviar el fichero soap con CURL.exe Os dejo el comando, al que podeis hacerle modificaciones curl.exe --connect-timeout 300 -m 300 -k -L -d "@C:\....\VFac22223.xml" -o respuesta_VFac22223.xml -D cabecera_VFac22223.xml --cert-type P12 --cert C:\...certificado.pfx:contraseña https://prewww1.aeat.es/wlpl/TIKE-CO.../VerifactuSOAP --trace respuestatrace_VFac22223.txt Explico un poco: -Para enviar de esta forma podeis tener en una carpeeta el certificado con el que enviais en formato pfx/pt2, aunque el comando curl tambien admite usar certificados desde un almacen en el que lo habeis importado, si lo necesitais desde almacen podeis buscar ayuda al respectgo por el google. -Aunque para saber un poco más de los parametros curl podeis ejecutar curl --help all desde el cmd os dejo las explicaciones a los parametros que uso: *Los timeouts, son los tiempos de espera en segundos, que aunque los he puesto un poco exagerados, por experiencia los prefiero tener así, ya que me he encontrado en situaciones de conexiones 2G o que usaban un router de datos con los datos agotados y al menos alarga unos megas mas los envios a velocidad lenta. *La opción -k os quitará muchos dolores de cabeza, ya que a veces hay restricciones de envios por temas de firewall, seguridad..., y es para que no tenga en cuenta si ha caducado el certificado del propio curl o de vuestro propio sistema... pero no tiene nada que ver con que caduque el certificado electronico con el que enviais, si ese caduca, channn-- error--- *La opcion -L permite que haya redirecciones, no es necesario, pero lo activo por si acaso meten alguna redireccion *La opcion -d seguida de la ruta completa del archivo a enviar entrecomillada y precedida por el simbolo arroba @ antes de la ruta, es el archivo a enviar, se precede por el @ parea que se envie y reciba en formato binario y nos aseguremos que los caracteres que enviamos no lleguen convertidos a otro sistema que no sea el UTF8. *La opción -o seguida de la ruta completa de la respuesta, nos devolverá en un fichero la respuesta de Hacienda en formato XML. Aconsejo usarla con la respuesta de cabecera -D, ya que podemos ver previamente si hay conexion o no, o sea, el de cabecera nos proporciona informacion adicional sobre la conexion, el fichero de cabecera puede tener varios estados: uno de ellos es vacio o que no se genere(con lo cual no ha habido conexion) y si tiene contenido nos informa si la conexion ha sido ok, haced bastantes pruebas, quitando la red, mandando repetidos etc. * La opción --trace, no es necesaria, solo para hacer alguna prueba más severa por que tengamos algun problema con alguna conexion en particular y queramos informacion muy específica de todo lo que esta haciendo el comando. * La opcion --cert-type P12 --cert continuada por el nombre del fichero(certificado pfx/pt2), continuada por dos puntos ":" y la contraseña indicamos que estamos enviando con un certificado de un fichero que tenemos donde indicamos. Debeis tener especial cuidad con este comando de no dejar rastros, no es aconsejable crear un .bat ni nada de eso, y tened en cuenta que es un pelin inseguro por temas que no voy a decir aquí. * Y ya por ultimo el servidor para las altas de facturas: https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP Nota: Podeis tener problemas con el servidor si teneis un router con tarjeta de datos 3g/4g/5g si el proveedor os han metido CG-NAT (de repente) o s han puesto en un blacklist, para saberlo receibirais al conectar un error 443, normalmente no es problema del firewall, que ese es otro tema, para corregir el problema teneis 2 opciones, o llamais al proveedor y os lo soluciona (le decis que os saque del CG-NAT) o cambias la tarjeta de datos. Os lo digo por si quereis meter ese control en las respuestas, ya que no es un error frecuente y os puede también dar dolores de cabeza. Última edición por ermendalenda fecha: 20-10-2024 a las 10:13:10. |
|
#12
|
||||
|
||||
|
Cita:
Gracias. Por los detalles y la explicación. Actualizo en 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. |
|
#13
|
||||
|
||||
|
Para los errores de dni no censado.
Cita:
Cita:
Hola, para los casos 2 y 3 hay una solucion propuesta por la misma administracion, porque puede ser perfectamente que un cliente no este censado en hacienda y al reenviarpor un corte seguro estamos fuera, de la hora de generacion fijo. Para el caso 1 y 3 uso la misma solucion, compruebo la estructura que este bien formado, que no lo haya introducido mal. Código:
class verificaDniCif
{
public static Boolean valida_NIFCIFNIE(string data)
{
if (String.IsNullOrEmpty(data) || data.Length < 8)
return false;
var initialLetter = data.Substring(0, 1).ToUpper();
if (Char.IsLetter(data, 0))
{
switch (initialLetter)
{
case "X":
data = "0" + data.Substring(1, data.Length - 1);
return validarNIF(data);
case "Y":
data = "1" + data.Substring(1, data.Length - 1);
return validarNIF(data);
case "Z":
data = "2" + data.Substring(1, data.Length - 1);
return validarNIF(data);
default:
if (new Regex("[A-Za-z][0-9]{7}[A-Za-z0-9]{1}$").Match(data).Success)
return validadCIF(data);
break;
}
}
else if (Char.IsLetter(data, data.Length - 1))
{
if (new Regex("[0-9]{8}[A-Za-z]").Match(data).Success || new Regex("[0-9]{7}[A-Za-z]").Match(data).Success)
return validarNIF(data);
}
return false;
}
private static string getLetra(int id)
{
Dictionary<int, String> letras = new Dictionary<int, string>();
letras.Add(0, "T");
letras.Add(1, "R");
letras.Add(2, "W");
letras.Add(3, "A");
letras.Add(4, "G");
letras.Add(5, "M");
letras.Add(6, "Y");
letras.Add(7, "F");
letras.Add(8, "P");
letras.Add(9, "D");
letras.Add(10, "X");
letras.Add(11, "B");
letras.Add(12, "N");
letras.Add(13, "J");
letras.Add(14, "Z");
letras.Add(15, "S");
letras.Add(16, "Q");
letras.Add(17, "V");
letras.Add(18, "H");
letras.Add(19, "L");
letras.Add(20, "C");
letras.Add(21, "K");
letras.Add(22, "E");
return letras[id];
}
private static bool validarNIF(string data)
{
if (data == String.Empty)
return false;
try
{
String letra;
letra = data.Substring(data.Length - 1, 1);
data = data.Substring(0, data.Length - 1);
int nifNum = int.Parse(data);
int resto = nifNum % 23;
string tmp = getLetra(resto);
if (tmp.ToLower() != letra.ToLower())
return false;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
return true;
}
private static bool validadCIF(string data)
{
try
{
int pares = 0;
int impares = 0;
int suma;
string ultima;
int unumero;
string[] uletra = new string[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "0" };
string[] fletra = new string[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" };
int[] fletra1 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
string xxx;
/*
* T P P N N N N N C
Siendo:
T: Letra de tipo de Organización, una de las siguientes: A,B,C,D,E,F,G,H,K,L,M,N,P,Q,S.
P: Código provincial.
N: Númeración secuenial dentro de la provincia.
C: Dígito de control, un número ó letra: Aó1,Bó2,Có3,Dó4,Eó5,Fó6,Gó7,Hó8,Ió9,Jó0.
*
*
A. Sociedades anónimas.
B. Sociedades de responsabilidad limitada.
C. Sociedades colectivas.
D. Sociedades comanditarias.
E. Comunidades de bienes y herencias yacentes.
F. Sociedades cooperativas.
G. Asociaciones.
H. Comunidades de propietarios en régimen de propiedad horizontal.
I. Sociedades civiles, con o sin personalidad jurídica.
J. Corporaciones Locales.
K. Organismos públicos.
L. Congregaciones e instituciones religiosas.
M. Órganos de la Administración del Estado y de las Comunidades Autónomas.
N. Uniones Temporales de Empresas.
O. Otros tipos no definidos en el resto de claves.
*/
data = data.ToUpper();
ultima = data.Substring(8, 1);
int cont = 1;
for (cont = 1; cont < 7; cont++)
{
xxx = (2 * int.Parse(data.Substring(cont++, 1))) + "0";
impares += int.Parse(xxx.ToString().Substring(0, 1)) + int.Parse(xxx.ToString().Substring(1, 1));
pares += int.Parse(data.Substring(cont, 1));
}
xxx = (2 * int.Parse(data.Substring(cont, 1))) + "0";
impares += int.Parse(xxx.Substring(0, 1)) + int.Parse(xxx.Substring(1, 1));
suma = pares + impares;
unumero = int.Parse(suma.ToString().Substring(suma.ToString().Length - 1, 1));
unumero = 10 - unumero;
if (unumero == 10) unumero = 0;
if ((ultima == unumero.ToString()) || (ultima == uletra[unumero - 1]))
return true;
else
return false;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
}
Código:
/// <summary>
/// Comprueba si un CIF/NIf esta censado
/// </summary>
/// <returns>Si o No segun el estado del censo</returns>
public string Censado()
{
string censado = "No";
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
Salida respuestaNif = new Salida();
Entrada checaNif = new Entrada();
VNifV2EntContribuyente contribuyente = new VNifV2EntContribuyente();
contribuyente.Nif = Dni.Text;
contribuyente.Nombre = Apellido1.Text + " " + Apellido2.Text + " " + nom.Text;
VNifV2EntContribuyente[] contrib = new VNifV2EntContribuyente[1];
contrib[0] = contribuyente;
checaNif.VNifV2Ent = contrib;
VNifV2Client checa = new VNifV2Client("VNifPort1");
checa.ClientCredentials.ClientCertificate.Certificate = new System.Security.Cryptography.X509Certificates.X509Certificate2(Program.certificado, Program.passcertificado);
checa.ClientCredentials.UseIdentityConfiguration = true;
checa.ClientCredentials.SupportInteractive = true;
VNifV2SalContribuyente nifsalida = new VNifV2SalContribuyente();
var resultado = checa.VNifV2(checaNif);
if(resultado.VNifV2Sal[0].Resultado == "IDENTIFICADO")
{
txtCensado.BackColor = Color.Green;
censado = "Si";
}
else
{
txtCensado.BackColor = Color.Red;
MessageBox.Show("El cliente no esta censado en hacienda o sus datos son incorrectos, por favor reviselo , o no se podra utilizar para enviar le facturas.");
}
return censado;
}
Código:
idOtro.IDType = PersonaFisicaJuridicaIDTypeType.Item07; Cita:
|
|
#14
|
|||
|
|||
|
Cita:
Ya .as o menos se vé por donde van Yo antes de enviar voy a comprobar la hora del registro y le meto incidencia si ha pasado por ejemplo 100 segundos, ya veo que si no es muy habitual quenle mandes todo fuera de hora tampoco te van a decir nada. |
|
#15
|
|||
|
|||
|
Mensaje ERROR devuelto al encapsular el envio de una factura
Estoy intentado enviar el xml de ALTA DE FACTURA, ya no detecta errores, y al enviar ,
ESTAS SON LA PRIMERA LINEAS, SIN EL SOAP ENVELOPE <sum:RegFactuSistemaFacturacion xmlns:sum="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd" xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd"> <sum1:Cabecera> <sum1:ObligadoEmision> la AEAT responde con : ESTA ES LA RESPUESTA DE AEAT: <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Body><env:Fault><faultcode>env:Server</faultcode><faultstring>Codigo[1207].Se esperaba nodo {http://schemas.xmlsoap.org/soap/envelope/}Envelope y ha venido {https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd}RegFactuSistemaFacturacion</faultstring></env:Fault></env:Body></env:Envelope> Despues de seguir vuestros consejos respecto a encapsular antes de enviar, lo hago y me responde como que tengo error en la huella. ??? : ESTAS SON LAS LINEAS QUE HE AÑADIDO AL PRINCIPIO <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header/> <soapenv:Body> <sum:RegFactuSistemaFacturacion xmlns:sum="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd" xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd"> <sum1:Cabecera> Y AL FINAL CIEERO LAS MISMAS </sum:RegFactuSistemaFacturacion> </soapenv:Body> </soapenv:Envelope> Y ESTA ES LA RESPUESTA DE LA AEAT: <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header/> <env:Body Id="Body"><tikR:RespuestaRegFactuSistemaFacturacion xmlns:tik="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd" xmlns:tikR="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/RespuestaSuministro.xsd"><tikR:Cabecera><tik:ObligadoEmision><tik:NombreRazon>HECTOR RAFAEL RODRIGO SANCHEZ</tik:NombreRazon><tik:NIF>33461360V</tik:NIF></tik:ObligadoEmision></tikR:Cabecera><tikR:TiempoEsperaEnvio>60</tikR:TiempoEsperaEnvio><tikR:EstadoEnvio>Incorrecto</tikR:EstadoEnvio><tikR:RespuestaLinea><tikR:IDFactura><tik:IDEmisorFactura>33461360V</tik:IDEmisorFactura><tik:NumSerieFactura>2024</tik:NumSerieFactura><tik:FechaExpedicionFactura>15-10-2024</tik:FechaExpedicionFactura></tikR:IDFactura><tikR:Operacion><tik:TipoOperacion/></tikR:Operacion><tikR:EstadoRegistro>Incorrecto</tikR:EstadoRegistro><tikR:CodigoErrorRegistro>1100</tikR:CodigoErrorRegistro><tikR escripcionErrorRegistro>Valor o tipo incorrecto del campo.: Huella</tikR escripcionErrorRegistro></tikR:RespuestaLinea></tikR:RespuestaRegFactuSistemaFacturacion></env:Body></env:Envelope> Alguien puede orientarme al respecto. |
![]() |
| 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 |
|