生成wsdl文件,php不能生成入参对象的形式,用java生成比较简单。

sdk:1.8(不要使用高版本)

下载soap.zip,IDEA打开项目。

  1. 左侧项目列表,右键项目名称,打开模块设置【F4快捷键】,点击项目SDK选择1.8,点击确定。

  2. 右下角弹窗【找到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文件,打开项目下的Java2Wsdl运行main访问,刷新左侧项目列表,显示wsdl文件,表示成功。

src/main/java/org/example下面新建java类,文件名输入UserInfo,选择接口

  1. package org.example;
  2. import javax.jws.WebMethod;
  3. import javax.jws.WebParam;
  4. public interface UserInfo {
  5. @WebMethod
  6. String User_List(
  7. @WebParam(header = true, name = "PostTime") String PostTime,
  8. @WebParam(header = true, name = "MessageID") String MessageID,
  9. @WebParam(name = "Users") Users Users
  10. );
  11. @WebMethod
  12. String User_type(
  13. @WebParam(header = true, name = "PostTime") String PostTime,
  14. @WebParam(header = true, name = "MessageID") String MessageID,
  15. @WebParam(name = "Types") Types Types
  16. );
  17. }

src/main/java/org/example下面新建java类,文件名输入Users,选择

  1. package org.example;
  2. public class Users {
  3. public String age;
  4. public String sex;
  5. public String name;
  6. }

src/main/java/org/example下面新建java类,文件名输入Types,选择

  1. package org.example;
  2. public class Types {
  3. public String typeid;
  4. public String typename;
  5. }

UserInfo 对外抛出2个接口,User_List和User_type。

  1. //设置header参数
  2. @WebParam(header = true, name = "PostTime") String PostTime,
  3. @WebParam(header = true, name = "MessageID") String MessageID,
  4. //body参数 Users属于对应,里面存在3个参数age,sex,name
  5. @WebParam(name = "Users") Users Users

打开Java2Wsdl文件,修改main方法。

  1. new Java2Wsdl(UserInfo.class, "UserInfo");

点击main方法的绿色小三角,提示“WSDL文件已生成,请刷新项目!”,刷新左侧列表(右键项目名称,从磁盘重新加载),显示UserInfo.wsdl文件,表示成功。

复制wsdl文件,到PHP项目下。

修改wsdl文件,改成下面服务端地址

  1. <soap:address location="http://xxx.com/UserInfo"/>

新建服务端文件

  1. class UserInfoService{
  2. public function __construct()
  3. {
  4. //获取header参数
  5. $hdr = file_get_contents("php://input");
  6. if (strpos($hdr,'<s:Header>')===false) {
  7. $hdr = null;
  8. } else {
  9. $hdr = explode('<s:Header>',$hdr);
  10. $hdr = explode('</s:Header>',$hdr[1]);
  11. $hdr = $hdr[0];
  12. }
  13. }
  14. function User_List($params){
  15. //todo 处理逻辑
  16. var_dump($params);
  17. $this->response($header,$result);
  18. }
  19. function User_type($params){
  20. //todo 处理逻辑
  21. var_dump($params);
  22. $this->response($header,$result);
  23. }
  24. function response($header,$result){
  25. //手动组装返回体
  26. echo '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  27. <soap:Response>
  28. <Header>'.$this->array_to_xml($header).'</Header>
  29. <Body>'.$this->array_to_xml($body).'</Body>
  30. </soap:Response>
  31. </soap:Envelope>';
  32. die; //重要
  33. }
  34. }
  35. class UserInfo {
  36. public function index(){
  37. $wsdl_path = 'D:\phpStudy\PHPTutorial\WWW\UserInfo.wsdl'; //绝对路径
  38. $soap_server = new SoapServer($wsdl_path);
  39. $soap_server->setClass('UserInfoService');
  40. $soap_server->handle();
  41. }
  42. }

通过浏览器访问:xxxx.com/UserInfo/index?wsdl 查看到xml文件

按照SoapUI,点击soap,输入项目名称和wsdl文件地址。

文件链接:https://pan.baidu.com/s/1EgI_0PH2Zc3N-EAwNaLzSg?pwd=nlyf
提取码:nlyf

版权声明:本文为大智如蠢原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/phper8/p/16873935.html