我习惯于编写 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:
- 联系电话:100
- 联系人姓名: 约翰
- 一般描述:一桶油
- 金额:500
正确的语法是什么?我一直在尝试各种选择,但肥皂结构似乎非常灵活,因此有很多方法可以做到这一点。从说明书上也看不出来...
更新 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()
,有一个struct
called 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,
);
两种情况下均出错:对象没有“联系人”属性`