PHP WebService接口开发

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

安装IntelliJ IDEA

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

删除根目录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

posted @ 2022-11-09 15:31  大智如蠢  阅读(307)  评论(0编辑  收藏  举报