laravel框架下soapServer支持wsdl的代码示例

发布时间 - 2018-10-26 00:00:00    点击率:

本篇文章给大家带来的内容是关于laravel中soapserver支持wsdl的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

$server = new \SoapServer(null, ['uri' => 'noganluonguri']);
$server->setObject(new NganluongServer());
ob_start();
$server->handle();
return ob_get_clean();

上边这段代码是无wsdl模式下的,但是这次是对接第三方的服务,需要我们这边去定义soap webservice,第三方来调用,第三方定义的是wsdl模式的,所以今天研究了下。

laravel代码示例(其它框架类似思考方式):

  • 主要逻辑代码 - SoapService.php

  • 创建路由

$api->any('soapUrl', 'SoapCallbackController@soapFun');
  • 路由主要实现方法-wsdl不存在则创建,不需要手动创建,url:https:xxx/soapurl?wsdl

getWSDL());
                    fclose($file);
                }
                $server = new \SoapServer($storagePath . '/wsdl/' . $className . '.wsdl', array('soap_version' => SOAP_1_2));
                $server->setClass($procClass);
                $server->handle();
            } catch (\Exception $e) {
                Log::error('wsdl服务创建异常');
            }
        }
    }
  • 生成wsdl类 - SoapDiscovery.php

class_name = $class_name;
        $this->service_name = $service_name;
    }

    /**
     * SoapDiscovery::getWSDL() Returns the WSDL of a class if the class is instantiable.
     * 
     * @return string
     * */
    public function getWSDL() {
        if (empty($this->service_name)) {
            throw new Exception('No service name.');
        }
        $headerWSDL = "\n";
        $headerWSDL.= "service_name\" targetNamespace=\"urn:$this->service_name\" xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\" xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\" xmlns:tns=\"urn:$this->service_name\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns=\"http://schemas.xmlsoap.org/wsdl/\">\n";
        $headerWSDL.= "\n";

        if (empty($this->class_name)) {
            throw new Exception('No class name.');
        }

        $class = new ReflectionClass($this->class_name);

        if (!$class->isInstantiable()) {
            throw new Exception('Class is not instantiable.');
        }

        $methods = $class->getMethods();

        $portTypeWSDL = '';
        $bindingWSDL = '\n\n";
        $serviceWSDL = '\n\nservice_name . 'Port" binding="tns:' . $this->service_name . "Binding\">\n\n\n";
        $messageWSDL = '';
        foreach ($methods as $method) {
            if ($method->isPublic() && !$method->isConstructor()) {
                $portTypeWSDL.= '\n" . '\ngetName() . "Response\" />\n\n";
                $bindingWSDL.= '\n" . '\nservice_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />\n\n\nservice_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />\n\n\n";
                $messageWSDL.= '\n";
                $parameters = $method->getParameters();
                foreach ($parameters as $parameter) {
                    $messageWSDL.= '\n";
                }
                $messageWSDL.= "\n";
                $messageWSDL.= '\n";
                $messageWSDL.= '\n";
                $messageWSDL.= "\n";
            }
        }
        $portTypeWSDL.= "\n";
        $bindingWSDL.= "\n";
        //return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '');
        //生成wsdl文件,将上面的return注释
        $fso = fopen($this->class_name . ".wsdl", "w");
        fwrite($fso, sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, ''));
    }

    /**
     * SoapDiscovery::getDiscovery() Returns discovery of WSDL.
     * 
     * @return string
     * */
    public function getDiscovery() {
        return "\n\n\n";
    }

}

?>
  • webservice测试

getSum(10, 24);
echo $soap->__soapCall('getSum',array(10,24));


# laravel  # php  # https  # 第三方  # 的是  # 不需要  # 两种  # 对你  # 有一定  # 这段  # 给大家  # 不存在  # 服务端 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  七夕网站制作视频,七夕大促活动怎么报名?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  如何打造高效商业网站?建站目的决定转化率  Laravel如何实现文件上传和存储?(本地与S3配置)  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何挑选优质建站一级代理提升网站排名?  如何在阿里云购买域名并搭建网站?  Android Socket接口实现即时通讯实例代码  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  iOS验证手机号的正则表达式  如何在Windows服务器上快速搭建网站?  详解Oracle修改字段类型方法总结  JavaScript数据类型有哪些_如何准确判断一个变量的类型  EditPlus中的正则表达式 实战(2)  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  LinuxShell函数封装方法_脚本复用设计思路【教程】  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  iOS UIView常见属性方法小结  Laravel怎么判断请求类型_Laravel Request isMethod用法  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  如何利用DOS批处理实现定时关机操作详解  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  高性能网站服务器配置指南:安全稳定与高效建站核心方案  Laravel怎么在Controller之外的地方验证数据  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Python正则表达式进阶教程_复杂匹配与分组替换解析  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  智能起名网站制作软件有哪些,制作logo的软件?  如何在景安服务器上快速搭建个人网站?  怎么用AI帮你为初创公司进行市场定位分析?  焦点电影公司作品,电影焦点结局是什么?  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  如何在万网ECS上快速搭建专属网站?  如何在IIS7上新建站点并设置安全权限?  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  在线制作视频网站免费,都有哪些好的动漫网站?  如何在IIS中配置站点IP、端口及主机头?  ,交易猫的商品怎么发布到网站上去?  Python文件异常处理策略_健壮性说明【指导】  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  实现点击下箭头变上箭头来回切换的两种方法【推荐】  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?