Os paso un ejemplo de XML que funciona, tendréis que cambiar algunas cosas, a saber:
NOMBRE_EMISOR_FACTURA: Es el nombre de la persona o empresa que emite la factura, debe ser el mismo que figura en el certificado electrónico con el que se firma el envío.
NIF_EMISOR_FACTURA: Es el nif de la persona o empresa que emite la factura, debe ser el mismo que figura en el certificado electrónico con el que se firma el envío.
NOMBRE_CLIENTE: Nombre del cliente, debe ser un nombre real.
NIF_CLIENTE: Es el nif del cliente, debe ser el nif real del nombre del cliente.
Ojo porque si te inventas los dos valores anteriores dará error aunque sea un nif válido, no te puedes inventar los dos valores anteriores.
NOMBRE_EMPRESA_SOFTWARE: Nombre de la empresa o persona que ha hecho el software de facturación, debe ser real.
NIF_EMPRESA_SOFTWARE: Nif de la empresa o persona que ha hecho el software de facturación, también debe ser real y el que corresponda con el nombre anterior.
Ojo porque si te inventas los dos valores anteriores dará error aunque sea un nif válido, no te puedes inventar los dos valores anteriores.
Código PHP:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd" xmlns:ns2="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd">
<SOAP-ENV:Body>
<ns2:RegFactuSistemaFacturacion>
<ns1:Cabecera>
<ns1:ObligadoEmision>
<ns1:NombreRazon>NOMBRE_EMISOR_FACTURA</ns1:NombreRazon>
<ns1:NIF>NIF_EMISOR_FACTURA</ns1:NIF>
</ns1:ObligadoEmision>
</ns1:Cabecera>
<ns2:RegistroFactura>
<ns2:RegistroAlta>
<ns1:IDVersion>1.0</ns1:IDVersion>
<ns1:IDFactura>
<ns1:IDEmisorFactura>NIF_EMISOR_FACTURA</ns1:IDEmisorFactura>
<ns1:NumSerieFactura>A022</ns1:NumSerieFactura>
<ns1:FechaExpedicionFactura>08-09-2024</ns1:FechaExpedicionFactura>
</ns1:IDFactura>
<ns1:NombreRazonEmisor>NOMBRE_EMISOR_FACTURA</ns1:NombreRazonEmisor>
<ns1:TipoFactura>F1</ns1:TipoFactura>
<ns1:DescripcionOperacion>VENTA MERCADERIAS</ns1:DescripcionOperacion>
<ns1:Destinatarios>
<ns1:IDDestinatario>
<ns1:NombreRazon>NOMBRE_CLIENTE</ns1:NombreRazon>
<ns1:NIF>NIF_CLIENTE</ns1:NIF>
</ns1:IDDestinatario>
</ns1:Destinatarios>
<ns1:Desglose>
<ns1:DetalleDesglose>
<ns1:ClaveRegimen>01</ns1:ClaveRegimen>
<ns1:CalificacionOperacion>S1</ns1:CalificacionOperacion>
<ns1:TipoImpositivo>21</ns1:TipoImpositivo>
<ns1:BaseImponibleOimporteNoSujeto>100.00</ns1:BaseImponibleOimporteNoSujeto>
<ns1:CuotaRepercutida>21.00</ns1:CuotaRepercutida>
</ns1:DetalleDesglose>
</ns1:Desglose>
<ns1:CuotaTotal>21.00</ns1:CuotaTotal>
<ns1:ImporteTotal>121.00</ns1:ImporteTotal>
<ns1:Encadenamiento>
<ns1:PrimerRegistro>S</ns1:PrimerRegistro>
</ns1:Encadenamiento>
<ns1:SistemaInformatico>
<ns1:NombreRazon>NOMBRE_EMPRESA_SOFTWARE</ns1:NombreRazon>
<ns1:NIF>NIF_EMPRESA_SOFTWARE</ns1:NIF>
<ns1:NombreSistemaInformatico>SOFTWARE TPV DE PRUEBAS</ns1:NombreSistemaInformatico>
<ns1:IdSistemaInformatico>7</ns1:IdSistemaInformatico>
<ns1:Version>1.0</ns1:Version>
<ns1:NumeroInstalacion>38</ns1:NumeroInstalacion>
<ns1:TipoUsoPosibleSoloVerifactu>S</ns1:TipoUsoPosibleSoloVerifactu>
<ns1:TipoUsoPosibleMultiOT>N</ns1:TipoUsoPosibleMultiOT>
<ns1:IndicadorMultiplesOT>N</ns1:IndicadorMultiplesOT>
</ns1:SistemaInformatico>
<ns1:FechaHoraHusoGenRegistro>2024-10-01T09:05:00+02:00</ns1:FechaHoraHusoGenRegistro>
<ns1:TipoHuella>01</ns1:TipoHuella>
<ns1:Huella>DD127FF3CEE27D933D330BD718FFBD1D13B2876B14C3C3B2E3B329195</ns1:Huella>
</ns2:RegistroAlta>
</ns2:RegistroFactura>
</ns2:RegFactuSistemaFacturacion>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Y ya por si a alguien le interesa, este es el código que uso para enviar el fichero xml al web service hecho en php:
Código PHP:
$url = 'no_puedo_poner_enlaces prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP'; // URL del webservice
$pfxFile = 'micertificado.pfx'; // Ruta al archivo PFX del certificado electronico
$pfxPassword = 'loquesea'; // Contraseña del PFX del certificado electronico
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml',"SOAPAction: AltaFactuSistemaFacturacion"));
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'P12');
curl_setopt($ch, CURLOPT_SSLCERT, $pfxFile);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $pfxPassword);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error: ' . curl_error($ch);
} else {
print_r($response);
}
curl_close($ch);
Espero que os sirva. Saludos.