Blogger Information
Blog 46
fans 1
comment 1
visits 30220
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
微信公众号开发之签名验证、获取access_token--2018年5月31日
笨鸟先飞
Original
1537 people have browsed it

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'];
	}
}

运行实例 »

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


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post