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:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 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">
<soapenv:Header />
<soapenv:Body>
<sum:RegFactuSistemaFacturacion>
....
..
</sum:RegFactuSistemaFacturacion>
</soapenv:Body>
</soapenv:Envelope>
Ojo hay que quitarle
Código PHP:
<?xml version="1.0" encoding="UTF-8"?>
y si habeis puesto el inicio del nodo RegFactuSistemaFacturacion con referencias quitarlas y dejarlas así:
Código PHP:
<sum:RegFactuSistemaFacturacion>
Ya que las referencias ya estan en el soap, aunque lo mismo funciona poniendolo en uno o en otro, pero si lo dejas en los 2 no va a funcionar.
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.