【问题标题】:SoapClient to nusoap, Server did not recognize the value of HTTP Header SOAPActionSoapClient 到 nusoap,Server 没有识别 HTTP Header SOAPAction 的值
【发布时间】:2013-07-08 10:20:31
【问题描述】:

我们正在运行 PHP 5.3.18,由于一些奇怪的原因我无法安装 php-soap,因此我无法使用 SoapClient 类...

我现在正在使用最后一个 nusoap(应该与 php 5.3.18 兼容)并将代码从 SoapClient 翻译到 nusoap_client。

此代码使用 SoapClient 并且可以完美运行

$s_WSPROTOCOL = 'https';
$s_WSHOSTNAME = 'xxxxxxxx.yyyyyy.tdl';
$s_WSPORT = '';
$s_WSPATHNAME = 'webservices/service.asp?WSDL';         
$s_WSTIPOOP = 'MyFunction';

$parameters['Username'] = '999';
$parameters['Login'] = 'Master';
$parameters['Password'] = 'universe';
$parameters['IdServ'] = '5';
$parameters['IdCard'] = '555';
$parameters['Controllo'] = '';

echo $s_WSTIPOOP."<br />";
echo $s_WSPROTOCOL."://".$s_WSHOSTNAME.$s_WSPORT."/".$s_WSPATHNAME."<br /><br /><br />";     

try 
{
    $SOAP = new SoapClient($s_WSPROTOCOL."://".$s_WSHOSTNAME.$s_WSPORT."/".$s_WSPATHNAME, array('trace' => 1));                
    $result = $SOAP->__soapCall($s_WSTIPOOP, array("parameters" => $parameters), null);
    foreach ($result as $key => $value) 
    {
      echo "<b>".$key."</b><br />";
      print_r($value);
      echo "<br />";
    }

}
catch (SoapFault $e) 
{        
    echo "<b>".$e->faultstring."</b>";
}           

nusoap 中的这段代码返回

[faultcode] => soap:Client
[faultstring] => Server did not recognize the value of HTTP Header SOAPAction: .
[detail] => 

这里是代码

require("nusoap/lib/nusoap.php");

error_reporting(E_ALL ^ E_NOTICE);
$ERROR_MSG = '';

$s_WSPROTOCOL = 'https';
$s_WSHOSTNAME = 'xxxxxxxx.yyyyyy.tdl';
$s_WSPORT = '';
$s_WSPATHNAME = 'webservices/service.asp?WSDL';         
$s_WSTIPOOP = 'MyFunction';

$parameters['Username'] = '999';
$parameters['Login'] = 'Master';
$parameters['Password'] = 'universe';
$parameters['IdServ'] = '5';
$parameters['IdCard'] = '555';
$parameters['Controllo'] = '';

echo $s_WSTIPOOP."<br />";
echo $s_WSPROTOCOL."://".$s_WSHOSTNAME.$s_WSPORT."/".$s_WSPATHNAME."<br /><br /><br />";     
$client = new nusoap_client($s_WSPROTOCOL."://".$s_WSHOSTNAME.$s_WSPORT."/".$s_WSPATHNAME);

$result = $client->call($s_WSTIPOOP, $parameters, '');

if ($client->fault) {
echo '<h2>Fault (Expect - The request contains an invalid SOAP body)</h2><pre>'; print_r($result); echo '</pre>';
} else {
$err = $client->getError();
if ($err) {
echo '<h2>Error</h2><pre>' . $err . '</pre>';
} else {
echo '<h2>Result</h2><pre>'; print_r($result); echo '</pre>';
}
}

错在哪里?我正在阅读来自 nusoap 源的代码,尝试使用不同的参数但没有成功

【问题讨论】:

    标签: php soap wsdl nusoap


    【解决方案1】:

    我必须将 $wsdl 参数设置为 true 才能工作

    $client = new nusoap_client($s_WSPROTOCOL."://".$s_WSHOSTNAME.$s_WSPORT."/".$s_WSPATHNAME, true);
    

    【讨论】:

      【解决方案2】:

      错误在这里

         $result = $client->call($s_WSTIPOOP, $parameters, '');
      

      $client 来自哪里?

      我想你忘了为 nusoap_client 类创建 object

         $client = new nusoap_client();
      

      修改后

      在第一个示例中发送参数,

           $result = $client->call($s_WSTIPOOP, array("parameters" => $parameters), '');
      

      【讨论】:

        【解决方案3】:

        这有帮助。 错误的命名空间。 如果您正在升级旧的 web 服务,所有者可能保留了相同的旧服务,请不要更新它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-02
          • 2016-04-30
          • 2011-12-19
          • 1970-01-01
          • 2012-01-19
          • 2018-11-03
          • 2018-11-16
          • 1970-01-01
          相关资源
          最近更新 更多