首页 > 编程语言 >PHP WebService接口开发

PHP WebService接口开发

时间:2022-11-09 15:45:10浏览次数:64  
标签:WebService 接口 name header WebParam wsdl PHP public String

生成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

标签:WebService,接口,name,header,WebParam,wsdl,PHP,public,String
From: https://www.cnblogs.com/phper8/p/16873935.html

相关文章

  • python一个好玩的库,可以直接调接口数据,进行数据分析,不用去爬取数据集再进行分析了
    python一个好玩的库,可以直接调接口数据,进行数据分析,不用去爬取数据集再进行分析了简介这个库的名字叫GoPUP,GitHub主页是:https://github.com/justinzm/gopup这其实是一个基......
  • 初识接口
    接口接口的定义和使用接口用关键字interface来定义接口不能实例化接口和类之间是实现关系,通过implments关键字表示publicclass类名implements接口名{}接......
  • php 设计模式
    <?php//协程生成器函数并发classTest{publicfunctionasync(){$start=microtime(true);$url="https://money.finance.sina.com.c......
  • [Kyana]服务器php+https配置
    00|前排提示本文涉及的apache、nginx和caddy三者并无优劣之分,各有擅场,在个人博客使用时选取自己喜欢的即可。如无特殊提示,本文默认环境为UbuntuServer20.04(Linux5.4)......
  • Collection接口实现类的特点及常用方法
    特点:1.Collection实现子类可以存放多个元素,每个元素可以是object2.有些Collection的实现类,可以存放重复的元素,有些不可3.有些Collection的实现类,有些是有序地list,有些不......
  • 学习笔记-ThinkPHP 之 SQLI审计分析(三)
    ThinkPHP之SQLI审计分析(三)Time:9-23影响版本:ThinkPHP=5.1.22Payload:/public/index.php/index/index?orderby[id`|updatexml(1,concat(0x7,user(),0x7e),1)%23]=1......
  • 学习笔记-ThinkPHP5之SQLI审计分析(二)
    ThinkPHP之SQLI审计分析(二)Time:9-3影响版本:ThinkPHP=5.0.10Payload:/public/index.php/index/index?username[0]=notlike&username[1][0]=&username[1][1]=&userna......
  • 15-jmeter-压测带token的接口
    前言工作中我们需要压测的接口大部分都是需要先登陆后,带着token的接口(或者带着cookies),我们可以先登陆获取token再关联到下个接口。比如我现在要压测一个重置支付密码接口,......
  • 学习笔记-ThinkPHP5之SQLI审计分析(一)
    ThinkPHP5之SQLI审计分析(一)Time:8-31影响版本:5.0.13<=ThinkPHP<=5.0.15、5.1.0<=ThinkPHP<=5.1.5Payload:/public/index.php/index/index?username[0]=inc&username[1]=......
  • 浅谈PHP设计模式的代理模式
    简介:代理模式,是结构型的设计模式。用于为其它对象提供一种代理以控制对这个对象的访问。目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象,并且可以在不......