鲁凯啸 发表于 2022-10-10 11:29:14

【已解决】面板api接口提示:请使用正确的入口登录面板

本帖最后由 鲁凯啸 于 2022-10-11 10:41 编辑

已申请添加开发者群471729998,请通过。
使用模板:https://www.bt.cn/api_demo_php.zip

增加函数:

运行结果:


系统及面板版本信息:

鲁凯啸 发表于 2022-10-10 11:42:14

本帖最后由 鲁凯啸 于 2022-10-10 16:10 编辑

补充:
命令



结果:日志能正常读出,转发则提示安全入口

鲁凯啸 发表于 2022-10-10 17:56:12


<?php
/**
* 宝塔API接口示例Demo
* 仅供参考,请根据实际项目需求开发,并做好安全处理
* date 2018/12/12
* author 阿良
*/
class bt_api {
        private $BT_KEY = "T******************************h";//接口密钥
        private $BT_PANEL = "http://u.************.net:8888";           //面板地址
       
        //如果希望多台面板,可以在实例化对象时,将面板地址与密钥传入
        public function __construct($bt_panel = null,$bt_key = null){
                if($bt_panel) $this->BT_PANEL = $bt_panel;
                if($bt_key) $this->BT_KEY = $bt_key;
        }
       
        //示例取面板日志       
        public function GetLogs(){
                //拼接URL地址
                $url = $this->BT_PANEL.'/data?action=getData';
               
                //准备POST数据
                $p_data = $this->GetKeyData();                //取签名
                $p_data['table'] = 'logs';
                $p_data['limit'] = 10;
                $p_data['tojs'] = 'test';
               
                //请求面板接口
                $result = $this->HttpPostCookie($url,$p_data);
               
                //解析JSON数据
                $data = json_decode($result,true);
              return $data;
        }
       
       
        /**
   * 构造带有签名的关联数组
   */
        private function GetKeyData(){
                $now_time = time();
            $p_data = array(
                        'request_token'        =>        md5($now_time.''.md5($this->BT_KEY)),
                        'request_time'        =>        $now_time,
                        //'panel_address'=>"lwsd.why.showcai.net",
            //'panel_port'=>8888,
                );
            return $p_data;   
    }
       

        /**
   * 发起POST请求
   * @param String $url 目标网填,带http://
   * @param Array|String $data 欲提交的数据
   * @return string
   */
    private function HttpPostCookie($url, $data,$timeout = 60)
    {
            //定义cookie保存位置
      $cookie_file='./'.md5($this->BT_PANEL).'.cookie';
      if(!file_exists($cookie_file)){
            $fp = fopen($cookie_file,'w+');
            fclose($fp);
      }
               
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
      curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
      curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_HEADER, 0);
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
      $output = curl_exec($ch);
      curl_close($ch);
      return $output;
    }
   
   
   
   
        // 安全 - 系统防火墙 - 端口转发       
        public function forward($ip="",$type=0,$id=1){
                //拼接URL地址
                $url= "";
                $p_data = $this->GetKeyData();                //取签名
                if($ip==""){//没有ip便取列表
                  $url= $this->BT_PANEL."/safe/firewall/get_forward_list";
                  $p_data['p'] = '1';
                }else{//有ip便添加或修改
                  $url = $this->BT_PANEL.'/safe/firewall/'.( $type? "create_forward":"modify_forward" );
                  if($type!=1)                $p_data['id'] = $id;
                    $p_data['protocol'] = "tcp/udp";
                    $p_data['s_ports'] = '4431';
                    $p_data['d_address'] = $ip;
                    $p_data['d_ports'] = '80';
                }
               
               
                //请求面板接口
                $result = $this->HttpPostCookie($url,$p_data);
echo "\r\n";
                var_dump($url);
echo "\r\n";
                var_dump($p_data);
echo "\r\n";
                var_dump($result);
echo "\r\n";
                //解析JSON数据
                $data = json_decode($result,true);
              return $data;
        }
       
}



//实例化对象
$api = new bt_api();
echo "<pre>\r\n";
//获取面板日志
//$r_data = $api->GetLogs();
//输出JSON数据到浏览器
//var_dump ($r_data);

$r_data = $api->forward();//有返回结果,说明接口白名单及其他参数没问题。
var_dump ($r_data) ;
echo "\r\n\r\n";
$r_data = $api->forward("127.0.0.2",0,4);//无返回结果且无更改,说明该接口有问题。安全 - 系统防火墙 - 端口转发        【ip,增/改,要改的序号】
var_dump($r_data);

echo "\r\n\r\n</pre>";
?>


attach://126243.zip

鲁凯啸 发表于 2022-10-10 21:01:10

本帖最后由 鲁凯啸 于 2022-10-11 10:37 编辑

经过指导,已解决,是我自己的参数构造不正确导致的。post的参数我没有用data包裹,改造上述代码87-121行部分即可。
   // 安全 - 系统防火墙 - 端口转发       
        public function forward($ip="",$type=0,$id=1){
                //拼接URL地址
                $url= "";
                $p_data = $this->GetKeyData();                //取签名
                if($ip==""){//没有ip便取列表
                  $url= $this->BT_PANEL."/safe/firewall/get_forward_list";
                  //$p_data['p'] = '1';
                }else{//有ip便添加或修改
                  $url = $this->BT_PANEL.'/safe/firewall/'.( $type? "create_forward":"modify_forward" );
                  $d_data=[];
                  if($type!=1)                $d_data['id'] = $id;
                    $d_data['protocol'] = "tcp/udp";
                    $d_data['s_ports'] = "4431";
                    $d_data['d_address'] = $ip;
                    $d_data['d_ports'] = "80";
                    $p_data['data']=json_encode($d_data);
                }
               
               
                //请求面板接口
                $result = $this->HttpPostCookie($url,$p_data);
echo "\r\n";
                var_dump($url);
echo "\r\n";
                var_dump($p_data);
echo "\r\n";
                var_dump($result);
echo "\r\n";
                //解析JSON数据
                $data = json_decode($result,true);
              return $data;
        }
       
}

wr1688 发表于 2023-1-14 15:05:58

宝塔给的demo并没有说把data包裹
页: [1]
查看完整版本: 【已解决】面板api接口提示:请使用正确的入口登录面板