1.新建一个专门用于获取access_token的文件,包含一个获取类
2.类中定义两个方法:1个用于获取token,另外一个用于连接服务器,将数据保存到云服务器的数据库
4.文件放到服务器定时刷新,使用php函数 ignore_user_abort();
//tips:不推荐使用,极其不稳定,其他任务执行时会打乱这个任务!!!
ignore_user_abort();
set_time_limit(0);
向数据库中每分钟添加一个元素,测试结果 如下:
tips: 把文件放到服务器后要先运行一下,然后再关掉。
逻辑部分放到do里面,while(true)可以实现一个死循环。
3.demo:access_token.php
<?php
/*
* 定时获取access_token,存到数据库,实现公用
* */
$getToken = new getAccessToken();
$getToken->accessTokenCallBack();
$getToken->sqlConnect();
//获取token类
class getAccessToken
{
public $access_token;//用来保存token
public $flag = 1;
//获取token
public function accessTokenCallBack()
{
define("APPID", "xxxxxxxx");//你的appid
define("APPSECRET", "xxxxxxxxxx");//你的appsecret
$appId = APPID;
$appSecret = APPSECRET;
//请求地址
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret";
//发送get请求,并将返回的json转化为数组,提取出token
$ch = curl_init();//c初始化一个cURL会话
curl_setopt($ch, CURLOPT_URL, $url);//将URL设置为我们需要的URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);//获取json返回数据
curl_close($ch);
$jsonInfo = json_decode($output, true);
$this->access_token= $jsonInfo["access_token"];
}
//连接数据库,并将新的值赋到对应表中!tips:需要已经创建好数据库的表
public function sqlConnect(){
$hostName = "w.rdc.sae.sina.com.cn";//你的数据库地址
$usrName = "xxxxxxx";//用户名,密码,端口号,数据库名
$passWord = "xxxxxxxxxx";
$port = "3306";
$dbname = "xxxxxxxxxx";
$content = mysqli_connect($hostName,$usrName,$passWord,$dbname,$port);//连接函数,返回连接句柄
mysqli_set_charset($content,'utf-8');
if($content){
echo "连接成功--";
}else{
die("连接失败:".mysqli_connect_error());
}
if($this->access_token == NULL){
echo "获取access_token失败!";
}else {
//插入语句
// $sqlStr = "insert into Access_token(token,flag)
// VALUES('$this->access_token','$this->flag')";
//更新语句
$sqlStr = "update Access_token set token = '$this->access_token'";
if (mysqli_query($content, $sqlStr)) {
echo "更新成功";
} else {
echo "更新失败:" . mysqli_error($content);
}
}
mysqli_close($content);
}
}
4.容易出现问题的地方:
1)这版code适用于数据库已经建好表。而且表中已经赋了初值。token要至少留出512个字节的空间。创建数据表语句
$sql = "CREATE TABLE Access_token (
token VARCHAR(512) NOT NULL,
flag int(1) NOT NULL
)";
2)在赋值语句中,因为赋的是变量名字,所以变量名字外必须用单引号''括起来,否则写入数据库内容失败。给新建数据表赋值
sql1 = "insert into Access_token(token,flag)
VALUE ('$this->access_token',$this->flag)";
3)在连接数据库时,使用mysqli,因为mysql不安全。