当前位置: 首页 > 工具软件 > wsdl2php > 使用案例 >

PHP对接wsdl参数前缀,PHP通过SoapClient调用WebService的wsdl格式接口时的注意事项

乌和畅
2023-12-01

1. 前言

话说这是个比较让我长见识的问题。虽然做了这么久的技术,但调用接口一直都是用json。通过WebService调用数据还是第一次接触。

由于自己对WebService不熟悉,所以理所应当的夹起尾巴做人,再不露怯的情况下先研究了一下有关WebService的知识,然后开始照着甲方给的WebService接口文档一个一个的去测试。现在觉得已经出师了,所以把过程记录下。

2. 关于阅读wsdl

wsdl是什么?wsdl怎么撰写?这个更多的是WebService服务器端的事情,也就是说这是提供WebService的人应该考虑的事情,如果你只需要调用WebService,需要了解的内容非常少。只需要基本看懂wsdl就可以了。

wsdl本质上就是XML,其中重要的标签有两个一个是另一个是下的

代表WebService可以调用的方法名称。

下的代表调用方法时需要的参数。

3. 关于传参的问题

3.1 通过键值对数组向方法传参。

假如我们在调用WebService的时候,需要向方法传参,需要以键值对数组的形式传进去。

为啥要强调这个问题呢?

因为在我拿到的接口文档中,调用接口的方法是以Java形式给出的例子:

public String InvokeIntoBaas(String token, String docId, String DocType)

于是乎我也顺理成章的在php中用下面的写法:

$client = new \SoapClient('http://XXXXX/XXXX?wsdl');

$token = "asd87a98s4ga515sd3ga12ga897sd";

$docId = "32";

$DocType = "tscDoc";

$result = $client->InvokeIntoBaas($token, $docId, $DocType);

var_dump($result);

?>

然后你会发现,这样肯定是无法运行成功的。

向方法传值,一定是通过键值对数组,数组里面写明参数名称和参数值,也就是说无论有多少个参数,都是向方法里面传一个键值对数组就够了。

就像下面这种方式:

$client = new \SoapClient('http://XXXXX/XXXX?wsdl');

$param = [];

$param["token"] = "asd87a98s4ga515sd3ga12ga897sd";

$param["docId"] = "32";

$param["DocType"] = "tscDoc";

$result = $client->InvokeIntoBaas($param);

var_dump($result);

?>

只有通过键值对数组的方式,WebService才能把传入的内容准确的识别。也就是说,WebService识别传入的参数不是通过参数的前后顺序,而是通过参数键值对中的键名。

3.2 参数内容以wsdl中的内容为准。

为什么上面要强调下wsdl呢?是因为我拿到WebService的接口文档时,接口文档里面写的一些内容无论我怎样试验都无法使用成功。最后发现,接口文档时间太久了,其中的某个字段名称已经更新。

而我是怎么知道的呢?

是通过看wsdl中下的那些知道的。

换句话说,再你向WebService中的方法传参的时候,参数键值对中的键名一定要和wsdl中的名字一一对应,差一个字母也不可以。

必须要提的

就通过这一点,我很肯定的指出了文档的错误,一个现学现用的新手给WebService开发人员还上了一课。是不是很厉害!哈哈哈!

4. 几个重要的函数

echo("打印暴露的方法:");

var_dump($client->__getFunctions());

print("
");

echo("打印对应方法的参数和参数类型:");

var_dump($client->__getTypes());

print("
");

echo("最后一次请求的头数据:");

var_dump($client->__getLastRequestHeaders());

echo "
";

echo("最后一次请求的数据:");

var_dump($client->__getLastRequest());

echo "
";

echo("最后一次返回的头数据:");

var_dump($client->__getLastResponseHeaders());

echo "
";

echo("最后一次返回的数据:");

var_dump($client->__getLastResponse());

 类似资料: