登录  /  注册
博主信息
博文 100
粉丝 8
评论 2
访问量 146678
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
微信公众号实战:生成signature、获取access_token并缓存--20180603-0:40发布(0531作业)
lilove的博客
原创
1739人浏览过

主题:

  1. 生成signature

  2. 获取access_token并缓存

效果图:

生成signature并验证通过后

token配置成功.png

获取的access_token

QQ截图20180603003426.png

access_token缓存文件

QQ截图20180603003503.png

模型(model/Wechat.php)实例

<?php
namespace app\index\model;
use think\Model;
use think\facade\Cache;

class Wechat extends Model
{
	// 微信推送事件
    public function check() {
    	// 将微信服务器的请求数据分别存为变量
    	$signature = input('get.signature');
    	$timestamp = input('get.timestamp');
    	$nonce = input('get.nonce');
    	$echostr = input('get.echostr');
    	// 在框架配置文件中设置微信的token,并读取
    	$token = config('app.wechattoken');

    	// 将获取的数据存到一个数组中
		$tmpArr = array($timestamp, $nonce, $token);
		// 排序数据数组
		sort($tmpArr, SORT_STRING);
		// 判断加密后的字符串与微信请求中的signature是否一致
		if(sha1(implode($tmpArr)) != $signature) {
			exit('signature error');
		}
		exit($echostr);
	}

	// 获取access_token
	public function access_token($iscache = true) {
		// 如果某个参数使用较多,放到一个变量中,方便更改
		$cache_key = 'access_token';
		// 默认不用删除缓存
		if(!$iscache) {
			Cache::rm($cache_key);
		}
		// 获取缓存中的access_token值
		$access_token = Cache::get($cache_key);
		if($access_token && $iscache) {
			return $access_token;
		}
		// 将appid和appsecret(微信公众号中获取)的值保存至config/app.php中,并调取
		$appid = config('app.appid');
		$appsecret = config('app.appsecret');
		// 拼接url
		$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;
		// 获取access_token的值,返回一个json数据
		$res = http_Get($url);
		// 将json数据转换成数组
		$res = json_decode($res, true);
		// 如果没有拿到access_token的值,返回false
		if(!isset($res['access_token'])) {
			return false;
		}
		// 拿到数据后进行缓存,使用facade中的Cache
		Cache::set($cache_key, $res[$cache_key], $res['expires_in']-300);
		return $res[$cache_key];
	}
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

控制器(controller/Wechat.php)实例

<?php
namespace app\index\controller;
use think\Controller;

class Wechat extends Controller
{
	// 微信推送事件
	public function __construct() {
		parent::__construct();
		$this->model = model('Wechat');
	}
	public function index() {
		$valid = $this->model->check();
		// 判断模型中返回值
		if(!$valid) {
			exit('signature error');
		}
		exit(input('get.echostr'));
	}

	// 获取access_token
	public function get_access_token() {
		$access_token = $this->model->access_token();
		return $access_token;
	}
}

运行实例 »

点击 "运行实例" 按钮查看在线实例


批改状态:未批改

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学