You have to use CURL for communications instead of SOAP, I'll give you an example.
$var_header = [ 'Content-Type: application/xml;charset=UTF-8' ];
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, "Soap Client");
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $var_header);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); // aqui le pones la consulta XML
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
//SSL
//curl_setopt($ch, CURLOPT_SSLVERSION, 3); //=3
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSLCERT, $ruta_pem_publica);
curl_setopt($ch, CURLOPT_SSLKEY, $ruta_pem_privada);
curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, $contrasenia_pem);
curl_setopt($ch, CURLOPT_COOKIE, 'sessionid=' . date("Ymd"));
//Parse cURL response
$response = curl_exec($ch);
$curl_errorno = curl_errno($ch);
if ($curl_errorno == CURLE_OK) // si ha ido todo bien
{
$curl_statuscode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$info = curl_getinfo($ch);
$header = substr($response, 0, $info['header_size']);
$body = substr($response, -$info['download_content_length']);
//print_r($header); // esta variable contiene la cabecera de respuesta
//print_r($body); // esta variable contiene el cuerpo de la respuesta. ( en XML)
$resultado = [
'finalizada' => true,
'error' => null,
'cabecera' => $header,
'cuerpo' => $body
];
} else // si la conexion ha dado problemas
{
$curl_errormsg = curl_error($ch);
//echo $curl_errormsg;
$resultado = [
'finalizada' => false,
'error' => $curl_errormsg,
'cabecera' => null,
'cuerpo' => null
];
}
//Close connection
curl_close($ch);
//dd($URL, $resultado, $xml);
return $resultado;
ANCIENT ANSWER
Yo por junio ya desarrolle esto en PHP y acabe por no usar SOAP para la comunicación por los fallos que daba (hay un maldito proxy en la AEAT que fastidia la mitad de las comunicaciones de SOAP por el dominio que pone). Finalmente y a día de hoy ando usando CURL.