<?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);
宠物免费领养小程序,欢迎来踩