Namesilo.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. namespace App\Components;
  3. use GuzzleHttp\Client;
  4. use Log;
  5. use LSS\XML2Array;
  6. class Namesilo
  7. {
  8. private static $host = 'https://www.namesilo.com/api/';
  9. // 列出账号下所有域名 Todo Debug测试
  10. public function listDomains()
  11. {
  12. return $this->send('listDomains');
  13. }
  14. // 发送请求
  15. private function send($operation, $data = [])
  16. {
  17. $params = [
  18. 'version' => 1,
  19. 'type' => 'xml',
  20. 'key' => sysConfig('namesilo_key'),
  21. ];
  22. $query = array_merge($params, $data);
  23. $content = '请求操作:[' . $operation . '] --- 请求数据:[' . http_build_query(
  24. $query
  25. ) . ']';
  26. $request = (new Client(['timeout' => 15]))->get(
  27. self::$host . $operation . '?' . http_build_query($query)
  28. );
  29. $result = XML2Array::createArray(
  30. json_decode($request->getBody(), true)
  31. );
  32. if ($request->getStatusCode() != 200) {
  33. Log::error('请求失败:' . var_export($request, true));
  34. Helpers::addNotificationLog(
  35. '[Namesilo API] - [' . $operation . ']',
  36. $content,
  37. 1,
  38. sysConfig('webmaster_email'),
  39. 0,
  40. var_export($request, true)
  41. );
  42. return false;
  43. }
  44. // 出错
  45. if (empty($result['namesilo']) || $result['namesilo']['reply']['code'] != 300 || $result['namesilo']['reply']['detail'] !== 'success') {
  46. Helpers::addNotificationLog(
  47. '[Namesilo API] - [' . $operation . ']',
  48. $content,
  49. 1,
  50. sysConfig('webmaster_email'),
  51. 0,
  52. $result['namesilo']['reply']['detail']
  53. );
  54. } else {
  55. Helpers::addNotificationLog(
  56. '[Namesilo API] - [' . $operation . ']',
  57. $content,
  58. 1,
  59. sysConfig('webmaster_email'),
  60. 1,
  61. $result['namesilo']['reply']['detail']
  62. );
  63. }
  64. return $result['namesilo']['reply'];
  65. }
  66. // 列出指定域名的所有DNS记录
  67. public function dnsListRecords($domain)
  68. {
  69. $query = [
  70. 'domain' => $domain,
  71. ];
  72. return $this->send('dnsListRecords', $query);
  73. }
  74. // 为指定域名添加DNS记录
  75. public function dnsAddRecord(
  76. $domain,
  77. $host,
  78. $value,
  79. $type = 'A',
  80. $ttl = 7207
  81. ) {
  82. $query = [
  83. 'domain' => $domain,
  84. 'rrtype' => $type,
  85. 'rrhost' => $host,
  86. 'rrvalue' => $value,
  87. 'rrttl' => $ttl,
  88. ];
  89. return $this->send('dnsAddRecord', $query);
  90. }
  91. // 更新DNS记录
  92. public function dnsUpdateRecord($domain, $id, $host, $value, $ttl = 7207)
  93. {
  94. $query = [
  95. 'domain' => $domain,
  96. 'rrid' => $id,
  97. 'rrhost' => $host,
  98. 'rrvalue' => $value,
  99. 'rrttl' => $ttl,
  100. ];
  101. return $this->send('dnsUpdateRecord', $query);
  102. }
  103. // 删除DNS记录
  104. public function dnsDeleteRecord($domain, $id)
  105. {
  106. $data = [
  107. 'domain' => $domain,
  108. 'rrid' => $id,
  109. ];
  110. return $this->send('dnsDeleteRecord', $data);
  111. }
  112. }