Похоже, в библиотеке NuSOAP есть небольшое упущение ... предполагается, что заголовки содержимого ДОЛЖНЫ быть "text / xml", поэтому, если ваш клиент пытается подключиться к службе, которая выводит заголовки application / soap + xml вы получите ошибки типа:
Ответ не имеет типа text / xml: application / soap + xml; кодировка = UTF-8
Чтобы проверить это, вы можете воспользоваться следующим небольшим шаблоном функции, который я использовал для входа в службу SOAP. Помните, распечатайте объект клиента! На самом деле вы не можете получить результат, чтобы посмотреть!
require_once('path/to/downloaded/libraries/nusoap.php');
var $endpoint = 'https://somedomain.com/path/to/soap/server/Login';
var $client; // the soapclient object
function SOAP_Login()
{
$this->client = new soapclient($this->endpoint);
$err = $this->client->getError();
if ($err)
{
// Display the error
echo '<p><b>SOAP Constructor error: ' . $err . '</b></p>';
exit;
// At this point, you know the call that follows will fail
}
$params = array(
'some' => 'thing.. depends on what the WSDL expects'
);
$result = $this->client->call('someFunction', $params);
print_r($result); // Without the fix, this prints nothing (i.e. false) !!!
print_r($this->client); // Instead, look at the state of the client object, specifically error_str and debug_str
}
Когда я печатал свой результат $, я ничего не получал, но когда я печатал объект $ client, я мог видеть, что были ошибки.
Небольшой хак, который я реализовал, был в файле nusoap.php, около строки 7500. Ищите этот оператор if:
if (!strstr($headers['content-type'], 'text/xml')) {
$this->setError('Response not of type text/xml: ' . $headers['content-type']);
return false;
}
И измените это на:
if (!strstr($headers['content-type'], 'text/xml') && !strstr($headers['content-type'], 'application/soap+xml') ) {
$this->setError('Response not of type text/xml: ' . $headers['content-type']);
return false;
}
Все, что он делает, это позволяет NuSOAP обрабатывать ответы, которые выдают заголовок «application / soap + xml» (который является действительным заголовком xml).