分享Laravel是怎么操作宝塔面板API
发布时间 - 2022-12-29 00:00:00 点击率:次本文由laravel教程栏目给大家介绍laravel+宝塔面板的相关知识,主要给大家分享laravel是怎么操作宝塔面板api,下面就带大家一起来看看,希望对需要的朋友有所帮助!
Laravel 操作宝塔面板 API
不一样的地方根据自身业务修改!!!
其他的接口请查看官方文档:https://www.bt.cn/api-doc.pdf。
代码如下:
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视频教程》《宝塔使用教程》
# laravel
# 宝塔面板
# 关键词
# 绑定
# 给大家
# 文档
# 都有
# 是怎么
# 其他的
# 就行
# 来看看
# 自定义
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Internet Explorer官网直接进入 IE浏览器在线体验版网址
PythonWeb开发入门教程_Flask快速构建Web应用
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
Python文件流缓冲机制_IO性能解析【教程】
在线制作视频网站免费,都有哪些好的动漫网站?
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
高性价比服务器租赁——企业级配置与24小时运维服务
如何用5美元大硬盘VPS安全高效搭建个人网站?
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
魔毅自助建站系统:模板定制与SEO优化一键生成指南
怎样使用JSON进行数据交换_它有什么限制
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
如何为不同团队 ID 动态生成多个非值班状态按钮
如何在阿里云服务器自主搭建网站?
如何快速生成ASP一键建站模板并优化安全性?
北京企业网站设计制作公司,北京铁路集团官方网站?
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
Python自动化办公教程_ExcelWordPDF批量处理案例
Android自定义listview布局实现上拉加载下拉刷新功能
网站页面设计需要考虑到这些问题
Laravel如何自定义分页视图?(Pagination示例)
如何快速生成凡客建站的专业级图册?
利用JavaScript实现拖拽改变元素大小
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
如何制作一个表白网站视频,关于勇敢表白的小标题?
Linux网络带宽限制_tc配置实践解析【教程】
如何用免费手机建站系统零基础打造专业网站?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
如何实现建站之星域名转发设置?
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
黑客如何利用漏洞与弱口令入侵网站服务器?
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
大连 网站制作,大连天途有线官网?
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
网站图片在线制作软件,怎么在图片上做链接?
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
原生JS实现图片轮播切换效果
javascript基于原型链的继承及call和apply函数用法分析
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何在阿里云域名上完成建站全流程?
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
Java类加载基本过程详细介绍
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
Python高阶函数应用_函数作为参数说明【指导】


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;
}
}