Tengo una aplicación para timbrar con TimbreFiscal y utilizo tus librerías para ello. Pues bien trataré de explicarme. Mandé timbrar un XML, Diverza me devuelve el timbre y yo lo inserto en mi XML. Posteriormente yo le envío el XML a mi cliente. Mi cliente al validarl el XML obtiene como respuesta (de 2 validadores distintos) un mensaje de "Sello del SAT inválido".
Hasta aquí mi razonamiento es de que si está timbrado, es porque ya está avalado y validado por el PAC. Entonces levanto un ticket a Diverza para preguntarle el por qué de este error. Diverza me devuleve en un correo el Timbre que ellos generaron,y al comparar la el sello de mi XML original contra el que Diverza me regresa, veo que difieren por 3 caracteres. Anexo ambas cadenas:
Mi Sello:
nAM6q21YfeVLrDIHhjdDviGDukkXJYm8R/TQiZZQhHBADOBwFvNOfN7Kl1l5szp4m8oHG9br44Ztb7JheOOFL5vuyuck96DRIPr3m67SHhIt3ojyWJzUyEJq6P7LzCV5B9A/s7 tfd hscC6oQGLS1vIBjvQJDsbYJCYVWx2EGSuI=
Sello de Diverza:
nAM6q21YfeVLrDIHhjdDviGDukkXJYm8R/TQiZZQhHBADOBwFvNOfN7Kl1l5szp4m8oHG9br44Ztb7JheOOFL5vuyuck96DRIPr3m67SHhIt3ojyWJzUyEJq6P7LzCV5B9A/s7 ns2 hscC6oQGLS1vIBjvQJDsbYJCYVWx2EGSuI=
Aparentemente iguales, salvo por esos 3 caracteres que subrayo y pongo en rojo. Cuando veo esto, me pongo a investigar mas en el código fuente y encuento en la función InterpretaMensaje, que está en la unidad TimbreFiscalMx.pas, algo como lo siguiente:
Código: Seleccionar todo
//Timbrefiscal.mx usa un monton de namespace que no vienen al caso:
Msg := AnsiReplaceStr(Msg,'ns2','tfd');
// PARCHE CRITICO: 1 - 15/Jun/2011 - http://www.validacfd.com/phpbb3/viewtopic.php?f=24&t=592&p=6170&hilit=update#p6170
// "detalle tecnico acerca de los "namespace" del timbre, resulta que debe llevar un "schemalocation" que
// TIMBREFISCAL DEBERIA ENVIAR PERO NO LO HACE."
Por lo que me he podido dar cuenta, la cadena original que me devolvió Diverza, tenía una secuencia "ns2" que no tiene nada que ver con los namespaces, sin embargo se dio esa combinación de caracteres y ojalá que sea hasta ahora el único caso. Por lo pronto pasé a inhibir esa linea (Msg := AnsiReplaceStr(Msg,'ns2','tfd');) para evitar en lo sucesivo volver a tener este problema.
La pregunta es si las demás líneas AnsiReplace que tiene esta función de "interpretaMensaje" son necesarias? o que pasa si no se dejan tal cual para evitar riesgo de que se vaya a alterar el mensaje original y provocar que se altere el sello?
Gracias