Если целевой сервер написан с использованием .NET / ASP, может быть очень сложно получить «идеальные» XML-запросы - например, при использовании префикса пространства имен важно включить объявление пространства имен в XMLа также.
Я могу видеть несколько примеров пространств имен в вашем XML (wsa, wsse, SOAP-ENV), которые, похоже, не являются delcared - и я был бы удивлен, если бы PHP SoapClient смогавтоматически заполнить их.Единственный, кого вы объявили полностью - это 'wsse' = 'http://schemas.xmlsoap.org/ws/2003/06/secext', через инициацию вашего объекта SoapHeader.
Если возможно, поместите анализатор пакетов (например, Fiddler2 ) междуPHP и целевой сервер, чтобы точно видеть, что отправляется и принимается - это может упростить отслеживание ошибок и выяснить, почему XML отклоняется.
Я бы предложил 2 модификации вашего исходного кода, которые должны сделать его "допустимым XML":
- wsa: Action - добавить
xmlns:wsa="<URL for definition of WSA>"
SoapHeader - я не уверен, но, поскольку вы поместили здесь URI пространства имен, может потребоваться включить префикс пространства имен в имя объекта:
$soap_header = new SoapHeader( 'http://schemas.xmlsoap.org/ws/2003/06/secext', 'wsse:Security', $soap_var_header );
Однако самое важное - найти способ получить точный HTTP-диалог между клиентом PHP и целевым сервером - и если вы также можете получить рабочий пример для сравнения и сравнения, это обычно облегчает жизнь на 100%!