php调用java的webservice接口,这里用thinkphp的SoapClient扩展类实现
标签:php调用webservice接口  点击1961次 时间:2019-01-18
php作为客户端调用webservice接口开发,首先需要确保当前php版本为php5.3以上,同时需要php支持SOAP,需要安装SOAP扩展,具体安装百度一下,这里只讲如何实现搭建客户端,并进行接口通讯,通过phpinfo()方法去打印检查你当前的PHP环境中是否支持SOAP,如果支持,则开通进行客户端搭建。

 对于现在来说,很多接口都是基于HTTP协议的,方便快捷,但是由于客户需要网站的发布信息都要经过公司OA系统审核再发布,需要网站对接客户的OA客户的OA是java开发的用的WebService接口WSDL提交的,记得是很早以前做过,当时用是的fealphp框架,已经是很久之前的事 ,而这个网站项目是基于thinkPHP框架开发的,thinkphp框架已经有关于调用webservice接口的SoapClient扩展类,直接调取接口即可,下面简单介绍一下如何用thinkphp搭建webservice接口的客户端。

 
第一步骤、实例化SoapClient类搭建客户端
 
1.收到服务器端给的接口url:$wsdl_url = "http://这个是域名url/ekp/sys/webservice/webToReviewWebservice?wsdl
 
2.实例化SoapClient类搭建接口
header("content-type:text/html;charset=UTF-8");
$wsdl_url = "http://这个是域名url/ekp/sys/webservice/webToReviewWebservice?wsdl
$client = new \SoapClient($wsdl_url);
$client->soap_defencoding = 'utf-8';
 
第二步骤、通过get方法获取接口方法和参数
客户的OA接口只有java版,没有php的,所以需要自己想方法解决,摆在面前的问题是如何获取接口的方法和参数,进行操作,通过查询SoapClient类扩展知识找到了__getFunctions()和__getTypes(),一个获取接口方法,一个获取变量类型。
1.$client->__getFunctions()方法,通过print_r打印出接口方法:
print_r($client->__getFunctions());
打印结果如下:
Array
(
    [0] => webToReviewWebsResponse webToReviewWebs(webToReviewWebs $parameters)
)
通过打印可以看出接口方法为webToReviewWebs,但是还不知道传递参,这里需要通过$client->__getTypes() 获取接口的变量类型
 
2.$client->__getTypes() 方法,获取参数变量类型,通过print_r打印出接口方法:
print_r($client->__getTypes());
Array
(
    [0] => struct Exception {
 string message;
}
    [1] => struct webToReviewWebs {
 string arg0;
 string arg1;
 string arg2;
 string arg3;
}
    [2] => struct webToReviewWebsResponse {
 int return;
}
)
 
通过打印出来的数组可以看出webToReviewWebs接口方法有四个变量,并且变量的类型都是字符串类型。
 
 
 
通过这两个get方法我们可以得到接口的方法和参数的形式,这样就可以调用接口通信了。
 
第三步骤、执行接口方法传值通信
对于WebService跨语言的接口,很久没有做了,有些生疏,想当然的以为直接传递四个字符串参数就完事儿了,如下:
$arg0  ="sef1";
$arg1  ="sef2";
$arg2  ="sef3";
$arg3  ="sef4";
$bool = $client->webToReviewWebs($arg0,$arg1,$arg2,$arg3);
$bools = (array)$bool;
print_r($bools)
打印结果:
Array
(
    [return] => '未收到任何信息'
)
 
当时脑袋也没有多想,就直接说客户提交的接口有问题,也没有找自己的原因,后台客户那边还找了半天,也没有问题,用java调用接口都没有问题,到了下午我也冷静下来,想是不是传递的值需要做处理,于是查找资料,最后发现
thinkphp的SoapClient执行方法传递值需要通过数组把变量名和值都传递过去,于是做了一下改变,执行可以了,代码如下:
$array = array('arg0'=>'16816444faac530296af0534d3d91213',
       'arg1'=>'aaaaa1',
       'arg2'=>'qhyu',
       'arg3'=>'sfefe');
$bool = $client->webToReviewWebs($array);
$bools = (array)$bool;
print_r($bools);
打印结果:
Array
(
    [return] => 100
)
返回值100表示值传递成果。
 
最后说明一下:用PHP调用webToReviewWebs接口,如果接口是其他语言的一定要把传值的结构对应上,否则是无法成功,希望我的经验能让你在用PHP调用java开发的webToReviewWebs接口时少走弯路,一步完成。
 
最新动态

学习指南:

知识总结: