在 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. 编制相应的接口调用说明文档

参考资料:

更多

在 Macbook 上跨平台编译 Gogs 以解决官方二进制包需要更高版本 glibc 而无法在 Anolis OS 8 上运行的问题

背景 几年前在阿里云上通过官方二进制包自托管了一套 gogs ,但是一直没有升级过。这次想一步到位升级到最新版本,却发现官方二进制包依赖更高版本的 glibc 而无法在 Anolis OS 8 上运行,最终计划通过源码编译一个二进制包来适配当前的服务器环境。 服务器环境 ##### root@AnolisOS8 ####### -------------- ##O#O## OS: Anolis OS release 8.9 x86_64 ####### Host: Alibaba Cloud ECS pc-i440fx-2.1 ########### Kernel: 4.18.0-553.40.1.0.1.an8.x86_64 ############# Uptime: 1 day, 23 hours, 40

By 熊立丁
用 Aria2 & AriaNg 搭建离线下载平台

用 Aria2 & AriaNg 搭建离线下载平台

环境 硬件:Mac Mini 2014 4C4G 操作系统:Debian 12 IP地址:192.168.2.2 流程 1. 切换到管理员权限 su root 2. 安装 aria2 apt install aria2 3. 以服务的形式运行 aria2 aria2c --enable-rpc --rpc-listen-all=true --rpc-allow-origin-all --enable-rpc 启动 rpc 服务 --rpc-listen-all=true 允许从任意 IP 访问 --rpc-allow-origin-all 允许浏览器跨域访问 4. 配置 nginx 增加站点用于放置前端界面

By 熊立丁
浙ICP备15043004号-1