记录一次tp6调用webservice

最近有个项目要对接电力平台,对方用的是webservice,折腾了好几天终于搞定,这里做个记录

首先需要一个工具 econea/nusoap,想查看具体信息可以去这里,https://github.com/f00b4r/nusoap

composer require econea/nusoap

service端,建立server控制器,定义了一个hello方法和name参数

<?php
namespace app\admin\controller;
use app\BaseController;
use think\App;

class Server extends BaseController
{

    public function __construct(App $app){
        parent::__construct($app);
    }

    public function index(){
        $server = new \nusoap_server();
        // 避免乱码
        $server->soap_defencoding = 'UTF-8';
        $server->decode_utf8 = false;
        $server->xml_encoding = 'UTF-8';
        $server->configureWSDL ('webservice'); // 打开 wsdl 支持

        $server->register('hello',
            array ("name" => "xsd:string" ), // 参数,默认为 "xsd:string"
            array ("return" => "xsd:string" ) // 返回值,默认为 "xsd:string"
        );

        //service  处理客户端输入的数据
        @$server->service(file_get_contents("php://input"));
        die;
    }
}

现在可以访问服务端啦,http://xxx.com/admin/server

看到以下画面,就代表服务端搭建成功啦

还可以访问 http://xxx.com/admin/server?wsdl,可以理解为接口文档,是一个自动生成的xml文件,长这样

 我们服务端是跑起来了,但是服务端定义的hello方法还没实现,经过测试,hello方法不能写在控制器中,要写在框架的公共函数文件里,也就是这里:项目名称\app\common.php,也可以自己定义一个文件,框架能访问到这个方法就行

function hello($name) {
    return "Hello,  { $name } !";
}

接下来写客户端,新建一个client的controller

<?php
namespace app\admin\controller;
use app\BaseController;
use think\App;

class Client extends BaseController
{
    public function __construct(App $app){
        parent::__construct($app);
    }

    public function index(){
        $client = new \nusoap_client('http://xxx.com/admin/server?wsdl');

        //如果需要加载证书,加上这部分
        $client->scheme = 'https';
        $cer_file = root_path().'cert/webclient.pem';
        $client->setCredentials('','','certificate',array(
            "cainfofile" => $cer_file,
            "passphrase" =>  "",
            "verifypeer" => 0, //OPTIONAL
            "verifyhost" => 0 //OPTIONAL
        ));
        //如果需要加载证书,加上这部分

        $client->soap_defencoding = 'UTF-8';
        $client->decode_utf8 = false;
        $client->xml_encoding = 'UTF-8';

        //参数转为数组形式传递
        $paras=array('name'=>'张三');
        //目标方法没有参数时,可省略后面的参数
        //如果需要传命名空间的话,call的第三个参数传命名空间
        $result=$client->call('hello',$paras);
        //检查错误,获取返回值
        if (!$err=$client->getError()) { 
            echo "返回结果:",$result;  
        } else { 
            echo "调用出错:",$err; 
        }
    }
}

接下来测试一下,访问http://xxx.com/admin/client

 恭喜你,在tp6里面搭建了一个webservice的服务器和客户端

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值