Correction status:Uncorrected
Teacher's comments:
Weixin.php_controller:
<?php namespace app\index\controller; use think\Controller; class Weixin extends Controller { //构造器 public function __construct() { parent::__construct(); $this->model = model('Weixin'); } //微信推送事件 public function index() { // 校验数据来源 $valid = $this->model->valid(); if(!$valid){ exit('signature error'); } exit(input('get.echostr')); } //获取access_token public function get_access_token() { echo $this->model->access_token(); } }
点击 "运行实例" 按钮查看在线实例
Weixin.php_model:
<?php namespace app\index\model; use think\Model; use think\facade\Cache; class Weixin extends Model { //签名校验 public function valid() { $signature = input('get.signature'); $timestamp = input('get.timestamp'); $nonce = input('get.nonce'); $echostr = input('gey.echostr'); $token = config('app.weixintoken'); // file_put_contents('filename', $data)第一个参数:保存文件的URL,第二个参数:保存的数据 $tmpArr = array($timestamp,$nonce,$token); sort($tmpArr,SORT_STRING); $tmpStr = implode($tmpArr); $sign = sha1($tmpStr); if($sign != $signature){ return falae; } return true; } //获取access_token public function access_token($iscache=true)//参数默认缓存 { $cache_key = 'access_token'; //如果不缓存就删除 if(!$iscache){ Cache::rm($cache_key); } $access_token = Cache::get($cache_key);//获取缓存的数据 if($access_token && $iscache){ return $access_token; } $appID = config('app.appID'); $appsecret = config('app.appsecret'); $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appID&secret=$appsecret"; $res = http_Get($url);//获取微信那边的json数据 $res = json_decode($res,true);//解析微信那边发送过来的json数据 //如果解析出来没有access_token就返回false if(!isset($res['access_token'])){ return false; } Cache::set($cache_key,$res['access_token'],$res['expires_in']-300);//缓存 (key , 值,缓存时间)默认是永久 return $res['access_token']; } }
点击 "运行实例" 按钮查看在线实例