在将access_token之前,还有两个重要参数需要知晓,这两个参数分别是appID和appsecret,这是在申请公众号的时候自动分配给公众号的,相当于公众号的身份标示,在很多接口中需要这两个参数,接下来在请求access_token的时候就需要这两个参数。

公众号接入成功之后,接下来就要实现相应的逻辑了。在使用微信公众号接口中,发现有许多请求都需要access_token。access_token是公众号的全局唯一凭证,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。并且每天调用获取access_token接口的上限是2000次。

总结以上说明,access_token需要做到以下两点:

1.因为access_token有2个小时的时效性,要有一个机制保证最长2个小时重新获取一次;

2.因为接口调用上限每天2000次,所以不能调用太频繁;

就此,这里采用的方案是这样的,定义一个默认启动的servlet,在init方法中启动一个Thread,这个进程中定义一个无限循环的方法,用来获取access_token,当获取成功后,此进程休眠7000秒,否则休眠3秒钟继续获取。流程图如下:

微信开发 access-token

function getAccess_token(){
$mp = M('mp')->where('is_use=1')->find();
var_dump($mp);



if(empty($mp)) return false;


$id=$mp['id'];//正在使用的公众号的主键
echo $id;




if(empty($mp['access_token']) || $mp['expire_time'] <time()){
$appid = $mp['appid'];
$appsecret = $mp['appsecret'];
echo $appid;
echo $appsecret;

$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;
include APP_PATH . 'LaneWeChat/lanewechat.php';
$arr= \LaneWeChat\Core\Curl::callWebServer($url,'','GET');


if(isset($arr['access_token'])){
$data['access_token']=$arr['access_token'];
$data['expire_time']=$arr['expires_in']+time()-200;


M('mp')->where("id=$id")->save($data);
return $arr['access_token'];
}else{
return false;
}
}else{
return $mp['access_token'];
}


相关文章: