<?php
class Xndmapi {
private $config;
public function __construct() {
$ci = get_instance();
$ci->config->load('xndmapi');
$this->config = $ci->config->item('xndmapi');
}
public function check($name, $suffixs) {
if (!is_array($suffixs)) {
$suffixs = explode(',', $suffixs);
}
$uri = $this->config['uri']."?method=check&charset={$this->config['charset']}";
$query = "enc={$this->config['enc']}&client={$this->config['client']}&name=".rawurlencode($name);
foreach ($suffixs as $suffix) {
$query .= '&suffix='.rawurlencode(trim($suffix));
}
if ($data = $this->curl($uri, $query)) {
parse_str($data, $params);
$n = intval($params['num']);
if ($n <= 0) {
return false;
}
$list = array();
for($i = 1; $i <= $n; $i++) {
$_name = $params["name{$i}"];
$list[] = array(
'name'=>$_name,
'suffix' => substr($_name, strpos($_name, '.')),
'status'=>($params["chk{$i}"] == '100' ? true : false)
);
}
return $list;
}
return false;
}
public function register($params) {
$uri = $this->config['uri']."?method=Register&charset={$this->config['charset']}";
$client = $this->config['client'];
$password = $this->config['password'];
$enc = $this->config['enc'];
$checksum = strtoupper(md5("Register{$client}{$password}{$params['dn']}{$params['aemail']}{$params['uname2']}"));
$query = array(
'enc' => $enc,
'client' => $client,
'checksum' => $checksum,
'url' => null,
);
$query = array_merge($query, $params);
if ($data = $this->curl($uri, http_build_query($query))) {
parse_str($data, $result);
if ($result['ret'] == '100') {
return true;
}
}
return false;
}
public function renew($params) {
$uri = $this->config['uri']."?method=DomainRenew&charset={$this->config['charset']}";
$client = $this->config['client'];
$password = $this->config['password'];
$enc = $this->config['enc'];
$checksum = strtoupper(md5("DomainRenew{$client}{$password}{$params['dn']}{$enc}{$params['begindate']}"));
$query = array(
'client' => $client,
'enc' => $enc,
'checksum' => $checksum,
);
$query = array_merge($query, $params);
if ($data = $this->curl($uri, http_build_query($query))) {
parse_str($data, $result);
if ($result['ret'] == '100') {
return true;
}
}
return false;
}
private function curl($uri, $query) {
$this->_log($uri." + ".$query);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $uri);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $query);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
$data = curl_exec($curl);
curl_close($curl);
if ($data) {
$this->_log($data); return trim($data);
}
return false;
}
private function _log($str) {
$dir = APPPATH.'logs/api';
if (!is_dir($dir)) {
mkdir($dir, 0750);
}
$path = $dir.'/xinnet-'.date('Y-m-d').'.php';
if (!file_exists($path)) {
file_put_contents($path, '<'.'?php if ( ! defined(\'BASEPATH\')) exit(\'No direct script access allowed\'); ?'.'>'."\r\n");
}
if ($fp = fopen($path, 'a')) {
fwrite($fp, date('Y-m-d H:i:s').' '.$str."\r\n");
fclose($fp);
}
log_message('INFO', $str);
}
}