请选择 进入手机版 | 继续访问电脑版
查看: 226|回复: 0

php实现百度云加速API及SDK封装

[复制链接]

2066

主题

2066

帖子

6594

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6594
发表于 2022-10-9 01:02:47 | 显示全部楼层 |阅读模式
百度云加速API参考文档
https://su.baidu.com/help/index.html#/7_kaifazhinan/2_APIcankao-NEW/2_wangzhanjieru/2.1.1_tianjiayuming.md
注意: 官方接口v3和v31有些参数并未实现,或返回的内容和文档描述不符合,所以在封装时交叉使用了2个版本的API,并非码字错漏。
  1. /**
  2. * Author: rehiy <https://www.rehiy.com>
  3. * Update: 2021-04-12
  4. */
  5. class Yunjiasu
  6. {
  7.     private $su;
  8.     private $name = '';
  9.     private $zone = [];
  10.     private $zone_fn = [
  11.         'dns_records',
  12.         'dns_records_post',
  13.         'dns_records_patch',
  14.         'dns_records_delete',
  15.         'purge_cache',
  16.     ];
  17.     public function __construct($domain, $access_key, $secret_key)
  18.     {
  19.         $this->su = new YunjiasuCore($access_key, $secret_key);
  20.         $this->zone = $this->su->zones(['name' => $domain]);
  21.         if (empty($this->zone['id'])) {
  22.             throw new Exception('not found domain');
  23.         }
  24.         $this->name = $domain;
  25.     }
  26.     public function __call($name, $arguments)
  27.     {
  28.         if (in_array($name, $this->zone_fn)) {
  29.             array_unshift($arguments, $this->zone['id']);
  30.         }
  31.         return call_user_func_array(array($this->su, $name), $arguments);
  32.     }
  33.     public function purge_cache($data)
  34.     {
  35.         return $this->su->purge_cache($this->zone['id'], $data);
  36.     }
  37.     public function dns_records($data = [])
  38.     {
  39.         $list = $this->su->dns_records($this->zone['id']);
  40.         if (empty($list) || empty($data)) {
  41.             return $list;
  42.         }
  43.         return array_filter(
  44.             $list,
  45.             function ($item) use ($data) {
  46.                 isset($data['name']) && $data['name'] .= '.' . $this->name;
  47.                 return count($data) === count(array_intersect_assoc($item, $data));
  48.             }
  49.         );
  50.     }
  51.     public function dns_records_delete($data)
  52.     {
  53.         return array_map(
  54.             function ($rs) {
  55.                 return $this->su->dns_records_delete($this->zone['id'], $rs['id']);
  56.             },
  57.             $this->dns_records($data)
  58.         );
  59.     }
  60. }
  61. class YunjiasuCore
  62. {
  63.     private $api_base = 'https://api.su.baidu.com/';
  64.     private $access_key = '';
  65.     private $secret_key = '';
  66.     public function __construct($access_key, $secret_key)
  67.     {
  68.         $this->access_key = $access_key;
  69.         $this->secret_key = $secret_key;
  70.     }
  71.     ////////////////////////////////////////////////////////////////
  72.     public function zones($data)
  73.     {
  74.         $path = 'v31/yjs/zones';
  75.         return $this->api_call('GET', $path, $data);
  76.     }
  77.     ////////////////////////////////////////////////////////////////
  78.     public function dns_records($zone_id)
  79.     {
  80.         $path = 'v31/yjs/zones/' . $zone_id . '/dns_records';
  81.         return $this->api_call('GET', $path);
  82.     }
  83.     public function dns_records_post($zone_id, $data)
  84.     {
  85.         $path = 'v31/yjs/zones/' . $zone_id . '/dns_records';
  86.         return $this->api_call('POST', $path, $data);
  87.     }
  88.     public function dns_records_patch($zone_id, $data)
  89.     {
  90.         $path = 'v31/yjs/zones/' . $zone_id . '/dns_records';
  91.         return $this->api_call('PATCH', $path, $data);
  92.     }
  93.     public function dns_records_delete($zone_id, $id)
  94.     {
  95.         $path = 'v31/yjs/zones/' . $zone_id . '/dns_records/' . $id;
  96.         return $this->api_call('DELETE', $path);
  97.     }
  98.     ////////////////////////////////////////////////////////////////
  99.     public function purge_cache($zone_id, $data)
  100.     {
  101.         $path = 'v31/yjs/zones/' . $zone_id . '/purge_cache';
  102.         return $this->api_call('DELETE', $path, $data);
  103.     }
  104.     ////////////////////////////////////////////////////////////////
  105.     public function custom_certificates($data)
  106.     {
  107.         $path = 'v3/yjs/custom_certificates';
  108.         return $this->api_call('GET', $path, $data);
  109.     }
  110.     public function custom_certificates_post($data)
  111.     {
  112.         $path = 'v3/yjs/custom_certificates';
  113.         return $this->api_call('POST', $path, $data);
  114.     }
  115.     public function custom_certificates_delete($data)
  116.     {
  117.         $path = 'v3/yjs/custom_certificates';
  118.         return $this->api_call('DELETE', $path, $data);
  119.     }
  120.     ////////////////////////////////////////////////////////////////
  121.     private function api_call($method, $path, $data = NULL)
  122.     {
  123.         if (PHP_SAPI == 'cli') {
  124.             print_r("\n> " . $method . ' /' . $path);
  125.         }
  126.         $url = $this->api_base . $path;
  127.         $header = $this->api_header($path, $data);
  128.         $result = $this->http_repuest($method, $url, $header, $data);
  129.         if (!empty($result['errors'])) {
  130.             $error = json_encode($result['errors']);
  131.             throw new Exception($error);
  132.         }
  133.         if (!empty($result['result'])) {
  134.             return $result['result'];
  135.         }
  136.         if (!empty($result['success'])) {
  137.             return ['success' => true];
  138.         }
  139.         return $result;
  140.     }
  141.     private function api_header($path, $data = NULL)
  142.     {
  143.         $params = [
  144.             'X-Auth-Access-Key' => $this->access_key,
  145.             'X-Auth-Nonce' => uniqid(),
  146.             'X-Auth-Path-Info' => $path,
  147.             'X-Auth-Signature-Method' => 'HMAC-SHA1',
  148.             'X-Auth-Timestamp' => time(),
  149.         ];
  150.         if (is_array($data)) {
  151.             $params = array_merge($params, $data);
  152.         }
  153.         ksort($params);
  154.         $header = $signls = [];
  155.         foreach ($params as $k => $v) {
  156.             if (is_bool($v)) {
  157.                 $v = $v ? 'true' : 'false';
  158.             }
  159.             if (is_array($v)) {
  160.                 $v = str_replace('","', '", "', json_encode($v, JSON_UNESCAPED_SLASHES));
  161.             }
  162.             if (strpos($k, 'X-Auth') === 0) {
  163.                 $header[] = $k . ':' . $v;
  164.             }
  165.             if ($v !== '') {
  166.                 $signls[] = $k . '=' . $v;
  167.             }
  168.         }
  169.         $header[] = 'X-Auth-Sign:' . base64_encode(
  170.             hash_hmac('sha1', implode('&', $signls), $this->secret_key, true)
  171.         );
  172.         return $header;
  173.     }
  174.     ////////////////////////////////////////////////////////////////
  175.     private function http_repuest($method, $url, $header = NULL, $body = NULL)
  176.     {
  177.         $ch = curl_init();
  178.         if ($method == 'GET' && $body) {
  179.             $url .= '?' . http_build_query($body);
  180.             $body = NULL;
  181.         }
  182.         curl_setopt($ch, CURLOPT_URL, $url);
  183.         curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
  184.         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  185.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  186.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  187.         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
  188.         if ($header) {
  189.             curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  190.         }
  191.         if ($body) {
  192.             if (is_array($body)) {
  193.                 $body = json_encode($body);
  194.             }
  195.             curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
  196.         }
  197.         $result = curl_exec($ch);
  198.         $errno = curl_errno($ch);
  199.         $error = curl_error($ch);
  200.         curl_close($ch);
  201.         if ($errno) {
  202.             return ['error' => $errno, 'message' => $error];
  203.         }
  204.         return json_decode($result, true);
  205.     }
  206. }
复制代码
以上就是php实现百度云加速API及SDK封装的详细内容,更多关于php封装百度云加速API及SDK的资料请关注趣UU其它相关文章!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
打赏作者
  • 0
  • 0
  • 0
  • 0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表