Página 1 de 1

Sello invalido segun el WebService de TimbreFiscal.mx

Publicado: Lun Dic 12, 2011 4:40 pm
por Jesus Castelo
Bueno pues la cosa esta asi, estoy en las pruebas con TimbreFiscal, ellos me dan un ejemplo para basarme en el cual sellas un CFDI y lo mandas a timbrar, el ejemplo ya lo hice funcionar y todo salio bien, el validaCFD me dice:

El sello del Emisor SI es valido
Se uso SHA-1 para sellar y el CFD es del 2011 o posterior - OK
--------------------------------------------------------------------------------
El sello del Timbre Fiscal NO es valido


El validador de el SAT para CFDI me dice que todo esta bien, incluso el sello del Timbre, aunque la verdad no le tengo mucha confianza, en fin parece que todo va caminando. Entonces intente timbrar un CFDI sellado por mi pero el WebService de TimbreFiscal.mx me dice que el sello es incorrecto, ya verifique que la cadena original sea correcta y que sea igual a la cadena original que generan los 2 validadores. Yo ya sello CFD 2.0 y no tengo problemas, tanto ValidaCFD como el Validador del SAT me dicen que son correctos. No se como haga la validacion del sello el WebService de timbreFiscal pero veo que como parte del objeto "RequestTimbradoCFDType req" propiedad "Comprobante" que le mandas al web service hay un dato que es Comprobante.certificado, ahi en el programa de ejemplo que te mandan ellos ponen el PEM del certificado del sello que se uso para firmar el CFDI, yo ya intente usando openSSL segun lo que lei en otro hilo del foro, http://validacfd.com/phpbb3/viewtopic.php?f=5&t=553, convertir el .cer del sello que uso para firmar a .pem y mandarlo tal como lo hacen en el programa de ejemplo pero me sigue marcando "Sello invalido", tambien intente con el .key en formato .pem y lo mismo "Sello invalido", no se tal vez estoy mandando mal el certificado.

Nota: Ya comente mi duda en el foro de TimbreFiscal.mx pero despues de varios dias aun no he logrado respuesta http://timbrefiscal.mx/index.php/foro/2 ... 0&start=10

Gracias por su tiempo...

Re: Sello invalido segun el WebService de TimbreFiscal.mx

Publicado: Lun Dic 12, 2011 5:03 pm
por Dado
Dos detalles importantes :

1. ACTUALIZA EL VALIDACFD !!! la nueva version es la 0.3 y la puedes descargar de aqui : http://www.validacfd.com

2. El mensaje de sello invalido puede significar dos cosas.

sello invalido (logico) pero dices que ya lo pasaste por el ValidaCFD y si valida bien, asi que ESTO NO ES

el xml ha sido alterado........que significa? que "algo" en "algun lugar" estas alterando tu XML, recuerda que es suficiente un punto, una coma, un espacio adicional y madres!* se echa a perder todo

*mmmh, yo puse eso? je, no estan permitidas maldiciones en mi foro.......a menos que las diga yo :twisted: :mrgreen:

Re: Sello invalido segun el WebService de TimbreFiscal.mx

Publicado: Lun Dic 12, 2011 6:34 pm
por Jesus Castelo
pero esas posibles modificaciones en mi XML afectarian solo si cambia la cadena original no??. Hice una prueba de un CFDI, todo lo que se tiene que hacer solo que lo deje sin Timbre, compare la cadena original que me da ValidaCFD, la que me de el validador del SAT y mi cadena original que uso para hacer el sello y son iguales. Como haces tu para mandar timbrar a TimbreFiscal.mx??, yo uso el ejemplo "Ejemplo Csharp Punto Net v2" que Hector, uno de los administradores, subio. El codigo es este, en parte:

static String certificadoSello = @"C:\CFDI\Certificado-PruebasSAT.pfx"; // Se usara para firmar el CFDi
static String claveCertSello = "a0123456789";
static String certificadoDemo = @"C:\CFDI\CSO070731U39.pfx"; // Se usara para establecer la comunicacion con el web service
static String claveCertDemo = "CSO070731U39"; // Funciona para el ejemplo. Cambiar en su caso
static String RfcEmisor = "aaa010101aaa";//"CSO070731U39";//"ACS931020HF6";
static String xsltCadenaoriginal = @"C:\CFDI\cadenaoriginal_3_0.xslt";
static String esquemaCFDv3 = "http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv3.xsd";

// Variables globales, seran usadas de puente entre las diferentes etapas del proceso
static Comprobante cfdi = new Comprobante();
static TimbreFiscalDigital timbre = new TimbreFiscalDigital();

// Encoding que marca el SAT y reconoce TimbraFiscal
static Encoding UTF8withoutBOM = new UTF8Encoding(false);
static bool validSchema = true;

static void ConstruyeCFDI()
{
// Generales
DateTime hoy = DateTime.Now;
cfdi.fecha = new DateTime(hoy.Year, hoy.Month, hoy.Day, hoy.Hour, hoy.Minute, hoy.Second);
// Esto es requerido pues el web service no acepta fracciones de segundo
cfdi.condicionesDePago = "Pago en una sola exhibicion";
cfdi.tipoDeComprobante = ComprobanteTipoDeComprobante.ingreso;
cfdi.formaDePago = "Efectivo";
cfdi.version = "3.0";
// Emisor
cfdi.Emisor = new ComprobanteEmisor();
cfdi.Emisor.rfc = RfcEmisor;
cfdi.Emisor.nombre = "Empresa Demo";
cfdi.Emisor.DomicilioFiscal = new t_UbicacionFiscal();
cfdi.Emisor.DomicilioFiscal.calle = "Padre Mier";
cfdi.Emisor.DomicilioFiscal.noExterior = "1640";
cfdi.Emisor.DomicilioFiscal.colonia = "Obispado";
cfdi.Emisor.DomicilioFiscal.municipio = "Monterrey";
cfdi.Emisor.DomicilioFiscal.estado = "Nuevo Leon";
cfdi.Emisor.DomicilioFiscal.pais = "Mexico";
cfdi.Emisor.DomicilioFiscal.codigoPostal = "53400";
// Receptor
cfdi.Receptor = new ComprobanteReceptor();
cfdi.Receptor.rfc = "CLI010101DEM";
cfdi.Receptor.nombre = "Cliente de demo";
cfdi.Receptor.Domicilio = new t_Ubicacion();
cfdi.Receptor.Domicilio.calle = "Juan Saldana";
cfdi.Receptor.Domicilio.noExterior = "1234";
cfdi.Receptor.Domicilio.colonia = "Obispado";
cfdi.Receptor.Domicilio.municipio = "Monterrey";
cfdi.Receptor.Domicilio.estado = "Nuevo Leon";
cfdi.Receptor.Domicilio.pais = "Mexico";
cfdi.Receptor.Domicilio.codigoPostal = "64060";
// Conceptos
cfdi.Conceptos = new ComprobanteConcepto[2];
cfdi.Conceptos[0] = new ComprobanteConcepto();
cfdi.Conceptos[0].cantidad = 10;
cfdi.Conceptos[0].unidad = "bolsas";
cfdi.Conceptos[0].descripcion = "Tamal de elote";
cfdi.Conceptos[0].valorUnitario = 30m; // La m hace referencia a un valor decimal
cfdi.Conceptos[0].importe = cfdi.Conceptos[0].valorUnitario * cfdi.Conceptos[0].cantidad;
cfdi.Conceptos[1] = new ComprobanteConcepto();
cfdi.Conceptos[1].cantidad = 5;
cfdi.Conceptos[1].unidad = "latas";
cfdi.Conceptos[1].descripcion = "Salmon ahumado de Alaska";
cfdi.Conceptos[1].valorUnitario = 400m;
cfdi.Conceptos[1].importe = cfdi.Conceptos[1].valorUnitario * cfdi.Conceptos[1].cantidad;
// Impuestos;
cfdi.Impuestos = new ComprobanteImpuestos();
cfdi.Impuestos.totalImpuestosTrasladados = 16;
cfdi.Impuestos.Traslados = new ComprobanteImpuestosTraslado[1];
cfdi.Impuestos.Traslados[0] = new ComprobanteImpuestosTraslado();
cfdi.Impuestos.Traslados[0].impuesto = ComprobanteImpuestosTrasladoImpuesto.IVA;
cfdi.Impuestos.Traslados[0].tasa = 16;
cfdi.Impuestos.Traslados[0].importe = (cfdi.Conceptos[0].importe + cfdi.Conceptos[1].importe) * 0.16m;
// Totales
cfdi.subTotal = cfdi.Conceptos[0].importe + cfdi.Conceptos[1].importe;
cfdi.total = cfdi.subTotal + cfdi.Impuestos.Traslados[0].importe;
}

static bool Timbra()
{
RequestTimbradoCFDType req = new RequestTimbradoCFDType();
TimbradoCFDI proxy = new TimbradoCFDI();
X509Certificate2 cert = new X509Certificate2(@certificadoDemo, claveCertDemo);
req.InfoBasica = new InfoBasicaType();
req.InfoBasica.RfcEmisor = cfdi.Emisor.rfc;
req.InfoBasica.RfcReceptor = cfdi.Receptor.rfc;
/*
* En esta parte estoy poniendo ambas opciones solo con fines didacticos
* Usted debe escoger como manejar sus envios, ya que
* se puede usar el nodo Comprobante o el nodo Documento, pero no ambas
* Para efectos de este ejemplo basta con cambiar la variable comprobante0Documento1 entre 0 y 1;
*/
int comprobante0Documento1 = 0;

if (comprobante0Documento1 == 0)
{
// Opcion 1. Comprobante
req.Comprobante = cfdi;
}
else
{
// Opcion 2. Documento
MemoryStream msXML = new MemoryStream();
XmlSerializer ss = new XmlSerializer(cfdi.GetType());
XmlTextWriter writer2 = new XmlTextWriter(msXML, UTF8withoutBOM);
XmlSerializerNamespaces ns2 = new XmlSerializerNamespaces();
ns2.Add("cfdi", "http://www.sat.gob.mx/cfd/3");
ss.Serialize(writer2, cfdi, ns2);
msXML.Position = 0;
req.Documento = new DocumentoType();
req.Documento.Archivo = msXML.ToArray();
req.Documento.Tipo = DocumentoTypeTipo.XML;
req.Documento.Version = "3.0";
}
// Prepara la llamada
proxy.Url = "https://demotf.buzonfiscal.com/timbrado";
proxy.ClientCertificates.Add(cert);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;
// Si se usa fiddler para debug, descomentar la linea siguiente
// fiddler WebRequest.DefaultWebProxy = new WebProxy("127.0.0.1", 8888);
try
{
timbre = proxy.timbradoCFD(req);
}
catch (Exception ex)
{
Console.WriteLine(ex);
return false;
}
return true;
}

Yo lo que hago para integrarlo a mi codigo es, cambiar los valores de las variables que estan al principio, modifico el metodo ConstruyeCFDI() para que tome los valores de los objetos que manejo yo internamente en mi aplicacion, tambien agrego estos 3 valores mas que en el ejemplo los asignan despues de firmar:
cfdi.certificado = Encriptador.Instancia.ConvertirBase64(oEmisor.ClavePrivada); // Aqui tambien cale con el certificado .cer del emisor
cfdi.noCertificado = oEmisor.NumeroCertificado;
cfdi.sello = cSello;// Aqui pongo el sello que yo genere


Pero al momento de ejecutar el metodo Timbra() el webService me regresa lo de "Sello invalido"


Gracias por su tiempo...

Re: Sello invalido segun el WebService de TimbreFiscal.mx

Publicado: Jue Dic 15, 2011 11:02 am
por Jesus Castelo
Por fin encontre mi error, bueno la cosa iba por donde me dijiste dado, habia unas diferencias en los datos que yo usaba para generar mi sello y los datos que le mandaba al webservice, poreso me marcaba error. Yo checaba mi cadena original con las cadenas que generaban los validadores sin el timbre, pero el problema era que con los datos que yo le mandaba al webservice (un objeto) se generaba una cadena distinta.

Respira ondo mssssssaaaaaa jejeje

Re: Sello invalido segun el WebService de TimbreFiscal.mx

Publicado: Jue Dic 15, 2011 11:38 am
por Dado
Jesus Castelo escribió:Por fin encontre mi error, bueno la cosa iba por donde me dijiste dado, habia unas diferencias en los datos que yo usaba para generar mi sello y los datos que le mandaba al webservice, poreso me marcaba error. Yo checaba mi cadena original con las cadenas que generaban los validadores sin el timbre, pero el problema era que con los datos que yo le mandaba al webservice (un objeto) se generaba una cadena distinta.

Respira ondo mssssssaaaaaa jejeje
DALAY !!!! :D :D

Excelente, si habia revisado tu codigo pero me declaro totalmente ignorante de C#

Re: Sello invalido segun el WebService de TimbreFiscal.mx

Publicado: Mié Ene 11, 2012 11:19 am
por nema26
Hola dado:

oye una duda fijate que lei un XML con la version 0.3 y me arroja el error del sello del emisor invalido ya lei este post y ya mas o menos se por donde va pero ahora
descargue la nueva version 0.3b y leo el mismo XML y resulta que ahora me arroja este aviso


Esquema sospechoso : El atributo 'Descuento' del elemento '{http://www.sat.gob.mx/cfd/2}Comprobante' no está definido en DTD o en el esquema.

y resulta que el XML no tiene nada de descuento o no se a que se refiera esto te mando el XML para que me digas que hay de malo por favor muchas gracias

Re: Sello invalido segun el WebService de TimbreFiscal.mx

Publicado: Mié Ene 11, 2012 11:31 am
por mauricio
Hola...

En CFD v2.2, tenemos un atributo "descuento", pero en el XML que anexas tienes un atributo "Descuento"... ¿ves la diferencia?...

Saludos

P.D. Los espacio de nombres de tu XML están mal...

Re: Sello invalido segun el WebService de TimbreFiscal.mx

Publicado: Mié Ene 11, 2012 11:46 am
por Dado
nema26 escribió:Hola dado:

oye una duda fijate que lei un XML con la version 0.3 y me arroja el error del sello del emisor invalido ya lei este post y ya mas o menos se por donde va pero ahora
descargue la nueva version 0.3b y leo el mismo XML y resulta que ahora me arroja este aviso


Esquema sospechoso : El atributo 'Descuento' del elemento '{http://www.sat.gob.mx/cfd/2}Comprobante' no está definido en DTD o en el esquema.

y resulta que el XML no tiene nada de descuento o no se a que se refiera esto te mando el XML para que me digas que hay de malo por favor muchas gracias
El atributo debe ser "descuento" con minuscula.

pd. TE RUEGO QUE ABRAS UN NUEVO TEMA con tus consultas, tu duda no tiene NADA QUE VER con el tema "sello invalido segun el web service de timbre fiscal" que corresponde al titulo de este foro.