站长资讯网
最全最丰富的资讯网站

分享Laravel是怎么操作宝塔面板API

本文由Laravel教程栏目给大家介绍laravel+宝塔面板的相关知识,主要给大家分享Laravel是怎么操作宝塔面板API,下面就带大家一起来看看,希望对需要的朋友有所帮助!

分享Laravel是怎么操作宝塔面板API

Laravel 操作宝塔面板 API

不一样的地方根据自身业务修改!!!

其他的接口请查看官方文档:https://www.bt.cn/api-doc.pdf。

代码如下:

<?php namespace AppHttpControllersCustom; use AppHttpControllersController; use IlluminateSupportFacadesHttp; /**  * 除了 AddSite GetSSL GetFileBody 外  其他都有返回 "msg"  * 返回状态 "status" => true/false  "msg" => "申请成功!"  * 官方API文档  https://www.bt.cn/api-doc.pdf  */ class BtPanel extends Controller {     /**      * 发送请求      * @param string $path /data?action=getData&table=sites 请求路径      * @param array $query 请求参数      */     private function sendRequest(string $path, array $query)     {         // 宝塔面板秘钥         $secretKey = config('custom.bt.key');         // 宝塔面板地址 http://xxx.xxx.xxx:2222 填写至端口即可         $panelPath = config('custom.bt.panel_path');         $time = time();         $response = Http::withOptions(['verify' => false])             ->retry(2, 5000) // !!!这里时间不适用于 GetApplyCert 接口             ->attach('cookie', $secretKey, 'bt.cookie') // 随便传东西就行             ->post($panelPath . $path, array_merge([                 'request_token' => md5($time . '' . md5($secretKey)),                 'request_time' => $time             ], $query))             ->json();         return $response ?: false;     }     /**      * 查询网站      * @param string|null $search 需要搜索的关键词      * @return array|false      */     public function SiteSearch(string $search = null)     {         $search = $search ?: config('custom.bt.domain');         $response = $this->sendRequest('/data?action=getData&table=sites', [             'limit' => 5,             'search' => $search         ]);         // 获取失败         if (!isset($response['data'])) return false;         // 不允许出现相似的网站名         if (count($response['data']) != 1) return false;         $site = $response['data'][0];         return [             'id' => $site['id'],             'name' => $site['name'],             'path' => $site['path'],             'ps' => $site['ps'],             'php' => str_replace('.', '', $site['php_version'])         ];     }     /**      * 创建网站      * !!!PS: 使用API创建网站时  最好 不要创建相似网站名的网站  不然查询时有些麻烦      * @param string $domain 网站域名      * @param [type] json webname        网站域名      * @param [type] string path         网站路径 /www/wwwroot/www.baidu.com      * @param [type] integer type_id     网站分类ID      * @param [type] string type         网站类型 PHP/JAVA      * @param [type] string version      PHP版本 73/74      * @param [type] string port         网站端口      * @param [type] string ps           网站备注      * @param [type] bool ftp            是否创建FTP      * @param [type] string ftp_username  FTP用户名 // ftp为true必传      * @param [type] string ftp_password  FTP密码  // ftp为true必传      * @param [type] bool sql            是否创建数据库      * @param [type] string codeing      数据库编码类型 utf8|utf8mb4|gbk|big5  // sql为true必传      * @param [type] string datauser     数据库账号 // sql为true必传      * @param [type] string datapassword 数据库密码 // sql为true必传      * @return false|int      */     public function AddSite(string $domain)     {         $data = [             'webname' => json_encode([                 'domain' => $domain,                 'domainlist' => [],                 'count' => 0             ]),             'path' => config('custom.bt.site_path'),             'type_id' => '0',             'type' => 'PHP',             'version' => '74',             'port' => '80',             'ps' => $domain,             'ftp' => 'false',             'sql' => 'false'         ];         $response = $this->sendRequest('/site?action=AddSite', $data);         return (isset($response['siteStatus']) && $response['siteStatus'] === true) ? (int)$response['siteId'] : false;     }     /**      * 删除网站      * @param string $siteName 网站名称 一般是网站域名      * @return bool      */     public function DeleteSite(string $siteName): bool     {         $site = $this->SiteSearch($siteName);         $response = $this->sendRequest('/site?action=DeleteSite', [             'id' => $site['id'],             'webname' => $site['name']         ]);         return isset($response['status']) && $response['status'] === true;     }     /**      * 开启网站      * @param string $siteName 网站名称 一般是网站域名      * @return bool      */     public function SiteStart(string $siteName): bool     {         $site = $this->SiteSearch($siteName);         $response = $this->sendRequest('/site?action=SiteStart', [             'id' => $site['id'],             'name' => $site['name']         ]);         return isset($response['status']) && $response['status'] === true;     }     /**      * 关闭网站      * @param string $siteName 网站名称 一般是网站域名      * @return bool      */     public function SiteStop(string $siteName): bool     {         $site = $this->SiteSearch($siteName);         $response = $this->sendRequest('/site?action=SiteStop', [             'id' => $site['id'],             'name' => $site['name']         ]);         return isset($response['status']) && $response['status'] === true;     }     /**      * 为网站绑定域名      * @param string $siteName 网站名称 一般是网站域名      * @param string $domain 需要绑定的域名      * @return bool      */     public function AddDomain(string $siteName, string $domain)     {         $site = $this->SiteSearch($siteName);         $response = $this->sendRequest('/site?action=AddDomain', [             'id' => $site['id'],             'webname' => $site['name'],             'domain' => $domain         ]);         // 绑定成功 status === true         // 绑定失败 和 指定域名已绑定过  都返回 status === false         // 不好区分 失败 还是 域名已绑定         return isset($response['status']);     }     /**      * 删除网站绑定的域名      * @param string $siteName 网站名称 一般是网站域名      * @param string $domain 需要删除的域名      * @return bool      */     public function DelDomain(string $siteName, string $domain)     {         $site = $this->SiteSearch($siteName);         $response = $this->sendRequest('/site?action=DelDomain', [             'id' => $site['id'],             'webname' => $site['name'],             'port' => '80',             'domain' => $domain         ]);         return isset($response['status']) && $response['status'] === true;     }     /**      * 网站设置SSL证书      * @param string $domain 站点域名      * @param string $key      * @param string $csr      * @return bool      */     public function SetSSL(string $domain, string $key, string $csr): bool     {         $data = [             'type' => 1,             'siteName' => $domain,             'key' => '',             'csr' => ''         ];         $response = $this->sendRequest('/site?action=SetSSL', $data);         return isset($response['status']) && $response['status'] === true;     }     /**      * 获取SSL状态及证书详情      * @param string $domain 站点域名      * @return string|false 成功则返回证书到期时间      */     public function GetSSL(string $domain)     {         $data = [             'siteName' => $domain         ];         $response = $this->sendRequest('/site?action=GetSSL', $data);         return (isset($response['status']) && $response['status'] === true && $response['cert_data']) ? $response['cert_data']['notAfter'] : false;     }     /**      * 设置网站运行目录      * @param int $siteId 站点域名      * @param string $runPath 运行目录路径      * @return bool      */     public function SetSiteRunPath(int $siteId, string $runPath = '/public'): bool     {         $data = [             'id' => $siteId,             'runPath' => $runPath         ];         $response = $this->sendRequest('/site?action=SetSiteRunPath', $data);         return isset($response['status']) && $response['status'] === true;     }     /**      * 获取网站预置伪静态规则内容(文件内容)      * @param string $domain 网站域名      * @param [type] $type 0->获取内置伪静态规则 /www/server/panel/rewrite/nginx/xxxxx.conf;1->获取当前站点伪静态规则 /www/server/panel/vhost/rewrite/www.baidu.com.conf      * @return string|false 成功则返回伪静态规则内容      */     public function GetFileBody(string $domain)     {         $data = [             'path' => "/www/server/panel/vhost/rewrite/$domain.conf"         ];         $response = $this->sendRequest('/files?action=GetFileBody', $data);         return (isset($response['status']) && $response['status'] === true) ? $response['data'] : false;     }     /**      * 保存网站伪静态规则内容(保存文件内容)      * 0->系统默认路径;1->自定义全路径      * @param string $domain      * @param string|null $htaccess      * @return bool      */     public function SaveFileBody(string $domain, string $htaccess = null): bool     {         $htaccess = $htaccess ?: config('custom.bt.htaccess');         $data = [             'path' => "/www/server/panel/vhost/rewrite/$domain.conf", // 伪静态文件路径             'data' => $htaccess, // 伪静态规则内容 ==> 字符串             'encoding' => 'utf-8'         ];         $response = $this->sendRequest('/files?action=SaveFileBody', $data);         return isset($response['status']) && $response['status'] === true;     }     /**      * 网站申请并设置SSL证书      * !!!PS:当前请求比较耗时间 20s-60s不等  最好单独使用      * @param int $id 站点ID      * @param string $domain 需要申请的域名      * @return bool|integer      */     public function GetApplyCert(int $id, string $domain)     {         $data = [             "domains" => json_encode([$domain]),             "auth_type" => "http",             "auto_wildcard" => 0,             "auth_to" => $id,             "id" => $id,             "siteName" => $domain         ];         $response = $this->sendRequest('/acme?action=apply_cert_api', $data); //        $response = [ //            'cert' => '', //            'root' => '', //            'private_key' => '', //            'cert_timeout' => 1679184499, //            'status' => true //        ];         if (isset($response['status']) && $response['status'] === true) {             Storage::put("ssl/$domain.txt", json_encode($response));             $res = $this->SetSSL($domain, $response['private_key'], $response['cert'] . $response['root']);             return $res ? $response['cert_timeout'] : false;         }         return false;     } }
登录后复制

推荐学习:《laravel视频教程》《宝塔使用教程》

赞(0)
分享到: 更多 (0)