2017-01-18 4 views
0

Good evening SO Community,PHP/Cpanel - Как создать учетные записи cPanel без стороннего приложения?

Я пытался выяснить, как динамически создавать учетную запись cPanel с помощью PHP. Проводя предварительные исследования, я заметил, что этот вопрос задавался довольно много раз, и у меня было несколько ответов. К сожалению, ответы, которые я нашел, по-видимому, были обесценены в последних версиях cpanel. Я пытался заставить работать ниже сценарий, но не повезло. ПРИМЕЧАНИЕ: Я НЕ СОЗДАЛ СЦЕНАРИЙ, Я ТОЛЬКО ЗАПРЕЩАЮТ ИСТОЧНИК. Если вы знаете какой-либо способ создания учетных записей cPanel с пакетами хостинга, ПОЖАЛУЙСТА, дайте мне знать!

<?php 

############################################################### 
# cPanel WHM Account Creator 1.1 
############################################################### 
# Visit http://www.zubrag.com/scripts/ for updates 
############################################################### 
# Required parameters: 
# - domain - new account domain 
# - user - new account username 
# - password - new account password 
# - package - new account hosting package (plan) 
# - email - contact email 
# 
# Sample run: create-whm-account.php?domain=reseller.com&user=hosting&password=manager&package=unix_500 
# 
# If no parameters passed then input form will be shown to enter data. 
# 
# This script can also be run from another PHP script. This may 
# be helpful if you have some user interface already in place and 
# want to automatically create WHM accounts from there. 
# In this case you have to setup following variables instead of 
# passing them as parameters: 
# - $user_domain - new account domain 
# - $user_name - new account username 
# - $user_pass - new account password 
# - $user_plan - new account hosting package (plan) 
# - $user_email - contact email 
# 
############################################################### 

/////// YOUR WHM LOGIN DATA 
$whm_user = "root";  // reseller username 
$whm_pass = "PASS"; // the password you use to login to WHM 

##################################################################################### 
##############   END OF SETTINGS. DO NOT EDIT BELOW ####################### 
##################################################################################### 

$whm_host = $_SERVER['HTTP_HOST']; 

function getVar($name, $def = '') { 
    if (isset($_REQUEST[$name])) 
    return $_REQUEST[$name]; 
    else 
    return $def; 
} 

// Domain name of new hosting account 
// To create subdomain just pass full subdomain name 
// Example: newuser.zubrag.com 
if (!isset($user_domain)) { 
    $user_domain = getVar('domain'); 
} 

// Username of the new hosting account 
if (!isset($user_name)) { 
    $user_name = getVar('user'); 
} 

// Password for the new hosting account 
if (!isset($user_pass)) { 
    $user_pass = getVar('password'); 
} 

// New hosting account Package 
if (!isset($user_plan)) { 
    $user_plan = getVar('package'); 
} 

// Contact email 
if (!isset($user_email)) { 
    $user_email = getVar('email'); 
} 

// if parameters passed then create account 
if (!empty($user_name)) { 

    // create account on the cPanel server 
    $script = "http://{$whm_user}:{$whm_pass}@{$whm_host}:2086/scripts/wwwacct"; 
    $params = "?plan={$user_plan}&domain={$user_domain}&username={$user_name}&password={$user_pass}&contactemail={$user_email}"; 
    $result = file_get_contents($script.$params); 

    // output result 
    echo "RESULT: " . $result; 
} 
// otherwise show input form 
else { 
$frm = <<<EOD 
<html> 
<head> 
    <title>cPanel/WHM Account Creator</title> 
    <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> 
    <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 
</head> 
<body> 
    <style> 
    input { border: 1px solid black; } 
    </style> 
<form method="post"> 
<h3>cPanel/WHM Account Creator</h3> 
<table border="0"> 
<tr><td>Domain:</td><td><input name="domain" size="30"></td><td>Subdomain or domain, without www</td></tr> 
<tr><td>Username:</td><td><input name="user" size="30"></td><td>Username to be created</td></tr> 
<tr><td>Password:</td><td><input name="password" size="30"></td><td></td></tr> 
<tr><td>Package:</td><td><input name="package" size="30"></td><td>Package (hosting plan) name. Make sure you cpecify existing package</td></tr> 
<tr><td>Contact Email:</td><td><input name="email" size="30"></td><td></td></tr> 
<tr><td colspan="3"><br /><input type="submit" value="Create Account"></td></tr> 
</table> 
</form> 
</body> 
</html> 
EOD; 
echo $frm; 
} 

?> 

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация!

Спасибо заранее, Тим

Eidt Я недавно обнаружил источник проблемы. cPanel/WHM теперь применяет маркеры безопасности. Таким образом, использование вышеприведенного скрипта будет работать, если оно сможет войти. Я попытался использовать php для эха URL-адреса, который вызывается, затем я скопировал и вставил его в браузер. Затем он заставил меня войти в систему. Как только я это сделал, он выполнен отлично. Однако ... Я все еще не могу выполнить его через PHP.

Любые идеи?

+1

Источник был: https://github.com/Ephygtz/cPanel-WHM-automated-account-creator/blob/master/create-whm-account.php –

+0

Благодарим Вас за предоставление источник! –

+0

Извините за вопрос, но вы нашли какой-либо метод, который работает с более поздними версиями cPanel (68.0)? –

ответ

0

Добрый день,

Я знаю, что этот вопрос является немного устаревшей, но я нашел решение, которое работает для меня. См. Ниже.

<?php 
    Function createAccount ($newDomain = "", $newUser = "", $newPass = "", $newPlan = "", $newEmail = "") { 
     $whm_user = "usename"; 
     $whm_pass = "password"; 
     $whm_host = "example.com"; 

     $newDomain = fixData($newDomain); 
     $newUser = fixData($newUser); 
     $newPlan = fixData($newPlan); 

     If (!empty($newUser)) { 
      // Get new session ID 
      $sessID = newSession($whm_host, $whm_user, $whm_pass); 

      $script = "https://www." . $whm_host . ":2087" . $sessID . "/scripts/wwwacct"; 
      $sData = "?plan={$newPlan}&domain={$newDomain}&username={$newUser}&password={$newPass}&contactemail={$newEmail}"; 

      // Authenticate User for WHM access 
      $context = stream_context_create(array(
       'http' => array(
        'header' => "Authorization: Basic " . base64_encode("{$whm_user}:{$whm_pass}"), 
       ), 
      )); 

      // Get result 
      $result = file_get_contents($script.$sData, false, $context); 
      //Echo "URL: " . $script.$sData . "<br /><br />"; 
      // Echo "Result: " . $result; 

     } Else { 
      Echo "Error: Username is empty!"; 
     } 
    } 


    Function newSession($nHost, $nUser, $nPass) { // Example details 
     $ip = $nHost; 
     $cp_user = $nUser; 
     $cp_pwd = $nPass; 
     $url = "https://$ip:2087/login"; 

     // Create new curl handle 
     $ch=curl_init(); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
     curl_setopt($ch, CURLOPT_HEADER, 0); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, "user=$cp_user&pass=$cp_pwd"); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 100020); 

     // Execute the curl handle and fetch info then close streams. 
     $f = curl_exec($ch); 
     $h = curl_getinfo($ch); 
     curl_close($ch); 

     // If we had no issues then try to fetch the cpsess 
     if ($f == true and strpos($h['url'],"cpsess")) 
     { 
      // Get the cpsess part of the url 
      $pattern="/.*?(\/cpsess.*?)\/.*?/is"; 
      $preg_res=preg_match($pattern,$h['url'],$cpsess); 
     } 

     // If we have a session then return it otherwise return empty string 
     return (isset($cpsess[1])) ? $cpsess[1] : ""; 
    } 

    Function fixData($data) { 
     $data = str_replace("-","%2D",$data); 
     $data = str_replace(".","%2E",$data); 
     $data = str_replace(" ","%20",$data); 

     return $data; 
    } 

    Function returnData($data) { 
     $data = str_replace("%2D","-",$data); 
     $data = str_replace("%2E",".",$data); 
     $data = str_replace("%20"," ",$data); 

     return $data; 
    } 
    header('Location: https://www.example.com/users'); 
?> 
+0

Этот метод, к сожалению, больше не работает. –