php实现百度云加速API及SDK封装
更新时间:2022年6月11日 19:39 点击:241 作者:若海
百度云加速API参考文档
https://su.baidu.com/help/index.html#/7_kaifazhinan/2_APIcankao-NEW/2_wangzhanjieru/2.1.1_tianjiayuming.md
注意: 官方接口v3和v31有些参数并未实现,或返回的内容和文档描述不符合,所以在封装时交叉使用了2个版本的API,并非码字错漏。
/** * Author: rehiy <https://www.rehiy.com> * Update: 2021-04-12 */ class Yunjiasu { private $su; private $name = ''; private $zone = []; private $zone_fn = [ 'dns_records', 'dns_records_post', 'dns_records_patch', 'dns_records_delete', 'purge_cache', ]; public function __construct($domain, $access_key, $secret_key) { $this->su = new YunjiasuCore($access_key, $secret_key); $this->zone = $this->su->zones(['name' => $domain]); if (empty($this->zone['id'])) { throw new Exception('not found domain'); } $this->name = $domain; } public function __call($name, $arguments) { if (in_array($name, $this->zone_fn)) { array_unshift($arguments, $this->zone['id']); } return call_user_func_array(array($this->su, $name), $arguments); } public function purge_cache($data) { return $this->su->purge_cache($this->zone['id'], $data); } public function dns_records($data = []) { $list = $this->su->dns_records($this->zone['id']); if (empty($list) || empty($data)) { return $list; } return array_filter( $list, function ($item) use ($data) { isset($data['name']) && $data['name'] .= '.' . $this->name; return count($data) === count(array_intersect_assoc($item, $data)); } ); } public function dns_records_delete($data) { return array_map( function ($rs) { return $this->su->dns_records_delete($this->zone['id'], $rs['id']); }, $this->dns_records($data) ); } } class YunjiasuCore { private $api_base = 'https://api.su.baidu.com/'; private $access_key = ''; private $secret_key = ''; public function __construct($access_key, $secret_key) { $this->access_key = $access_key; $this->secret_key = $secret_key; } //////////////////////////////////////////////////////////////// public function zones($data) { $path = 'v31/yjs/zones'; return $this->api_call('GET', $path, $data); } //////////////////////////////////////////////////////////////// public function dns_records($zone_id) { $path = 'v31/yjs/zones/' . $zone_id . '/dns_records'; return $this->api_call('GET', $path); } public function dns_records_post($zone_id, $data) { $path = 'v31/yjs/zones/' . $zone_id . '/dns_records'; return $this->api_call('POST', $path, $data); } public function dns_records_patch($zone_id, $data) { $path = 'v31/yjs/zones/' . $zone_id . '/dns_records'; return $this->api_call('PATCH', $path, $data); } public function dns_records_delete($zone_id, $id) { $path = 'v31/yjs/zones/' . $zone_id . '/dns_records/' . $id; return $this->api_call('DELETE', $path); } //////////////////////////////////////////////////////////////// public function purge_cache($zone_id, $data) { $path = 'v31/yjs/zones/' . $zone_id . '/purge_cache'; return $this->api_call('DELETE', $path, $data); } //////////////////////////////////////////////////////////////// public function custom_certificates($data) { $path = 'v3/yjs/custom_certificates'; return $this->api_call('GET', $path, $data); } public function custom_certificates_post($data) { $path = 'v3/yjs/custom_certificates'; return $this->api_call('POST', $path, $data); } public function custom_certificates_delete($data) { $path = 'v3/yjs/custom_certificates'; return $this->api_call('DELETE', $path, $data); } //////////////////////////////////////////////////////////////// private function api_call($method, $path, $data = NULL) { if (PHP_SAPI == 'cli') { print_r("\n> " . $method . ' /' . $path); } $url = $this->api_base . $path; $header = $this->api_header($path, $data); $result = $this->http_repuest($method, $url, $header, $data); if (!empty($result['errors'])) { $error = json_encode($result['errors']); throw new Exception($error); } if (!empty($result['result'])) { return $result['result']; } if (!empty($result['success'])) { return ['success' => true]; } return $result; } private function api_header($path, $data = NULL) { $params = [ 'X-Auth-Access-Key' => $this->access_key, 'X-Auth-Nonce' => uniqid(), 'X-Auth-Path-Info' => $path, 'X-Auth-Signature-Method' => 'HMAC-SHA1', 'X-Auth-Timestamp' => time(), ]; if (is_array($data)) { $params = array_merge($params, $data); } ksort($params); $header = $signls = []; foreach ($params as $k => $v) { if (is_bool($v)) { $v = $v ? 'true' : 'false'; } if (is_array($v)) { $v = str_replace('","', '", "', json_encode($v, JSON_UNESCAPED_SLASHES)); } if (strpos($k, 'X-Auth') === 0) { $header[] = $k . ':' . $v; } if ($v !== '') { $signls[] = $k . '=' . $v; } } $header[] = 'X-Auth-Sign:' . base64_encode( hash_hmac('sha1', implode('&', $signls), $this->secret_key, true) ); return $header; } //////////////////////////////////////////////////////////////// private function http_repuest($method, $url, $header = NULL, $body = NULL) { $ch = curl_init(); if ($method == 'GET' && $body) { $url .= '?' . http_build_query($body); $body = NULL; } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); if ($header) { curl_setopt($ch, CURLOPT_HTTPHEADER, $header); } if ($body) { if (is_array($body)) { $body = json_encode($body); } curl_setopt($ch, CURLOPT_POSTFIELDS, $body); } $result = curl_exec($ch); $errno = curl_errno($ch); $error = curl_error($ch); curl_close($ch); if ($errno) { return ['error' => $errno, 'message' => $error]; } return json_decode($result, true); } }
以上就是php实现百度云加速API及SDK封装的详细内容,更多关于php封装百度云加速API及SDK的资料请关注猪先飞其它相关文章!
原文出处:https://www.rehiy.com/post/159
上一篇: PHP实现多张图片上传功能的示例代码
下一篇: PHP实现抽奖系统的示例代码
相关文章
- PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04- 这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
- 这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
- 这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31- 这篇文章主要介绍了WebStorm无法正确识别Vue3组合式API的解决方案,帮助大家更好的理解和学习使用vue框架,感兴趣的朋友可以了解下...2021-02-18
微信小程序 wx.request(object) API详解及实例代码
这篇文章主要介绍了微信小程序 wx.request(object) API详解及实例代码的相关资料,需要的朋友可以参考下...2016-10-02- 这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
- 这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
- 这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
- 这篇文章主要介绍了浅谈vue2的$refs在vue3组合式API中的替代方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-18
- 这篇文章主要为大家详细介绍了php构造方法中析构方法在继承中的表现,感兴趣的小伙伴们可以参考一下...2016-04-15
- 这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
- 这篇文章主要介绍了php判断邮箱地址是否存在的方法,php判断邮箱地址是否存在的方法有两种,感兴趣的朋友可以参考一下...2016-02-18
- 在php中switch是选择,if else也有同理,但是它们肯定是有区别的,那么我们来看看它们两者的区别在哪里呢,下面先看switch case语句吧。 switch($id){ case 1: ...2016-11-25
- 下面小编就为大家带来一篇thinkphp自定义权限管理之名称判断方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03
- Sodium 出现的目的也是为了代替Mcrypt这个原来的加密扩展。在 PHP7.2 之后,Mcrypt已经被移除,在PHP7.1时就已经被标记为过时。不过,Sodium扩展的应用也并不是很多,大部分情况下我们都会使用OpenSSL来进行加密操作,所以,我们这篇文章只做了解即可。...2021-06-17
- 这篇文章主要为大家详细介绍了php图片添加文字水印实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-03-17
- 在本篇文章里小编给大家整理的是一篇关于php回溯算法计算组合总和的实例代码,有需要的朋友们可以学习参考下。...2021-07-14