php获取微信signature,微信公众号实战:生成signature、获取access_token并缓存--20180603-0:40发布(0531作业)...

主题:生成signature

获取access_token并缓存

效果图:

生成signature并验证通过后

1cfde39d8cbc517f761865cf3995f8cb.png

获取的access_token

b78fd05d4b971897bbe7e8e4cb5b24cf.png

access_token缓存文件

534d24e2000d1c1a9a8a4f7af0875505.png

模型(model/Wechat.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)实例

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;

}

}

运行实例 »

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值