1 <?php 2 namespace App\Org; 3 define('AccessKeyId', config('app.AliyunAccessKeyId')); 4 define('AccessKeySecret', config('app.AliyunAccessKeySecret')); 5 date_default_timezone_set('UTC'); 6 7 class Dns 8 { 9 const DomainName='aaa.com'; 10 const IP='**.**.**.**'; 11 /** 12 * 生成请求签名 13 */ 14 public static function getSign($add) 15 { 16 $nonce = time() . rand(11111, 99999); 17 $time = date('Y-m-d') . 'T' . date('H:i:s') . 'Z'; 18 $data = array( 19 'AccessKeyId' => AccessKeyId, 20 'Format' => 'json', 21 'SignatureMethod' => 'HMAC-SHA1', 22 'SignatureNonce' => $nonce, 23 'SignatureVersion' => '1.0', 24 'Timestamp' => $time, 25 'Version' => '2015-01-09', 26 'Lang' => 'cn', 27 ); 28 $data = array_merge($data, $add); 29 ksort($data); 30 $format = http_build_query($data); 31 $signUrl = 'GET&%2F&' . urlencode($format); 32 $sign = urlencode(base64_encode(hash_hmac('sha1', $signUrl, AccessKeySecret . '&', true))); 33 return array('url' => $format, 'sign' => $sign); 34 } 35 36 //根据id获取记录信息 37 public static function DescribeDomainRecordInfo($id) 38 { 39 $sign_add=[ 40 'Action' => 'DescribeDomainRecordInfo', 41 'RecordId' => $id, 42 ]; 43 $sign = self::getSign($sign_add); 44 $url = 'https://alidns.aliyuncs.com/?' . $sign['url'] . '&Signature=' . $sign['sign']; 45 $res = json_decode(self::httpRequest($url)); 46 if (!isset($res->RecordId)) { 47 throw new \Exception('记录不存在',-1); 48 } 49 return $res; 50 } 51 52 53 /** 54 * 获取域名解析记录 55 */ 56 public static function getDomainRecords($add) 57 { 58 $sign_add=[ 59 'Action' => 'DescribeDomainRecords', 60 'DomainName' => self::DomainName, 61 ]; 62 $sign_add=array_merge($sign_add,$add); 63 $sign = self::getSign($sign_add); 64 $url = 'https://alidns.aliyuncs.com/?' . $sign['url'] . '&Signature=' . $sign['sign']; 65 $data = json_decode(self::httpRequest($url)); 66 if (isset($data->Code)) { 67 throw new \Exception($data->Message,-1); 68 } 69 $data_res=[ 70 'list'=>$data->DomainRecords->Record, 71 'count'=>$data->TotalCount, 72 ]; 73 return $data_res; 74 } 75 76 /** 77 * 更新域名解析记录 78 */ 79 public static function UpdateDomainRecord($add) 80 { 81 $sign_add=[ 82 'Action' => 'UpdateDomainRecord', 83 'DomainName' => self::DomainName, 84 'Type' => 'A', 85 'Value' => self::IP, 86 ]; 87 $sign_add=array_merge($sign_add,$add); 88 $sign = self::getSign($sign_add); 89 $url = 'https://alidns.aliyuncs.com/?' . $sign['url'] . '&Signature=' . $sign['sign']; 90 $res= json_decode(self::httpRequest($url)); 91 if(isset($res->Code)) 92 { 93 throw new \Exception($res->Message,-1); 94 } 95 return $res; 96 } 97 98 /** 99 * 添加域名解析记录 100 */ 101 public static function addDomainRecords($add) 102 { 103 $sign_add=[ 104 'Action' => 'AddDomainRecord', 105 'DomainName' => self::DomainName, 106 'Type' => 'A', 107 'Value' => self::IP, 108 ]; 109 $sign_add=array_merge($sign_add,$add); 110 $sign = self::getSign($sign_add); 111 $url = 'https://alidns.aliyuncs.com/?' . $sign['url'] . '&Signature=' . $sign['sign']; 112 $res= json_decode(self::httpRequest($url)); 113 if(isset($res->Code)) 114 { 115 throw new \Exception($res->Message,-1); 116 } 117 return $res; 118 } 119 120 /** 121 * 更新域名解析记录 122 */ 123 public static function deleteDomainRecord($add) 124 { 125 $sign_add=[ 126 'Action' => 'DeleteDomainRecord', 127 ]; 128 $sign_add=array_merge($sign_add,$add); 129 $sign = self::getSign($sign_add); 130 $url = 'https://alidns.aliyuncs.com/?' . $sign['url'] . '&Signature=' . $sign['sign']; 131 $res= json_decode(self::httpRequest($url)); 132 if(isset($res->Code)) 133 { 134 throw new \Exception($res->Message,-1); 135 } 136 return $res; 137 } 138 139 public static function UpdateDomainRecordRemark($add) 140 { 141 $sign_add=[ 142 'Action' => 'UpdateDomainRecordRemark', 143 ]; 144 $sign_add=array_merge($sign_add,$add); 145 $sign = self::getSign($sign_add); 146 $url = 'https://alidns.aliyuncs.com/?' . $sign['url'] . '&Signature=' . $sign['sign']; 147 $res= json_decode(self::httpRequest($url)); 148 if(!isset($res->RequestId)) 149 { 150 throw new \Exception($res->Message,-1); 151 } 152 return $res; 153 } 154 155 /** 156 * 发起 HTTP 请求 157 */ 158 public static function httpRequest($url) 159 { 160 $curl = curl_init(); 161 curl_setopt($curl, CURLOPT_URL, $url); 162 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 163 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 164 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 165 $data = curl_exec($curl); 166 $error = curl_error($curl); 167 curl_close($curl); 168 if ($error) { 169 return $error; 170 } else { 171 return $data; 172 } 173 } 174 175 }