CURL封装

php php 744      收藏
CURL封装

<?php 
	
	/**
	 * 功能:curl函数库的使用:主要是帮我们发送网络请求(file_get_contents可以发送网络:GET请求)
	 * 示例:
	 	
	 	$url = 'http://api.douban.com/v2/movie/in_theaters';
		$result = curl_get($url);
		var_dump($result);

	 * 1. 初始化一个函数句柄(打开浏览器)
	 * 2. 设置相关的参数(浏览器内部行为)
	 * 3. 执行网络请求(回车)
	 * 4. 关闭函数句柄(释放)
	 */
		/***************************demo****************************************/

		$ch = curl_init();//1.初始化句柄
		//2.设置相关参数 1.GET请求 2.POST请求和POST提交的数据
		$url = "http://api.douban.com/v2/movie/in_theaters";
		curl_setopt($ch,CURLOPT_URL, $url); //请求url地址
		//代表含义 :不要将响应的数据直接显示出来,需要用变量接收
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

		//3.执行网站请求(curl的默认行为是直接响应的数据进行显示 ,有时候希望将数据保存在一个变量里面)
		$data = curl_exec($ch); //将请求的数据保存在变量里面
		
		$status = file_put_contents('./api.json', $data);//将数据保存在api.json文件里面

		var_dump(curl_errno($ch)); //查看错误的信息		
		//4.关闭(网络流) 在liunx下有一个文件句柄数
		curl_close($ch);
/********************************************demo结束****************************************/



	
	function curl_get($url)
	{
		$ch = curl_init(); // 1. 函数句柄

		// 2. 设置相关参数 1. 好比请求的行为(默认是GET)2. POST请求、POST提交的数据
		curl_setopt($ch, CURLOPT_URL, $url); 
		// 代表含义:不要将响应的数据直接显示出来,需要用变量进行接收
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 


		// 3. 执行网站请求(curl的默认行为是直接响应的数据进行显示出来,有的时候希望保存在一个变量里面)
		$data = curl_exec($ch);
		$error = curl_error($ch);
		$errno = curl_errno($ch);

		curl_close($ch); 
		 
		if($data){
			return ['error' => null, 'errno' => 0, 'data' => $data];
		}else{
			return ['error' => $error, 'errno' => $errno];
		}
	}


	function curl_post($url, $data)
	{
		
		$ch = curl_init($url);

		curl_setopt($ch, CURLOPT_POST, 1); // 代表使用POST方式进行请求
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 代表使用变量保存响应数据,不要直接显示

		curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // 代表要提交的数据信息

		// 处理https:关闭这种https的校验
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

		$rs = curl_exec($ch);

		$error = curl_error($ch);
		$errno = curl_errno($ch);

		curl_close($ch);

		if($rs){
			return ['error' => null, 'errno' => 0, 'data' => $rs];
		}else{

			return ['error' => $error, 'errno' => $errno];

		}

	}

	/**
	 * 设置缓存
	 * @param  [type] $key     [description]
	 * @param  [type] $value   [description]
	 * @param  [type] $expires [description]
	 * @return [type]          [description]
	 */
	function cache_data($key, $value, $expires)
	{
		// 如何设置有效期?
		$status1 = file_put_contents('expires.txt', $expires); // 代表当前这个key的有效期

		// ['data' => $value, 'expires' => $expires];
		// 取的时候我们需要知道这个缓存数据是否过期( 当前时间戳-文件修改时间戳 <= 有效期)
		$status2 = file_put_contents($key, $value); 

		return $status1 && $status2;
	}

	/**
	 * 获取缓存信息
	 * @param  [type] $key [description]
	 * @return [type]      [description]
	 */
	function cache_get($key)
	{
		$expires = file_get_contents('expires.txt');
		 // filemtime 获取文件最后一次的修改时间
		if( time() - filemtime($key) <= $expires){
			return file_get_contents($key);
		}
		return null;
	}

	/**
	 * 获取token
	 * @return [type] [description]
	 */
	function getToken()
	{
		// 现在的网络请求都是走的http协议 但是有的时候,有些协议使用的使用https协议,例如我们要请求的微信的url地址。
		// 完成微信的菜单
		// 1. 要获取ACCESS_TOKEN
		$APPID = 'wx055d641bbb48366c';
		$APPSECRET = 'e688333256582611b59d1d5a15503594';

		$tokenUrl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $APPID . '&secret=' . $APPSECRET;

		$result = curl_get($tokenUrl);

		if($result['error'] === null){
			// 网络请求成功,但是并不意味着接口的返回是正确的
			$jsonString = $result['data'];
			$infoArray = json_decode($jsonString, true); // 代表接口响应
			if( isset( $infoArray['errcode'] ) ){
				// 代表出错
				return ['error' => $infoArray['errmsg'], 'errno' => $infoArray['errno']];

			}else{
				// 成功
				cache_data('token', $infoArray['access_token'], $infoArray['expires_in']);
				return ['error' => null, 'errno' => 0, 'data' => $infoArray['access_token']];
			}

		}
	}

	/**
	 * 获取公众号的菜单信息
	 * @return [type] [description]
	 */
	function get_menu()
	{
		
		$token = cache_get('token'); // 缓存获取

		if(!$token){
			$token = getToken(); // 发送网络请求获取
		}
		$wxUrl = 'https://api.weixin.qq.com/cgi-bin/menu/get?access_token=' . $token;

		$result = curl_get($wxUrl);

		return $result;
	}	

	function create_menu()
	{
		$token = cache_get('token'); // 缓存获取

		if(!$token){
			$token = getToken(); // 发送网络请求获取
		}
		$wxUrl = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=' . $token;

		// 构建菜单数据
		$jsonMenu = '{
		     "button":[
		     {    
		          "type":"click",
		          "name":"TOP5",
		          "key":"GET_TOP5"
		      },
		      {
		           "name":"公司信息",
		           "sub_button":[
		           {    
		               "type":"view",
		               "name":"主页",
		               "url":"http://bbs.sinsea.cn/"
		            },
		            {
		               "type":"click",
		               "name":"关于我们",
		               "key":"ABOUT_ME"
		            }]
		       }]
		 }';

		 // POST请求
		 $result = curl_post($wxUrl, $jsonMenu);

		 return $result;
	}


	function del_menu()
	{
		$token = cache_get('token'); // 缓存获取

		if(!$token){
			$token = getToken(); // 发送网络请求获取
		}
		$wxUrl = 'https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=' . $token;

		$result = curl_get($wxUrl);

		return $result;
	}

	$result = get_menu();
	var_dump($result);