欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHP调用java的webservice(SOAP)

程序员文章站 2022-05-18 15:01:51
...

现在都是用微服务了,早期有个概念和微服务差不多的东西,叫SOAP。
最近有个项目就需要调用java那边的webservice获取订单状态,由于之前不了解走了些弯路,此次记录一下。

soap client 使用

PHP要开启soap
PHP调用java的webservice(SOAP)

调用步骤

  1. 连接soap
  2. 找出对外的function
  3. 找出支持的参数types
  4. 传参调用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

相关标签: 运维和开发