亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

本文由Laravel教程欄目給大家介紹laravel+寶塔面板的相關(guān)知識(shí),主要給大家分享Laravel是怎么操作寶塔面板API,下面就帶大家一起來(lái)看看,希望對(duì)需要的朋友有所幫助!


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


Laravel 操作寶塔面板 API

不一樣的地方根據(jù)自身業(yè)務(wù)修改!!!

其他的接口請(qǐng)查看官方文檔:https://www.bt.cn/api-doc.pdf。

代碼如下:

<?php
namespace App\Http\Controllers\Custom;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Http;
/**
 * 除了 AddSite GetSSL GetFileBody 外  其他都有返回 "msg"
 * 返回狀態(tài) "status" => true/false  "msg" => "申請(qǐng)成功!"
 * 官方API文檔  https://www.bt.cn/api-doc.pdf
 */
class BtPanel extends Controller
{
    /**
     * 發(fā)送請(qǐng)求
     * @param string $path /data?action=getData&table=sites 請(qǐng)求路徑
     * @param array $query 請(qǐng)求參數(shù)
     */
    private function sendRequest(string $path, array $query)
    {
        // 寶塔面板秘鑰
        $secretKey = config('custom.bt.key');
        // 寶塔面板地址 http://xxx.xxx.xxx:2222 填寫(xiě)至端口即可
        $panelPath = config('custom.bt.panel_path');
        $time = time();
        $response = Http::withOptions(['verify' => false])
            ->retry(2, 5000) // !!!這里時(shí)間不適用于 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;
    }
    /**
     * 查詢網(wǎng)站
     * @param string|null $search 需要搜索的關(guān)鍵詞
     * @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;
        // 不允許出現(xiàn)相似的網(wǎng)站名
        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'])
        ];
    }
    /**
     * 創(chuàng)建網(wǎng)站
     * !?。S: 使用API創(chuàng)建網(wǎng)站時(shí)  最好 不要?jiǎng)?chuàng)建相似網(wǎng)站名的網(wǎng)站  不然查詢時(shí)有些麻煩
     * @param string $domain 網(wǎng)站域名
     * @param [type] json webname        網(wǎng)站域名
     * @param [type] string path         網(wǎng)站路徑 /www/wwwroot/www.baidu.com
     * @param [type] integer type_id     網(wǎng)站分類(lèi)ID
     * @param [type] string type         網(wǎng)站類(lèi)型 PHP/JAVA
     * @param [type] string version      PHP版本 73/74
     * @param [type] string port         網(wǎng)站端口
     * @param [type] string ps           網(wǎng)站備注
     * @param [type] bool ftp            是否創(chuàng)建FTP
     * @param [type] string ftp_username  FTP用戶名 // ftp為true必傳
     * @param [type] string ftp_password  FTP密碼  // ftp為true必傳
     * @param [type] bool sql            是否創(chuàng)建數(shù)據(jù)庫(kù)
     * @param [type] string codeing      數(shù)據(jù)庫(kù)編碼類(lèi)型 utf8|utf8mb4|gbk|big5  // sql為true必傳
     * @param [type] string datauser     數(shù)據(jù)庫(kù)賬號(hào) // sql為true必傳
     * @param [type] string datapassword 數(shù)據(jù)庫(kù)密碼 // 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;
    }
    /**
     * 刪除網(wǎng)站
     * @param string $siteName 網(wǎng)站名稱 一般是網(wǎng)站域名
     * @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;
    }
    /**
     * 開(kāi)啟網(wǎng)站
     * @param string $siteName 網(wǎng)站名稱 一般是網(wǎng)站域名
     * @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;
    }
    /**
     * 關(guān)閉網(wǎng)站
     * @param string $siteName 網(wǎng)站名稱 一般是網(wǎng)站域名
     * @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;
    }
    /**
     * 為網(wǎng)站綁定域名
     * @param string $siteName 網(wǎng)站名稱 一般是網(wǎng)站域名
     * @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
        // 綁定失敗 和 指定域名已綁定過(guò)  都返回 status === false
        // 不好區(qū)分 失敗 還是 域名已綁定
        return isset($response['status']);
    }
    /**
     * 刪除網(wǎng)站綁定的域名
     * @param string $siteName 網(wǎng)站名稱 一般是網(wǎng)站域名
     * @param string $domain 需要?jiǎng)h除的域名
     * @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;
    }
    /**
     * 網(wǎng)站設(shè)置SSL證書(shū)
     * @param string $domain 站點(diǎn)域名
     * @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狀態(tài)及證書(shū)詳情
     * @param string $domain 站點(diǎn)域名
     * @return string|false 成功則返回證書(shū)到期時(shí)間
     */
    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;
    }
    /**
     * 設(shè)置網(wǎng)站運(yùn)行目錄
     * @param int $siteId 站點(diǎn)域名
     * @param string $runPath 運(yùn)行目錄路徑
     * @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;
    }
    /**
     * 獲取網(wǎng)站預(yù)置偽靜態(tài)規(guī)則內(nèi)容(文件內(nèi)容)
     * @param string $domain 網(wǎng)站域名
     * @param [type] $type 0->獲取內(nèi)置偽靜態(tài)規(guī)則 /www/server/panel/rewrite/nginx/xxxxx.conf;1->獲取當(dāng)前站點(diǎn)偽靜態(tài)規(guī)則 /www/server/panel/vhost/rewrite/www.baidu.com.conf
     * @return string|false 成功則返回偽靜態(tài)規(guī)則內(nèi)容
     */
    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;
    }
    /**
     * 保存網(wǎng)站偽靜態(tài)規(guī)則內(nèi)容(保存文件內(nèi)容)
     * 0->系統(tǒng)默認(rèn)路徑;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", // 偽靜態(tài)文件路徑
            'data' => $htaccess, // 偽靜態(tài)規(guī)則內(nèi)容 ==> 字符串
            'encoding' => 'utf-8'
        ];
        $response = $this->sendRequest('/files?action=SaveFileBody', $data);
        return isset($response['status']) && $response['status'] === true;
    }
    /**
     * 網(wǎng)站申請(qǐng)并設(shè)置SSL證書(shū)
     * ?。。S:當(dāng)前請(qǐng)求比較耗時(shí)間 20s-60s不等  最好單獨(dú)使用
     * @param int $id 站點(diǎn)ID
     * @param string $domain 需要申請(qǐng)的域名
     * @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;
    }
}


分享到:
標(biāo)簽:Laravel 寶塔面板API
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定