在 PHP 中实现带 WSDL 的 SOAP

  1. 用 composer 安装生成 WSDL 所需的库
    composer require piotrooo/wsdl-creator
    
  2. 实现用于外部访问的入口文件,代码示例请参考(其中方法名和参数中出现的 Notify 对应一个类名,该类的方法将成为可以通过 SOAP 调用的外部接口):
    <?php
    use WSDL\DocumentLiteralWrapper;
    use WSDL\WSDLCreator;
    use WSDL\XML\Styles\DocumentLiteralWrapped;
    class Api
    {
        public static function soapNotify()
        {
            $host = $_SERVER['HTTP_HOST'];
            $soapuri = "http://{$host}/Api/soapNotify";
            if (isset($_GET['wsdl'])) {
                $wsdl = new WSDLCreator('Notify', $soapuri);
                $wsdl-&gt;renderWSDL();
                exit;
            }
            $server = new SoapServer(null, [
                'uri' =&gt; $soapuri
            ]);
            $server-&gt;setClass('Notify');
            $server-&gt;handle();
        }
    }
    
  3. 实现包含接口功能逻辑的类文件,代码示例请参考(其中方法的注释相当重要,是 wsdl-creator 正确生成 WSDL 的依据,必须严格按照格式进行注释):
    <?php
    class Notify
    {
        /**
         * @desc sendText 向患者的微信发送文本信息
         * @param string $toUser 发给哪个用户
         * @param string $content 发送的内容
         * @return string $result
         */
        public function sendText($toUser, $content)
        {
            if (!$toUser || !$content) {
                return E::INVALID;
            }
            $user = G::xpdo()->row("SELECT * FROM `users` WHERE `patientid` = ?", [$toUser]);
            if (!$user) {
                return E::NODATA;
            }
            $api = G::xpdo()->row("SELECT * FROM `api` WHERE `token` = ?", [$user['token']]);
            $weixin = new Weixin($api['appid'], $api['appsecret']);
            $weixin->sendText($user['openid'], $content);
            return 0;
        }
    }
    
  4. 使用 SoapUI 软件对接口进行调试
  5. 编制相应的接口调用说明文档

参考资料:

更多

我的第一个MCP,以及开发过程中的经验感悟

起心动念 上周开发完 sheetex 后,发了条朋友圈。有小伙伴建议搞个 MCP 玩,正好我本来也想学,于是这周就花了一天完成了 sheetex-mcp-server,一个将对话中生成的表格保存成 Excel 的 MCP 服务。 做之前快速调查了一下 smithery 和 modelscope ,发现已经有好几个 Excel 相关的:实现上既有调用本机上的 Office 软件进行操作的,也有用库读写文件的;功能就更加眼花缭乱,从简单读写数据,到插入图表,甚至可以截图保存。 看来是打不过了,好在只是做个练习,开搞。 一天下来,学到不少东西,也填了好几个坑,本文以坑为主。 那么下面就按顺序来了。 新手上路 Build an MCP Server 是官方的教程,新手入门刚刚好,它通过调用天气相关的接口演示了 MCP Server 的开发过程。

By 熊立丁

12KB的Excel导出库sheetex是怎么来的

这是一个关于前端 Excel 导出库 sheetex 的故事:我为什么要做这个库,它为什么会这么小,以及你是否值得一试。 如过你问我“为什么非要在前端导出”,那将是另一个故事。 我的数据导出史 不知道你是否还记得自己是从什么时候开始接触数据导出的? 我对自己的“数据导出史”还算有些印象:在还没有正式工作的时候,如果有人问我要数据,我会在数据库管理工具里写个查询语句,然后视对方的用途,导出成SQL 语句、CSV 文件或者Excel 等;待到工作了,需要开发面向最终用户的系统,就不能再这么手工处理,导出功能成为系统标配,用户点击一个按钮,就要下载到相应的文件。 最早是 CSV 格式,因为其生成相对容易,而且也可以通过 Excel 软件进行查看,加上主要是内部用户,偶有无法打开也只要简单培训就能解决。 但随着用户类型变得广泛起来,这种“偶尔”也逐渐变成无法忍受,那么干脆直接导出 Excel 文件吧,反正开源库也已经成熟,于是使用 SheetJS

By 熊立丁
浙ICP备15043004号-1