![]() |
![]() |
| 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:
No sé si el código estará bien, pero no he cambiado absolutamente nada (de hecho era un proyecto que llevaba años sin tocarse). Ha sido ahora al abrir el proyecto con Delphi 12.2 cuando he tenido que hacer algún cambio, pero sin embargo el cliente tiene la misma versión de siempre. |
|
#2
|
|||
|
|||
|
A ver, que esto está empezando a volverme loco...
He creado el XML y lo he revisado con la utilidad de "invocación de webservice de la AEAT" para comprobar si es válido: https://prewww1.aeat.es/static_files...teWSAEAT2.html La respuesta del servidor es "Correcto". Por lo tanto, entiendo que en el XML que genero está todo bien, pero por algún motivo el componente HTTPRIO no está leyendo la respuesta porque me devuelve el error: Received content of invalid content-type setting: text/html - SOAP expects "text/xml" Entiendo que en el SII no hay que firmar el XML, solo el envío. Esto lo hago en el evento OnNeedCertificate: Código:
for I := 0 to ACertificateList.Count - 1 do
begin
if i=strtointdef(comboCertificate.items.SelectedItem.Hint,0) then
begin
AnIndex := I;
Exit;
end;
end;
Código:
try
// se hace la llamada a la funcion suministrada por el WS
if ENTORNO_DE_PRUEBAS then
begin
HTTPRIO1.WSDLLocation := 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroFactEmitidas.wsdl';
HTTPRIO1.Service := 'siiService';
HTTPRIO1.Port := 'SuministroFactEmitidasPruebas';
HTTPRIO1.URL := 'https://prewww1.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';
end
else
begin
HTTPRIO1.WSDLLocation := 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroFactEmitidas.wsdl';
HTTPRIO1.Service := 'siiService';
HTTPRIO1.Port := 'SuministroFactEmitidas';
HTTPRIO1.URL := 'https://www1.agenciatributaria.gob.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';
end;
result := GetsiiSOAP(false,HTTPRIO1.URL,HTTPRIO1).SuministroLRFacturasEmitidas(ASuministroLRFacturasEmitidas);
//mostrar los resultados devueltos por la llamada
for i := low(result.RespuestaLinea) to High(result.RespuestaLinea) do
begin
with result.RespuestaLinea[i] do
begin
//si el estado no es correcto, se muestran los errores
if EstadoRegistro <> EstadoRegistroType(0) then
begin
showmessage('Error ' + InttoStr(CodigoErrorRegistro)+#13#10+DescripcionErrorRegistro);
error:=DescripcionErrorRegistro;
end
else
begin
spain.Table1.edit;
spain.Table1.FieldByName('ID_HACIENDA').AsString:=result.CSV;
spain.Table1.Post;
end;
end;
end;
except
On E:Exception do
MessageDlg(E.Message, mtError, [mbOK], 0);
end;
He probado también a hacer el envío con el componente NetHTTPClient para ver qué pasa. En ese caso, como respuesta obtengo un código html de una página de la AEAT (eso explica el error si uso HTTPRIO, estoy obteniendo como respuesta una página html en vez de un xml). ¿Puede alguien confirmarme si las URL que estoy usando y la forma de llamar a GetsiiSOAP() es correcta? Algo me dice que el envío está abriendo otra página, o algo similar, y por eso devuelve html y no xml. La firma del envío la hago en el evento OnNeedCertificate del HTTPRIO. No creo que eso esté mal porque lleva funcionando así siempre. ¿Será que debo usar otro certificado distinto? ¿Hay que darse de alta en algún sitio primero? ¿Puedo usar certificados de prueba? ¿Debe el nombre del emisor coincidir con el nombre en el certificado? La verdad es que ya no sé qué más probar. Funcionaba todo bien hasta hace unos días (al menos a mi cliente). Y ahora tanto él como yo no podemos enviar al entorno de pruebas. |
|
#3
|
||||
|
||||
|
Cita:
Pues con más razón compañero, haz lo que te digo y prueba en una máquina con W10 a ver si W11 va a tener algún tipo de configuración especial con los nuevos protocolos de seguridad de la aeat. Saludos.
__________________
Be water my friend. |
|
#4
|
||||
|
||||
|
En windows 11 funciona correctamente. Lo único que te puedo decir es que pases un pequeño proyecto sólo con el envío de una factura y te lo puedo probar.
|
|
#5
|
|||
|
|||
|
Cita:
He incluido también el archivo .pas que se genera al importar el wsdl. Los datos del emisor, cliente, etc. son ficticios en este proyecto (en mis pruebas uso NIFs y nombres reales). Lo de asignar certificado tendrías que completarlo tu si quieres compilar y probar el código, pero no creo que haga falta porque tampoco tiene mucha ciencia el proceso de firmar el envío. Yo me he asegurado de que el certificado que uso para el envío es el correcto (mostrando en pantalla el nombre del certificado que se asigna al HTTPRIO en el momento de hacer anIndex := xxxx). Total, que espero que puedas decirme si tienes algo diferente. Me da rabia porque viendo los primeros mensajes del foro, hay mensajes míos de 2019 en el que conseguí enviar facturas sin problema con el mismo proyecto. Pero más rabia me da saber que hasta hace 1 semana mi cliente podía enviar sin problemas sin haber tocado nada ![]() OJO, probando ESTE mini proyecto, ahora PUEDO ENVIAR FACTURAS. Ahora sí que no entiendo nada. He copiado/pegado el código y los componentes de un proyecto a otro. Última edición por espinete fecha: 07-03-2025 a las 14:48:17. |
|
#6
|
|||
|
|||
|
Creo que el problema está en cómo asigno el certificado durante el envío.
Asignando el certificado con un simple anindex := 1, puedo enviar, obtener los mensajes de error, etc. Pero asignando el certificado tal como lo tenía... Código:
for I := 0 to ACertificateList.Count - 1 do
begin
if i=strtointdef(comboCertificate.items.SelectedItem.Hint,0) then
begin
AnIndex := I;
Exit;
end;
end;
Ya podría el webservice responder de otra manera. En fin, que está claro que el problema está en el certificado. Tengo que ver qué ha cambiado, o a qué corresponde ese "anindex" porque está claro que no coincide con el index que yo creía que tenía mi certificado. |
|
#7
|
||||
|
||||
|
En el delphi 12.2 el componente THTTPRIO ha cambiado. Ya el certificado no se le indica de la misma manera. Ahora pasa por un evento OnNeedClientCertificate donde hay que indicarle el certificado por el cual tienes que enviar.
En ese evento te pasa una lista con los certificados que hay disponible ACertificateList: TCertificateList, y elegir el que quieres usar en la variable AnIndex. Te pongo como lo hago yo. Certificado es el que usuario ha seleccionado en un combobox. En ACertificateList.Items[x] tienes una serie de propiedades para identificar el certificado que tu quieres usar. Yo creo que el webservice no te estaba contestando nada por que ni siquiera estás llegando a enviar. Otra de las ventajas del nuevo componente es que ya no hace falta el capicom para acceder a los certificado. No te lo pruebo ya que veo que has encontrado el problema. Si tienes lago más di si te puedo ayudar. Última edición por Casimiro Noteví fecha: 10-03-2025 a las 10:07:29. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco | keys | Internet | 4530 | Hace 4 Semanas 14:09:59 |
| AEAT envio de datos vía Webservice problemas con WSDL | CelsoO | Internet | 11 | 09-10-2019 20:03:41 |
| webService Soap de la Administración Digital Española notific@ | apicito | Internet | 3 | 31-01-2017 11:25:28 |
| Error en Webservice funcion envio de sms | webmasterplc | Delphi para la web | 5 | 25-07-2013 20:10:29 |
| Problemas con envío de XML a un WebService | davidvamo | Internet | 1 | 13-02-2007 15:49:20 |
|