"",
"apiPassword" => "",
"apiUrl" => "https://panel.myownfreehost.net:2087/xml-api/",
"plan" => [],
);
public function __construct()
{
$this->initialize();
}
/**
* Initialize with config
*
* @param array $parameters
* @return $this
*/
public function initialize(array $parameters = [])
{
$this->parameters = $parameters;
// set default parameters
foreach (array_replace($this->config, $parameters) as $key => $value) {
$this->setParameter($key, $value);
}
return $this;
}
/**
* Create a new api
*
* @param array $parameters
* @return Api
*/
public static function init(array $parameters = [])
{
$api = new self();
$api->initialize($parameters);
return $api;
}
/**
* Get a single parameter.
*
* @param string $key The parameter key
* @return mixed
*/
protected function getParameter($key)
{
if (isset($this->parameters[$key])) {
return $this->parameters[$key];
} else {
return null;
}
}
/**
* Set a single parameter
*
* @param string $key The parameter key
* @param mixed $value The value to set
* @return $this
* @throws RuntimeException if a request parameter is modified after the request has been sent.
*/
protected function setParameter($key, $value)
{
$this->parameters[$key] = $value;
return $this;
}
public function setApiUsername($value)
{
return $this->setParameter("apiUsername", $value);
}
public function getApiUsername()
{
return $this->getParameter("apiUsername");
}
public function setApiPassword($value)
{
return $this->setParameter("apiPassword", $value);
}
public function getApiPassword()
{
return $this->getParameter("apiPassword");
}
public function setPlan($value)
{
return $this->setParameter("plan", $value);
}
public function getPlan()
{
return $this->getParameter("plan");
}
public function setApiUrl($value)
{
return $this->setParameter("apiUrl", $value);
}
public function getApiUrl()
{
return $this->getParameter("apiUrl");
}
public function getDomain()
{
return $this->getParameter("domain");
}
public function setDomain($value)
{
return $this->setParameter("domain", $value);
}
public function getPassword()
{
return $this->getParameter("password");
}
public function setPassword($value)
{
return $this->setParameter("password", $value);
}
public function getUserName()
{
return $this->getParameter("username");
}
public function setUserName($value)
{
return $this->setParameter("username", $value);
}
public function getEmail()
{
return $this->getParameter("email");
}
public function setEmail($value)
{
return $this->setParameter("email", $value);
}
public function getReason()
{
return $this->getParameter('reason');
}
public function setReason($value)
{
return $this->setParameter('reason', $value);
}
public function httpAuthGet($url, $param = [])
{
if (!is_array($param)) {
throw new Exception("parameters must is a array");
}
$authstr = "WHM " . $this->getApiUsername() . ":" . $this->getApiPassword();
$curlheaders = [
"Authorization: " . $authstr,
"cache-control: no-cache"
];
$p = "";
foreach ($param as $key => $value) {
$p = $p . $key . "=" . $value . "&";
}
if (preg_match('/\?[\d\D]+/', $url)) { //matched ?c
$p = "&" . $p;
} else if (preg_match('/\?$/', $url)) { //matched ?$
$p = $p;
} else {
$p = "?" . $p;
}
$p = preg_replace('/&$/', "", $p);
$url = $url . $p;
echo $url;
$http = curl_init($url);
curl_setopt($http, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($http, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($http, CURLOPT_RETURNTRANSFER, 1);
// curl_setopt($http, CURLOPT_HEADER, 1);
curl_setopt($http, CURLOPT_HTTPHEADER, $curlheaders);
$res = curl_exec($http);
$this->response = $res;
$this->parseResponse();
curl_close($http);
}
/*
* http get method
*/
public function httpGet($url, $param = [])
{
if (!is_array($param)) {
throw new Exception("parameters must is a array");
}
$authstr = "WHM " . $this->getApiUsername() . ":" . $this->getApiPassword();
$curlheaders = [
"Authorization: " . $authstr,
"cache-control: no-cache"
];
$p = "";
foreach ($param as $key => $value) {
$p = $p . $key . "=" . $value . "&";
}
if (preg_match('/\?[\d\D]+/', $url)) { //matched ?c
$p = "&" . $p;
} else if (preg_match('/\?$/', $url)) { //matched ?$
$p = $p;
} else {
$p = "?" . $p;
}
$p = preg_replace('/&$/', "", $p);
$url = $url . $p;
//echo $url;
$http = curl_init($url);
curl_setopt($http, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($http, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($http, CURLOPT_RETURNTRANSFER, 1);
// curl_setopt($http, CURLOPT_HEADER, 1);
curl_setopt($http, CURLOPT_HTTPHEADER, $curlheaders);
$res = curl_exec($http);
curl_close($http);
// return explode("\r\n\r\n", $res, 2)[1];
return $res;
}
protected function parseResponse()
{
$data = (string)$this->response;
if (strpos(trim($data), '<') !== 0) {
$this->data = null;
} else {
$this->data = $this->xmlToArray((array)simplexml_load_string($data));
}
}
/**
* Recursively convert a SimpleXMLElement array to regular arrays
*
* @param array $input
* @return array
*/
protected function xmlToArray($input)
{
foreach ($input as $key => $value) {
if ($value instanceof \SimpleXMLElement) {
$value = (array)$value;
}
if (is_array($value)) {
$input[$key] = $this->xmlToArray($value);
}
}
return $input;
}
/**
* Get the response data.
*
* @return array|null
*/
public function getData()
{
return $this->data;
}
/**
* Whether the action was successful
* 成功信息
*
* @return bool
*/
public function isSuccessful()
{
if ($this->getData() && isset($this->getData()['result']['status'])) {
return $this->getData()['result']['status'] == 1;
} else {
return false;
}
}
/**
* Create a new account
*
* Parameters:
* - username: A custom account username, max. 8 characters of letters and numbers
* - password: The FTP/control panel/database password for the account
* - email: The contact e-mail address of the owner
* - domain: The primary domain name of the account
* - plan: The hosting plan to create the acccount on
*
* @param array $parameters
* @return string
*/
public function createAccount(array $parameters = [])
{
$this->initialize(array_replace($this->parameters, $parameters));
$data = [
"username" => $this->getUsername(),
"password" => $this->getPassword(),
"contactemail" => $this->getEmail(),
"domain" => $this->getDomain(),
"plan_name" => $this->getPlan(),
];
// The email address is a required field.
// The username is invalid (Only letters and numbers 8 characters maximum 12)
// The username is invalid (Only letters and numbers).
// The username is invalid (8 characters maximum 18 (uiisc_test_whm_api))
// print_r($data);
$this->httpAuthGet($this->getApiUrl() . "createacct", $data);
$msg = "Sorry, an error has occurred. Please try again in a few minutes.";
if ((int)$this->isSuccessful() == 0) {
if (is_array($this->data) && isset($this->data['result']['statusmsg'])) {
print_r("-2");
if (strlen((string)trim($this->data['result']['statusmsg'])) > 0) {
$msg = trim($this->data['result']['statusmsg']);
}
} elseif ((int)trim($this->response) > 0) {
print_r("-3-");
$msg = (string)trim($this->response);
} else {
print_r("-000-");
}
$this->message = [0, $msg];
} elseif ((int)$this->isSuccessful() == 1) {
if (is_array($this->data) && isset($this->data['result']['statusmsg']) && strlen((string)trim($this->data['result']['statusmsg'])) > 0) {
$this->message = [
1, "The account " . $data["username"] . " has been created successfully. Keep the account info in a safe place.",
[
"account" => $data["username"],
"panel_username" => isset($this->data['result']['options']['vpusername']) ? $this->data['result']['options']['vpusername'] : null,
"password" => $data["password"],
"domain" => $data["domain"],
"email" => $data["contactemail"],
"plan " => $data["plan_name"],
"panel_url" => "http://cpanel.uiisc.com",
"note" => "Remember to wait 5 minutes for your account to be completely created on the server"
]
];
} else {
$this->message = [1, "The account " . $data["username"] . " has been created successfully"];
}
} else {
$this->message = [0, $msg];
}
}
/**
* Suspend account
*
* Parameters:
* - username: The custom username or userid
* - reason: The reason why the account was suspended
*
* @param array $parameters
* @return array
*/
public function suspend(array $parameters = [])
{
$this->initialize(array_replace($this->parameters, $parameters));
$data = ["user" => $this->getUsername(), "reason" => $this->getReason()];
// $this->response =
$this->httpAuthGet($this->getApiUrl() . "suspendacct", $data);
// $this->parseResponse();
print_r("\n----response----\n");
print_r($this->response);
print_r("\n----data----\n");
print_r($this->data);
$msg = "Sorry an error has occurred please try again in a few minutes.";
if ((int)$this->isSuccessful() == 0) {
if (is_array($this->data) && isset($this->data['result']['statusmsg'])) {
$msg = trim((string)$this->data['result']['statusmsg']);
if (preg_match('/account is NOT currently suspended \(status : (\w*) \)/', $msg, $matches)) {
if (trim($matches[1]) == '') {
$msg = "The account " . $data["user"] . " is NOT currently suspended";
} else {
$msg = "The account " . $data["user"] . " is " . trim($matches[1]);
}
}
} elseif (strlen((string)$this->response) > 0) {
$msg = trim((string)$this->response);
}
$this->message = [0, $msg];
} elseif ((int)$this->isSuccessful() == 1) {
if (is_array($this->data) && isset($this->data['result']['statusmsg'])) {
$msg = "The account " . $data["user"] . " has been suspended successfully.
- Remember that in 30 days the account will be completely removed from the server.";
} elseif (strlen((string)$this->response) > 0) {
$msg = trim((string)$this->response);
}
$this->message = [1, $msg];
} else {
$this->message = [1, $msg];
}
}
/**
* Unsuspend account
*
* Parameters:
* - username: The custom username or userid
*
* @param array $parameters
* @return array
*/
public function unsuspend(array $parameters = [])
{
$this->initialize(array_replace($this->parameters, $parameters));
$data = ["user" => $this->getUsername()];
$this->httpAuthGet($this->getApiUrl() . "unsuspendacct", $data);
// print_r("\n----response----\n");
// print_r($this->response);
// print_r("\n----data----\n");
// print_r($this->data);
$msg = "Sorry an error has occurred please try again in a few minutes.";
if ((int)$this->isSuccessful() == 0) {
if (is_array($this->data) && isset($this->data['result']['statusmsg'])) {
$msg = trim((string)$this->data['result']['statusmsg']);
if (preg_match('/account is NOT currently suspended \(status : (\w*) \)/', $msg, $matches)) {
if (trim($matches[1]) == '') {
$msg = "The account " . $data["user"] . " is NOT currently suspended";
} else {
// This account is NOT currently suspended (status : r ) . .
$msg = "The account " . $data["user"] . " is NOT currently suspended status: " . trim($matches[1]);
}
}
} elseif (strlen((string)$this->response) > 0) {
$msg = trim((string)$this->response);
}
$this->message = [0, $msg];
} elseif ((int)$this->isSuccessful() == 1) {
// $msg = trim((string)$this->data);
if (is_array($this->data) && isset($this->data['result']['statusmsg'])) {
if (strlen((string)trim($this->data['result']['statusmsg'])) > 0) {
$this->message = [1, "The account " . $data["user"] . " has been activated successfully.
Remember to wait 5 minutes while the server restarts to view the account."];
}
} elseif (strlen((string)$this->response) > 0) {
$this->message = [1, trim((string)$this->response)];
}
$this->message = [1, $msg];
} else {
$this->message = [0, $msg];
}
}
/**
* Change the password of an (active) account
*
* Parameters:
* - username: The custom username
* - password: The new password
*
* @param array $parameters
* @return array
*/
public function password(array $parameters = [])
{
$this->initialize(array_replace($this->parameters, $parameters));
$data = [
"user" => $this->getUserName(),
"pass" => $this->getPassword()
];
$this->httpAuthGet($this->getApiUrl() . "passwd", $data);
$msg = "Sorry an error has occurred please try again in a few minutes.";
if (is_array($this->data) && isset($this->data['passwd']['status'])) {
if ((int)($this->data['passwd']['status']) == 0) {
$this->message = [0, "The password for account " . $data["user"] . " change failed."];
} elseif (((int)($this->data['passwd']['status']) == 1) || (strpos($this->response, 'error occured changing this password') !== false)) {
$this->message = [1, "The password for account " . $data["user"] . " has been changed successfully.
Remember that changing the password is done equally for cPanel,FTP,MySQL"];
} else {
if (strlen((string)$this->response) > 0) {
$msg = (string)$this->response;
}
$this->message = [0, $msg];
}
} elseif ((int)$this->response == 0) {
// response is null
$this->message = [0, "The account " . $data["user"] . " does not exist."];
} else {
$this->message = [0, $msg];
}
}
/**
* Check whether a domain is available
*
* Parameters:
* - domain: The domain name or subdomain to check
*
* @param array $parameters
* @return bool
*/
public function availability(array $parameters = [])
{
$this->initialize(array_replace($this->parameters, $parameters));
$data = [
"api_user" => $this->getApiUsername(),
"api_key" => $this->getApiPassword(),
"domain" => $this->getDomain(),
];
$this->response = $this->httpGet($this->getApiUrl() . "checkavailable", $data);
$this->parseResponse();
$this->data = trim((string)$this->response);
if ((int)$this->response == 1 && (string)$this->data == "1") {
$this->message = [1, "The domain " . $data["domain"] . " is available to register."];
} elseif ((int)$this->response == 0) {
if (strlen((string)$this->response) == 1) {
$this->message = [0, "The domain " . $data["domain"] . " is already registered."];
} elseif (strlen((string)$this->response) > 1) {
$this->message = [0, $this->data];
}
}
}
/**
* Get All domains belonging to Account
*
* Parameters:
* - username the VistaPanel username like uii_1992000
*
* @param array $parameters
* @return array
*/
public function getUserDomains(array $parameters = [])
{
$this->initialize(array_replace($this->parameters, $parameters));
$data = [
"api_user" => $this->getApiUsername(),
"api_key" => $this->getApiPassword(),
"username" => $this->getUserName(),
];
$this->response = $this->httpGet($this->getApiUrl() . "getuserdomains", $data);
$this->data = trim((string)$this->response);
if ($this->data == "null") {
$this->message = array(1, "The account " . $data["username"] . " does not exist.", []);
} elseif (strpos($this->response, '[[') === 0) {
// [["ACTIVE","doudou.uiisc.com"],["ACTIVE","doudoudzj.uiisc.com"]]
// [["SUSPENDED","doudou.uiisc.com"],["SUSPENDED","foundation.pub"]]
$this->domain = array_map(function ($item) {
return ["status" => strtolower($item[0]), "domain" => strtolower($item[1])];
}, json_decode($this->response, true));
$str = "";
foreach ($this->domain as $key=>$value) {
$str .= "domain " . $key . ": " . $value["status"] . " - " . $value["domain"] . "
";
}
$this->message = array(1, "The account " . $data["username"] . " has " . count($this->domain) . " domains.
" . $str);
} else {
$this->message = array(0, $this->data);
}
}
/**
* Get the Status of Account
*
* @return string|null
*/
public function getStatus()
{
if ($this->data != "null" && strpos($this->response, '[[') === 0) {
$statuses = array_unique(array_map(function ($item) {
return strtolower($item["status"]);
}, $this->domain));
// print_r($statuses);
if (count($statuses) == 1) {
return $statuses[0];
} elseif (count($statuses) > 1) {
return "The account domains have different statuses " . $this->getUserName() . "." . $this->data;
} else {
return null;
}
} else {
return null;
}
}
/**
* Get the status of the account if the account is not active.
*
* The result is one of the following chars:
* - x: suspended
* - r: reactivating
* - c: closing
*
* @return string
*/
public function getAccountStatus()
{
return $this->status;
}
}