![]() |
![]() |
| 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
|
||||
|
||||
|
por ahorrarme tiempo,
¿cuando una factura NO pasa por algun error, se interrumpe el envio de las siguientes? yo en las pruebas si he visto que se interrumpia el envio del resto, pero ahora no estoy seguro. lo digo por no perder el encadenamiento. saludos ! |
|
#2
|
|||
|
|||
|
Buenos días
¿No se devuelve el array de resultados con las aceptadas, aceptadas con errores y rechazadas ? |
|
#3
|
||||
|
||||
|
Cita:
slds |
|
#4
|
|||
|
|||
|
No sé si ya lo habéis detectado, creo que hay un error en uVerifactuFuncs.pas en TEventosWebNode.WebNodeBeforePost al validar un NIF con P12 o PFX en la asignación del nombre del archivo y password:
deberia ser: Saludos |
|
#5
|
|||
|
|||
|
Pfx
Hola, muchas gracias por iluminar el camino. Tengo un problema al cargar directamente un certificado PFX, no me funciona el procedimiento
que está en uverifactufuncs.pas, la siguiente linea no carga el certificado correctamente lo he modificado para saber cual es el error recibo el código de error 6 . He importado el certificado al almacen de windows y desde ahi funciona perfectamente ¿alguien ha probado de cargar un certificado desde el fichero PFX directamente? Gracias anticipadas. |
|
#6
|
||||
|
||||
|
Cita:
Probado, pide el certificado tanto al comprobar el nif como al facturar del almacen de certificados.
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. Última edición por ramherfer fecha: 04-03-2025 a las 17:56:15. |
|
#7
|
|||
|
|||
|
Cita:
Saludos |
|
#8
|
||||
|
||||
|
Cita:
|
|
#9
|
||||
|
||||
|
Cita:
He probado a hacer un envío con 4 facturas. La segunda de ellas con el NIF incorrecto. Las otras 3 se envían sin problemas.
__________________
El recuerdo es la prisión en la que el alma sueña pasado, cuando no vive el presente, ni quiere un futuro. |
|
#10
|
||||
|
||||
|
Cita:
los datos de huella son ciertos, ocurra el fallo que ocurra: Código:
CadenaTemporalHuella:= 'IDEmisorFactura='+ alta.IDFactura.IDEmisorFactura+'&'+
'NumSerieFactura='+ alta.IDFactura.NumSerieFactura+'&'+
'FechaExpedicionFactura='+ alta.IDFactura.FechaExpedicionFactura+'&'+
'TipoFactura='+ TipoFacturaVerifactuToString( alta.TipoFactura )+'&'+
'CuotaTotal='+ alta.CuotaTotal+'&'+
'ImporteTotal='+ alta.ImporteTotal+'&'+
'Huella='+ huellaAnterior+'&'+
'FechaHoraHusoGenRegistro='+alta.FechaHoraHusoGenRegistro.NativeToXS;
La carga del certificado PFX o P12 no tengo ni idea, hay algun usuario que le funcionó (podeis revisar el hilo). Lamentablemente mas alla de eso no tengo tiempo para comprobar, pero mirare un poco por google. El codigo es copy-paste de uno que supuestamente funcionaba. ( ¿has aplicado la correccion de Quim Herrera ? ) Saludos ! |
|
#11
|
||||
|
||||
|
El usuario garada tiene un codigo ligeramente distinto en:
https://www.clubdelphi.com/foros/showthread.php?t=95356 dale una mirada al hilo. Este es el codigo, señalo en rojo, lo que puede ser distinto. la carga del pfx la deja libre, sin determinar. Código:
procedure HTTPRIOHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
procedure CheckError(Puntero: Pointer);
begin
if not Assigned(Puntero) then
RaiseLastOSError;
end;
const
INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
Pass = 'LaContraseña';
var
pStore: HCERTSTORE;
pCert: PCERT_CONTEXT;
DataBlob: CRYPT_DATA_BLOB;
PFX: AnsiString;
begin
pStore := nil;
pCert := nil;
PFX := FuncionQueLeaElFicheroPFX;
try
DataBlob.cbData := Length(PFX);
DataBlob.pbData := @PFX[1];
// Almacen temporal con el contenido del PFX
pStore := PFXImportCertStore(DataBlob, PWideChar(Pass), {PKCS12_NO_PERSIST_KEY + }PKCS12_INCLUDE_EXTENDED_PROPERTIES);
CheckError(pStore);
// Buscar un certificado con clave privada
// Solo debería haber uno
pCert := CertFindCertificateInStore(pStore,
X509_ASN_ENCODING,
0,
CERT_FIND_HAS_PRIVATE_KEY, //CERT_FIND_ANY,
nil,
nil);
CheckError(pCert);
// Pasarlo al servicio
InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, pCert, SizeOf(CERT_CONTEXT));
finally
if Assigned(pCert) then
CertFreeCertificateContext(pCert);
if Assigned(pStore) then
CertCloseStore(pStore, 0);
end;
end;
|
|
#12
|
|||
|
|||
|
Cita:
debido a que cambia si lo dejo en va bien pero en la linea internetsetoption recibo el mismo error que al principio, "codigo error 6" |
|
#13
|
||||
|
||||
|
Cita:
el codigo que carga el certificado esta correcto pero no se transmite el password a la DLL y en la DLL el array de sesiones se comprueba al llegar a la zona de carga del certificado de forma erronea. creo que corrigiendo esto: en el componente: Código:
function TVerifactu.validNIF(nif, nombre:string; var resultado, nombreRes:string):boolean;
var
valida_nif: TValidadorNIF;
j:integer;
begin
checkAutoRun;
result:=false;
valida_nif.nombreCertificado:=Certificado;
valida_nif.passwordCerficado:=passwordCertificado;
valida_nif.nifvalidar :=nif;
valida_nif.nombre :=nombre;
valida_nif.resultado :='';
valida_Nif.error :=true;
validarNIF( valida_nif );
if valida_Nif.error then
begin
resultado:='';
nombreRes:='';
result:=false;
exit;
end;
resultado:=valida_Nif.resultado;
nombreRes:=valida_Nif.resultadoN;
result:=true;
end;
y esto en la DLL: Código:
procedure TEventosWebNode.WebNodeBeforePost(const HTTPReqResp: THTTPReqResp;
Data: Pointer);
var
pStore: HCERTSTORE;
pCert: PCERT_CONTEXT;
DataBlob: CRYPT_BIT_BLOB;
PFX: TBytes;
pass,cert:string;
begin
if sesion=-1 then // viene de un validador de nif
begin
pass:=nifValidatorPass;
cert:=nifValidator;
end
else // viene de un objeto verifactu
begin
pass:=sesiones[sesion].inicio.passwordCertificado;
cert:=sesiones[sesion].inicio.nombreCertificado;
end;
if (pos('.PFX',uppercase(cert))=0) and
(pos('.P12',uppercase(cert))=0) then exit;
cargaCertificado(data, cert, pass);
end;
ya deberia funcionar, a mi me funciona. A principios de la semana que viene publicare una nueva version corregida. Pero ya esta solucionado. slds |
|
#14
|
||||
|
||||
|
Buenas tardes.
Si se le factura a un cliente con recargo de equivalencia no se si está asignando la clave de régimen 01 (Operación de Régimen General). Creo que en este caso debería de asignar la clave de regimen 18 (Recargo de equivalencia). Por favor corregirme si me equivoco.
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos. |
|
#15
|
||||
|
||||
|
Cada registro de facturación tiene que tener su huella y su encadenamiento, independientemente de que la AEAT lo haya rechazado por, por ejemplo, un NIF incorrecto.
__________________
El recuerdo es la prisión en la que el alma sueña pasado, cuando no vive el presente, ni quiere un futuro. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Verifactu o por requerimiento (no-verifactu) ¿decisión del usuario? | Maska10 | Temas legales | 2 | 07-12-2024 12:34:47 |
| Demo de una applicación para una estación de enfermera con RAD Studio | AgustinOrtu | La Taberna | 1 | 21-07-2015 17:41:35 |
| Demo Delphi, EMail | Caral | Internet | 1 | 19-12-2006 00:37:56 |
| Demo de delphi 2005 | mazinger | Varios | 2 | 18-12-2004 09:23:09 |
| El Rave que viene con Delphi es una Demo? | apicito | Impresión | 0 | 04-06-2003 11:33:36 |
|