PHP调用java的webservice(SOAP)
程序员文章站
2022-05-18 15:01:51
...
现在都是用微服务了,早期有个概念和微服务差不多的东西,叫SOAP。
最近有个项目就需要调用java那边的webservice获取订单状态,由于之前不了解走了些弯路,此次记录一下。
soap client 使用
PHP要开启soap
调用步骤
- 连接soap
- 找出对外的function
- 找出支持的参数types
- 传参调用function,获取结果。
连接soap
$wsdl = 'http://172.16.88.125/ap/getOrderInfo?wsdl';
$soap=new \SoapClient($wsdl);
获取function
连接之后,先看下该wsdl开放的function
echo $soap->__getFunctions();
可以看到相关暴露出来的方法:
getOrderInfoWithDelivery getOrderInfo(getOrderInfo $parameters)"
之后调用时要传相关的function
获取types
找到对应方法的参数和参数类型,之后按要求传递
echo $soap->__getTypes();
可以看到相关的参数和类型:
"struct getOrderInfo { tactOrderVehicleInfo parmInput; }",
"struct tactOrderVehicleInfo { string phone; string start; string end; }",
"struct baseInputInfo { string fromCode; string toCode; string messagId; string chgSourceSys; }",
"struct baseOutputInfo { int returnFlag; string errorMessage; }"
这里注意,PHP中没有struct,用array代替即可,不需要专门去new一个对象或转xml格式。
此次要调用getOrderInfo
方法,传的参数parmInput
对应的结构体是tactOrderVehicleInfo
,它包含三个参数:
phone, // string 字符串
startdate, // string 字符串
enddate // string 字符串
对应PHP中传参如下:
$paramData = array('phone'=> $phone,
'startdate' => '2020-01-10 00:00:00',
'enddate' => '2020-05-10 00:00:00');
$param = array('parmInput' => $paramData);
调用soap的方法
准备好了参数后,直接调用即可
$result = $soap->getOrderInfo($param);
返回的结果是个对象,可直接使用,不需要再去转xml什么的。
echo gettype($result);
soap client 示例
$wsdl = 'http://172.16.88.125/ap/getOrderInfo?wsdl';
// 连接soap
$soap=new \SoapClient($wsdl);
// echo $soap->__getFunctions(); // 查看方法
// echo $soap->__getTypes(); // 查看要传的数据类型
// 根据function和types,配置好参数
$paramData = array('phone'=> $phone,
'startdate' => '2020-01-10 00:00:00',
'enddate' => '2020-05-10 00:00:00');
$param = array('parmInput' => $paramData);
// 调用方法,获取结果
$result = $soap->getOrderInfo($param);
参考
https://www.cnblogs.com/hujun1992/p/wsdl.html
推荐阅读
-
php递归调用删除数组空值元素的方法
-
兼容PHP和Java的des加密解密代码分享
-
PHP实用小技巧之调用录像的方法
-
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
-
php在页面中调用fckeditor编辑器的方法
-
python调用java的jar包方法
-
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
-
java使用this调用构造函数的实现方法示例
-
php创建类并调用的实例方法
-
调用android的getColor()方法出现 java.lang.NoSuchMethodError: android.content.res.Resources.getColor