生成wsdl文件,php不能生成入参对象的形式,用java生成比较简单。
安装IntelliJ IDEA
sdk:1.8(不要使用高版本)
打开项目
下载soap.zip,IDEA打开项目。
-
左侧项目列表,右键项目名称,打开模块设置【F4快捷键】,点击项目SDK选择
1.8
,点击确定。 -
右下角弹窗【找到Gradle构建脚本】,点击
加载
。
2.1 网络问题可能会安装包失败。下载gradle-7.4-bin.zip文件,修改gradle/wrapper/gradle-wrapper.properties文件,distributionUrl改成本地能访问地址distributionUrl=http\://127.0.0.1/gradle-7.4-bin.zip
,例如phpStudy放在根目录,能通过浏览器访问上面地址。
2.2 已修改distributionUrl地址,加载按钮找不到,右上角最右侧【通知】【数据库】【Gradle】点击【Gradle】,点击刷新图标。
测试生成wsdl
删除根目录wsdl文件,打开项目下的Java2Wsdl
运行main访问,刷新左侧项目列表,显示wsdl文件,表示成功。
编写接口
src/main/java/org/example下面新建java类,文件名输入UserInfo
,选择接口
。
package org.example;
import javax.jws.WebMethod;
import javax.jws.WebParam;
public interface UserInfo {
@WebMethod
String User_List(
@WebParam(header = true, name = "PostTime") String PostTime,
@WebParam(header = true, name = "MessageID") String MessageID,
@WebParam(name = "Users") Users Users
);
@WebMethod
String User_type(
@WebParam(header = true, name = "PostTime") String PostTime,
@WebParam(header = true, name = "MessageID") String MessageID,
@WebParam(name = "Types") Types Types
);
}
src/main/java/org/example下面新建java类,文件名输入Users
,选择类
。
package org.example;
public class Users {
public String age;
public String sex;
public String name;
}
src/main/java/org/example下面新建java类,文件名输入Types
,选择类
。
package org.example;
public class Types {
public String typeid;
public String typename;
}
代码解释
UserInfo 对外抛出2个接口,User_List和User_type。
//设置header参数
@WebParam(header = true, name = "PostTime") String PostTime,
@WebParam(header = true, name = "MessageID") String MessageID,
//body参数 Users属于对应,里面存在3个参数age,sex,name
@WebParam(name = "Users") Users Users
生成WSDL
打开Java2Wsdl文件,修改main方法。
new Java2Wsdl(UserInfo.class, "UserInfo");
点击main方法的绿色小三角,提示“WSDL文件已生成,请刷新项目!”,刷新左侧列表(右键项目名称,从磁盘重新加载),显示UserInfo.wsdl
文件,表示成功。
PHP服务端
复制wsdl文件,到PHP项目下。
修改wsdl文件,改成下面服务端地址
<soap:address location="http://xxx.com/UserInfo"/>
新建服务端文件
class UserInfoService{
public function __construct()
{
//获取header参数
$hdr = file_get_contents("php://input");
if (strpos($hdr,'<s:Header>')===false) {
$hdr = null;
} else {
$hdr = explode('<s:Header>',$hdr);
$hdr = explode('</s:Header>',$hdr[1]);
$hdr = $hdr[0];
}
}
function User_List($params){
//todo 处理逻辑
var_dump($params);
$this->response($header,$result);
}
function User_type($params){
//todo 处理逻辑
var_dump($params);
$this->response($header,$result);
}
function response($header,$result){
//手动组装返回体
echo '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Response>
<Header>'.$this->array_to_xml($header).'</Header>
<Body>'.$this->array_to_xml($body).'</Body>
</soap:Response>
</soap:Envelope>';
die; //重要
}
}
class UserInfo {
public function index(){
$wsdl_path = 'D:\phpStudy\PHPTutorial\WWW\UserInfo.wsdl'; //绝对路径
$soap_server = new SoapServer($wsdl_path);
$soap_server->setClass('UserInfoService');
$soap_server->handle();
}
}
通过浏览器访问:xxxx.com/UserInfo/index?wsdl 查看到xml文件
调试工具
按照SoapUI,点击soap,输入项目名称和wsdl文件地址。
文件下载
文件链接:https://pan.baidu.com/s/1EgI_0PH2Zc3N-EAwNaLzSg?pwd=nlyf
提取码:nlyf