我习惯于编写 PHP 代码,但并不经常使用面向对象的代码。我现在需要与 SOAP (作为一个客户端)交互,但是不能正确地使用语法。我有一个 WSDL 文件,它允许我使用 SoapClient 类正确地设置一个新连接。但是,我无法实际进行正确的调用并获得返回的数据。我需要发送以下(简化)数据:
WSDL 文档中定义了两个函数,但是我只需要一个(下面的“ FirstFunction”)。下面是我为了获得可用函数和类型的信息而运行的脚本:
$client = new SoapClient("http://example.com/webservices?wsdl");
var_dump($client->__getFunctions());
var_dump($client->__getTypes());
下面是它产生的输出:
array(
[0] => "FirstFunction Function1(FirstFunction $parameters)",
[1] => "SecondFunction Function2(SecondFunction $parameters)",
);
array(
[0] => struct Contact {
id id;
name name;
}
[1] => string "string description"
[2] => string "int amount"
}
假设我想用数据调用 FirstFunction:
正确的语法是什么?我一直在尝试各种各样的选择,但它似乎肥皂结构是相当灵活的,所以有很多方法这样做。从手册上也看不出来。
更新1: 来自 MMK 的试用样品:
$client = new SoapClient("http://example.com/webservices?wsdl");
$params = array(
"id" => 100,
"name" => "John",
"description" => "Barrel of Oil",
"amount" => 500,
);
$response = $client->__soapCall("Function1", array($params));
但是我得到了这样的回答: Object has no 'Contact' property
。正如您在 getTypes()
的输出中看到的,有一个称为 Contact
的 struct
,所以我想我需要在某种程度上说明我的参数包括 Contact 数据,但问题是: 如何?
更新2: 我也尝试了这些结构,同样的错误。
$params = array(
array(
"id" => 100,
"name" => "John",
),
"Barrel of Oil",
500,
);
还有:
$params = array(
"Contact" => array(
"id" => 100,
"name" => "John",
),
"description" => "Barrel of Oil",
"amount" => 500,
);
两种情况下都有错误: 对象没有“ Contact”属性