13

我像这样创建了一个 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 客户端?他们必须在一个数组中吗?

4

4 回答 4

15

您应该为参数传递一个数组并给出参数名称(可以在 wsdl 文件中找到)。在您的情况下,结果应该如下所示(假设参数名称应该是param1并且param2基于错误消息):

$client->Authenticate(array('param1'=>"user", 'param2'=>"password"));
于 2012-08-10T10:27:42.040 回答
4
$info = $client->__call("myAction", ['body' => ['param1' => '123', 'param2' => '456']]);
于 2017-03-23T15:18:00.860 回答
0

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

于 2012-08-10T10:34:04.207 回答
0
   $client = new SoapClient("your wsdl file");
   $stock = "NCR";
   $parameters= array("request"=>$stock);
   $values = $client->someMethod($parameters);
于 2013-03-08T14:28:47.927 回答