Php 为什么不是';我的SOAP请求不起作用吗?

Php 为什么不是';我的SOAP请求不起作用吗?,php,soap,Php,Soap,我正在尝试使用PHP发出SOAP请求。我的请求似乎与SOAP服务器文档中详细描述的请求相匹配(但使用的方法略有不同),但我得到了一个身份验证错误,就好像没有包含头一样 文档的请求示例 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSche

我正在尝试使用PHP发出SOAP请求。我的请求似乎与SOAP服务器文档中详细描述的请求相匹配(但使用的方法略有不同),但我得到了一个身份验证错误,就好像没有包含头一样

文档的请求示例

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <AuthHeader xmlns="http://novosolutions.com/">
      <SessionId>string</SessionId>
    </AuthHeader>
  </soap:Header>
  <soap:Body>
    <ViewTicket xmlns="http://novosolutions.com/">
      <Id>int</Id>
    </ViewTicket>
  </soap:Body>
</soap:Envelope>
编辑:
通过使用curl测试请求,我将其范围缩小到PHP的SoapClient使用变量作为名称空间这一事实。SoapServer不接受,但为。现在,我只需要弄清楚如何防止SoapClient使用变量。

您只是尝试了一下吗

error_reporting(E_ALL);
$client = new SoapClient($url,array('trace' => 1));
$client->__setSoapHeaders( new SoapHeader($url, 'SessionId', SESSION_ID) );
$result = $client->ViewTicket(array('Id'=>1355110));
var_dump($result);
echo '<hr>',str_replace('<','&lt;',$client->__getLastRequest());
错误报告(E_ALL);
$client=newsoapclient($url,array('trace'=>1));
$client->_setSoapHeaders(新的SoapHeader($url,'SessionId',SESSION_ID));
$result=$client->ViewTicket(数组('Id'=>1355110));
var_dump($结果);

echo“
”,str_replace('谢谢你的回复。没有PHP错误-结果是相同的(身份验证错误或会话已过期)。结果:我用soapUI软件尝试了相同的请求(免费获取),得到了相同的结果(身份验证错误或会话已过期)…你确定它不需要凭据吗?(如用户/pwd HTTP头)?我几乎明白了-你知道如何防止PHP的SoapClient在名称空间中使用变量吗?我需要而不是你可以构建一个类扩展并使用preg_替换来完成这项工作,就像他们在中解释的那样:你能找到解决方案吗?我知道了确切的问题。是的-我在会话id中包含了错误的#。会话id在响应头不是响应体。若要获取响应头,请使用$responseHeaders=array();$result=$client->\uu soapCall('Login',array('parameters'=>$bodyVar),null,null,$responseHeaders);$sessionid=$responseHeaders['AuthHeader']->sessionid;
$url = URL_BASE . URL_TICKET . '?WSDL';
$soapStruct = new SoapVar(array('SessionId' => SESSION_ID), SOAP_ENC_OBJECT);
$header = new SoapHeader('http://novosolutions.com/', 'AuthHeader', $soapStruct, false);

try {
    $client = new SoapClient($url, array('trace' => 1));
}
catch (SoapFault $exception) {
    echo 'Exception='.$exception;
}
$client->__setSoapHeaders(array($header));
var_dump($client);

$soapData = new SoapVar(array('Id' => 1355110), SOAP_ENC_OBJECT);
$result = $client->__soapCall('ViewTicket', array('parameters' => $soapData));

var_dump($result);
echo $client->__getLastRequest();
error_reporting(E_ALL);
$client = new SoapClient($url,array('trace' => 1));
$client->__setSoapHeaders( new SoapHeader($url, 'SessionId', SESSION_ID) );
$result = $client->ViewTicket(array('Id'=>1355110));
var_dump($result);
echo '<hr>',str_replace('<','&lt;',$client->__getLastRequest());