黄聪:如何高效率存储微信中的 access_token

众所周知,在微信开发中,获取access_token 的接口每天的调用次数是有限制的,2000次应该是。 
不过其实这些完全够用了,除非你不小心写了个循环,在1秒中内用完了。 
每个access_token 的生效时间是2小时内,2小时过后就需要重新申请一下。其实每天只需要申请12次就可以了。 
不管你怎么申请,当前申请了access_token,以前的就都不能用了。

所以解决办法就是: 
在数据库中新建一个表token盛放申请来的access_token,字段有三个

access_token #存放access_token
expires #存放毫秒数
update_time #更新时间戳
  • 1
  • 2
  • 3

逻辑是这样的:(表中只有一条数据)

查询表中数据
    如果有数据,用 时间戳+更新时间 跟 现在时间比较,计算是否已过期:
        如果已过期,重新申请,并更新数据库中数据,并返回access_token
        如果没有过期,直接返回查询出的access_token
    如果没数据:
        申请数据并,插入数据库,返回access_tooken
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
查询表中数据是否有数据?查询数据是否过期向微信申请新token并插入数据库设置变量 access_token 的值返回 access_token输出数据库表中的access_token向微信申请新token并插入数据库yesnoyesno
/*
---------------------
获取access_token:
    查询数据库中是否有数据,
        如果有 取出数据
                如果已经过期,查询,更新记录
                如果没过期,直接返回数据
        如果没有 查询并添加数据,返回数据
---------------------
*/

function get_token(){
    $access_url= 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.AppID.'&secret='.AppScret;
//AppID  AppScret 已经定义为常量

    //数据库参数
    $host= "1.1.1.1";
    $port = '3306';
    $database = "wx";
    $user = "mysql";
    $passwd = "mysql";

    $db = new mysqli($host,$user,$passwd,$database,$port);
    $sql = "select * from token"; //查询wx表数据
    $exist = $db->query($sql);

    global $access_token;

    if($exist->num_rows) 
    //如果存在数据
    {
        $row = $exist->fetch_array();
        //如果数据已过期
        if($row['expires']+$row['update_time']<time()){
            $token = json_decode(file_get_contents($access_url));
            $sql = "update token set access_token = '{$token->access_token}' where access_token = '{$row['access_token']}'";
            $db->query($sql);
            $access_token = $token->access_token; //返回更新的token
        } else {
            $access_token = $row['access_token']; //返回查询的token
        }
    }
    //如果没有数据 
    else { 
        $token = json_decode(file_get_contents($access_url));
        $sql = "insert into token values('{$token->access_token}',{$token->expires_in},".time().")";
        $db->query($sql);
        $access_token = $token->access_token; //返回新建的token
    }
    $db->close();

    return $access_token; //返回access_token
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值