Преглед на файлове

增加 godaddydns PHP 版本操作

ywdblog преди 6 години
родител
ревизия
d22cac08fa
променени са 2 файла, в които са добавени 82 реда и са изтрити 31 реда
  1. 9 1
      README.md
  2. 73 30
      php-version/godaddydns.php

+ 9 - 1
README.md

@@ -30,14 +30,16 @@ $ chmod 0777 au.sh
 
 - ALY_KEY 和 ALY_TOKEN:阿里云 [API key 和 Secrec 官方申请文档](https://help.aliyun.com/knowledge_detail/38738.html)。
 - TXY_KEY 和 TXY_TOKEN:腾讯云 [API 密钥官方申请文档](https://console.cloud.tencent.com/cam/capi)。
+- GODADDY_KEY 和 GODADDY_TOKEN:GoDaddy [API 密钥官方申请文档](https://developer.godaddy.com/getstarted)。
 
 (2)选择运行环境
 
-目前该工具支持种运行环境和场景,通过 hook 文件和参数来调用:
+目前该工具支持种运行环境和场景,通过 hook 文件和参数来调用:
 
 - PHP(>4以上版本均可)
 	- au.sh php aly add/clean:表示选择PHP命令行,操作阿里云DNS,增加/清空DNS。
 	- au.sh php txy add/clean:表示选择PHP命令行,操作腾讯云DNS,增加/清空DNS。
+	- au.sh php godaddy add/clean:表示选择PHP命令行,操作GoDaddy DNS,增加/清空DNS。
 - Python(支持2.7和3.7版本)
 	- au.sh python aly add/clean:表示选择Python命令行,操作阿里云DNS,增加/清空DNS。
 	- au.sh python txy add/clean:表示选择Python命令行,操作腾讯云DNS,增加/清空DNS。(需要安装第三方库,pip install requests 或 pip3 install requests,后续我会优化使用python内建库)
@@ -129,6 +131,12 @@ $ ./certbot-auto renew --cert-name simplehttps.com  --manual-auth-hook "/脚本
 
 **注意:只有单机建议这样运行,如果要将证书同步到多台web服务器,需要有别的方案**
 
+### 贡献
+
+- 阿里云 python 版 @Duke-Wu
+- 腾讯云 python 版 @akgnah         
+- GoDaddy PHP 版 wlx_1990 (2019-01-11)
+
 ### 其他
 
 - 可以关注公众号(虞大胆的叽叽喳喳,yudadanwx),了解更多密码学&HTTPS协议知识。

+ 73 - 30
php-version/godaddydns.php

@@ -1,38 +1,62 @@
 <?php
 date_default_timezone_set("GMT");
 
-//accessKeyId 和 accessSecrec 在 https://developer.godaddy.com/getstarted 申请 
-define("accessKeyId", "");
-define("accessSecrec", "");
-
-$type = 'TXT';
-
-$domainarray = GodaddyDns::getDomain($argv[1]);
-//证书申请域名
-$selfdomain  = ($domainarray[0] == "") ? $argv[2] : $argv[2].".".$domainarray[0];
-//根域名
-$domain      = $domainarray[1];
-
-$obj = new GodaddyDns(accessKeyId, accessSecrec, $domain);
-
-$data = $obj->GetDNSRecord($domain, $type);
-$code = $data['httpCode'];
-if ($code != 200) {
-    echo 'code='.$code;
-    echo '<br/>';
-    echo $data['result'];
+# 第一个参数是 action,代表 (add/clean) 
+# 第二个参数是域名 
+# 第三个参数是主机名(第三个参数+第二个参数组合起来就是要添加的 TXT 记录)
+# 第四个参数是 TXT 记录值
+# 第五个参数是 APPKEY
+# 第六个参数是 APPTOKEN
+
+echo "域名 API 调用开始\n";
+print_r($argv);
+if (count($argv) < 7) {
+    echo "参数有误\n";
     exit;
 }
-$data_obj = json_decode($data['result']);
-$count    = count($data_obj);
-if ($count <= 0) {
+echo $argv[1]."-".$argv[2]."-".$argv[3]."-".$argv[4]."-".$argv[5]."-".$argv[6]."\n";
 
-    $r = $obj->CreateDNSRecord($domain, $selfdomain, $argv[3], $type);
-} else {
+$domainarray = GodaddyDns::getDomain($argv[2]);
+$selfdomain  = ($domainarray[0] == "") ? $argv[3] : $argv[3].".".$domainarray[0];
 
-    $r = $obj->UpdateDNSRecord($domain, $selfdomain, $argv[3], $type); //$domain,$name,$value,$recordType='TXT
+/*
+
+  $obj = new GodaddyDns($argv[5], $argv[6], $domainarray[1]);
+  $data = $obj->getDomains();
+  $data_obj = json_decode($data['result']);
+  $code = $data['httpCode'];
+  test :php  godaddydns.php add yudadan.com  v k
+ */
+
+$obj = new GodaddyDns($argv[5], $argv[6], $domainarray[1]);
+
+switch ($argv[1]) {
+    case "clean":
+        //api 不包含该操作
+        break;
+
+    case "add":
+        $data     = $obj->GetDNSRecord($domainarray[1], $selfdomain);
+        $data_obj = json_decode($data['result']);
+        $count    = count($data_obj);
+        if ($count > 0) {
+
+            $data = $obj->UpdateDNSRecord($domainarray[1], $selfdomain, $argv[4]);
+        } else {
+            $data = $obj->CreateDNSRecord($domainarray[1], $selfdomain, $argv[4]);
+        }
+        if ($data["httpCode"] != 200) {
+            $message = json_decode($data["result"], true);
+            echo "域名处理失败-".$message["message"];
+            exit;
+        }
+        break;
 }
 
+echo "域名 API 调用结束\n";
+
+//    $r = $obj->UpdateDNSRecord($domain, $selfdomain, $argv[3], $type);
+
 class GodaddyDns
 {
     private $accessKeyId  = null;
@@ -50,6 +74,7 @@ class GodaddyDns
     /*
       根据域名返回主机名和二级域名
      */
+
     public static function getDomain($domain)
     {
 
@@ -73,7 +98,7 @@ class GodaddyDns
         $arr[] = ".link";
         $arr[] = ".uk";
         $arr[] = ".hk";
- 
+
         //二级域名
         $seconddomain = "";
         //子域名
@@ -127,9 +152,27 @@ class GodaddyDns
         return json_decode($msg, true);
     }
 
-    public function GetDNSRecord($domain, $recordType = 'TXT')
+    public function getDomains()
     {
-        $url    = "https://api.godaddy.com/v1/domains/$domain/records/$recordType/_acme-challenge";
+
+        $url    = "https://api.godaddy.com/v1/domains";
+        $header = ['accept: application/json', 'authorization:sso-key '.$this->accessKeyId.':'.$this->accessSecrec];
+        return $this->curl($url, $header);
+    }
+
+    public function delRecords($domain)
+    {
+
+        $url    = "https://api.godaddy.com/v1/domains/$domain";
+        $header = ['accept: application/json', 'Content-Type: application/json',
+            'authorization:sso-key '.$this->accessKeyId.':'.$this->accessSecrec];
+
+        return $this->curl($url, $header, '', 'delete');
+    }
+
+    public function GetDNSRecord($domain, $record, $recordType = 'TXT')
+    {
+        $url    = "https://api.godaddy.com/v1/domains/$domain/records/$recordType/$record";
         $header = ['accept: application/json', 'authorization:sso-key '.$this->accessKeyId.':'.$this->accessSecrec];
         return $this->curl($url, $header);
     }
@@ -163,4 +206,4 @@ class GodaddyDns
         );
         return $this->curl($url, $header, json_encode($data), 'PATCH');
     }
-}
+}