我创建了一个像这样的SOAP客户端:
$client = new SoapClient("file.wsdl");
然后当我想调用API函数时
$client->Authenticate("user", "password");
我收到以下错误:
格式化程序在尝试反序列化消息时抛出异常:
反序列化操作“Authenticate”的请求消息正文时出错。 预期名称空间为“http://schemas.xmlsoap.org/soap/envelope/”的结束元素“正文”。 从命名空间''找到元素'param1'。
但是当我尝试在数组中传递参数时,它可以工作,但我得到了下一个错误:
["errorMessage"]=>
string(35) "ORA-01008: not all variables bound
我的问题是:如何将PHP中的参数传递给SOAP客户端?他们必须在阵列中吗?
答案 0 :(得分:10)
你应该为参数传递一个数组并给出你的参数名称(可以在wsdl文件中找到)。在您的情况下,结果应如下所示(假设参数名称应为param1
和param2
基于错误消息):
$client->Authenticate(array('param1'=>"user", 'param2'=>"password"));
答案 1 :(得分:2)
$info = $client->__call("myAction", ['body' => ['param1' => '123', 'param2' => '456']]);
答案 2 :(得分:0)
这一切都取决于soap服务器如何定义,参数可以是你喜欢的字符串和数组。你的问题以前不合法,检查wsdl文件或soap服务器。
答案 3 :(得分:0)
$client = new SoapClient("your wsdl file");
$stock = "NCR";
$parameters= array("request"=>$stock);
$values = $client->someMethod($parameters);