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