PHP soap客户端调用停止脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP soap客户端调用停止脚本相关的知识,希望对你有一定的参考价值。

以下问题让我发疯:

我使用WSDL和p12证书连接到SOAP WS。如果方法不正确或者缺少参数,我可以调用某些东西并获得异常:

"Function ("Test1") is not a valid method for this service"
"SOAP-ERROR: Encoding: object has no 'message' property"

但如果一切(我认为)都是正确的,脚本就会停止

try{
$client = new SoapClient(
        $soapUrl,
        array(
                'ssl' => array(
                        'cert' => $cert_file,
                        'certpasswd' => $cert_password),
                        'trace' => 1,
                        'exceptions' => 0
                        )
                )
);

$uuid = gen_uuid();

$SendValue = array('transaction' => Array('uuid'=>$uuid),
                   'message' => '-test message-',
                   'delay' => 0,
                   throwException => 1,
                   forceRollback => 0);
echo "<br>";                 

//           var_dump($SendValue);
        echo "Test Start - ";    // this is printed 
        $result = $client -> Test($SendValue);
            echo " - Test Ende";  // this is not printed anymore and all the below
                echo "<br>OK - Request:
" . $client->__getLastRequest(). "!
";


        echo "<pre>";
        print_r($result);
        echo "</pre>";
//-----------------------------------------------------------

echo "<h1>EOF</h1>";
}catch(Exception $exception)
{
    echo "Did not work...";

 var_dump($exception);
 echo "Request:
" . $client->__getLastRequest() . "
";
 echo "Response:
" . $client->__getLastResponse() . "
";
}

echo "this is not printed";

有什么建议吗?非常感谢提前。

答案

看起来您将trace选项放在配置数组中的错误位置。而不是

    array(
            'ssl' => array(
                    'cert' => $cert_file,
                    'certpasswd' => $cert_password,
                    'trace' => 1,
                    'exceptions' => 0
                    )
            )

它应该是

    array(
            'ssl' => array(
                    'cert' => $cert_file,
                    'certpasswd' => $cert_password,
                    ) 
            'trace' => 1,
            'exceptions' => 0
            )

一个有效的未设置trace选项(当它在错误的地方,使用回退默认值0)导致__getLastRequest()不可用,所以你可能会“调用未定义的方法错误”。

您没有看到这个的最可能的原因是您的运行时php配置阻止您看到错误消息。请参阅PHP's white screen of death以了解如何查看错误。

它也可能是SoapClient抛出不同类型的异常而不是SoapFault。将该类型更改为Exception,看看你是否得到任何东西。

以上是关于PHP soap客户端调用停止脚本的主要内容,如果未能解决你的问题,请参考以下文章

如果客户端断开连接,则停止执行 PHP 脚本

PHP SOAP 调用客户端函数

通过异步 curl 调用 PHP 脚本时停止

如何创建 PHP SOAP 客户端以在 SSL 下调用 WCF Web 服务?

如何查看 PHP SOAP 客户端类生成的实际 XML?

PHP soap客户端+得到空响应