文档章节

持久化access_token - 傻瓜式微信开发教程24 - 耗子原创

茄子酱
 茄子酱
发布于 2015/09/09 11:21
字数 558
阅读 40
收藏 0

安装php redis扩展 - 傻瓜式微信开发教程23 - 耗子原创中我们搞定了环境的搭建,
现在我们可以直接使用redis来缓存access_token了.

我们把配置项分离到`config.php`页面,里面存放了一下微信的字段和redis的连接字段等信息:

<?php
    // weixin
    define('token', 'xxx');
    define('aeskey', 'xxx');
    define('appid', 'xxx');
    define('appsecret', 'xxx');
    define('debug', true);
    // redis
    define('redis_host', '127.0.0.1');
    define('redis_port', 6379);
    define('token_key', 'weixinshow001_token');
?>

我们新建一个页面`token_get.php`,首先导入config.php,用来读取相关内容.

require_once('config.php');

之后实现`getToken`函数,返回一个数组,
其中有一个`error`字段,如果正确`error`为0,同时附带`msg`字段,
如果`error`不为0,则附带`msg`字段说明错误情况.

function getToken(){
    $mem_key = constant("token_key");
    $redis = new Redis();
    $redis->connect(
        constant("redis_host"),
        constant("redis_port")
    );
    // 读取redis中的缓存的token数据
    // 如果存在直接返回
    $mem_token = $redis->GET($mem_key);
    if($mem_token){
        $r = array(
            'error' => 0,
            'token' => $mem_token
        );
        $redis->close();
        return $r;
    }
    // 调用api获取token
    $appid = constant("appid");
    $appsecret = constant("appsecret");
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
    // 构建http请求并执行
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $response=curl_exec($ch);
    curl_close($ch);
    $back_info = json_decode($response);
    if(!isset($back_info->access_token)){
        // 获取失败返会错误
        return array(
            'error' => -1,
            'msg' => $response
        );
    }
    $token = $back_info->access_token;
    $expires_in = $back_info->expires_in;
    // 将获取到的token缓存入redis
    // 设置过期时间, 这里为了安全,缓存时间比微信指定的时间少10秒
    $redis->SETEX($mem_key, $expires_in - 10, $token);
    $redis->close();
    // 返回获取到的token
    return array(
        'error' => 0,
        'token' => $token
    );
}

当我们需要在其他地方获取token的时候,使用方式如下:

// 引入获取函数
require_once('token_get.php');
// 获取token信息
$token_info = getToken();
if ($token_info['error'] != 0) {
    // 如果token获取错误,对错误进行处理
    exit("get token error\n" . $token_info['msg']);
}
// 获取到了token
$token = $token_info['token'];

调用一次后,我们就可以从后台看到redis缓存的数据了,
下一次就会读取缓存数据,而不会调用api了

更多微信开发教程,请访问http://www.weixin.com/




本文转载自:http://www.weixin.com/thread-1062-1-1.html

茄子酱
粉丝 0
博文 2
码字总数 0
作品 0
朝阳
私信 提问
node.js 微信开发 定时获取access_token

什么是access_token accesstoken是公众号的全局唯一票据,公众号调用各接口时都需使用accesstoken。开发者需要进行妥善保存。accesstoken的存储至少要保留512个字符空间。accesstoken的有效期...

一介布衣
2016/08/11
0
0
JAVA 多用户商城系统b2b2c-SSO单点登录之OAuth2.0登录认证

之前写了很多关于spring cloud的文章,需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六 ,今天我们对OAuth2.0的整合方式做一下笔记,首先我从...

明理萝
04/11
27
1
java B2B2C Springboot电子商务平台源码-SSO单点登录之OAuth2.0登录认证

之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 需要JAVA Spring Cloud大型企...

明理萝
04/03
24
2
(十)Java B2B2C多用户商城 springcloud架构-SSO单点登录之OAuth2.0登录认证(1)

之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一、oauth中的角色 client:...

park
01/25
0
0
微信程序开发系列教程(三)使用微信API给微信用户发文本消息

这个系列的第二篇教程,介绍的实际是被动方式给微信用户发文本消息,即微信用户关注您的公众号时,微信平台将这个关注事件通过一个HTTP post发送到您的微信消息服务器上。您对这个post请求做...

jerrywangsap
2018/08/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 年迈渔夫遭黑帮袭抢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享Elvis Presley的单曲《White Christmas》: 《White Christmas》- Elvis Presley 手机党少年们想听歌,请使劲...

小小编辑
今天
1K
17
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
12
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部