如何使用 SoapClient 类进行 PHP SOAP 调用
我习惯于编写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
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,
);
两种情况下的错误:对象没有“联系人”属性