【问题标题】:PHP SOAP client calling function with parameters带参数的 PHP SOAP 客户端调用函数
【发布时间】:2012-08-10 10:22:54
【问题描述】:

我像这样创建了一个 SOAP 客户端:

$client = new SoapClient("file.wsdl");

然后当我想调用 API 函数时

$client->Authenticate("user", "password");

我收到以下错误:

格式化程序在尝试反序列化消息时抛出异常:

反序列化操作“验证”的请求消息正文时出错。 应来自命名空间“http://schemas.xmlsoap.org/soap/envelope/”的结束元素“正文”。 从命名空间“”中找到元素“param1”。

但是当我尝试在数组中传递参数时,它可以工作,但我得到下一个错误:

["errorMessage"]=>
string(35) "ORA-01008: not all variables bound

我的问题是:如何将 PHP 中的参数传递给 SOAP 客户端?它们必须在一个数组中吗?

【问题讨论】:

  • 如果可能,请提供您的 wsdl 文件的相关部分。参数名称应在此处说明。

标签: php soap


【解决方案1】:

您应该为参数传递一个数组并为您的参数命名(可以在 wsdl 文件中找到这些名称)。在您的情况下,结果应如下所示(根据错误消息假设参数名称应为 param1 和 param2):

$client->Authenticate(array('param1'=>"user", 'param2'=>"password"));

【讨论】:

  • 在尝试使用new \SoapParam('user', 'param1') 失败后(不需要 2 个参数 ATM),这行得通。
【解决方案2】:
$info = $client->__call("myAction", ['body' => ['param1' => '123', 'param2' => '456']]);

【讨论】:

    【解决方案3】:

    这完全取决于soap服务器如何定义,参数可以是字符串和数组,你喜欢。你的问题是paras不合法,检查wsdl文件或so​​ap服务器。

    【讨论】:

      【解决方案4】:
         $client = new SoapClient("your wsdl file");
         $stock = "NCR";
         $parameters= array("request"=>$stock);
         $values = $client->someMethod($parameters);
      

      【讨论】:

        猜你喜欢
        • 2016-06-20
        • 2020-01-07
        • 2015-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多