access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
php中有个 “curl” 扩展工具,通过它可以发起模拟 http/https 请求,这里获取access_token 正是用这个扩展工具来获取。开发文档中有明确说明公众号和小程序均可以使用AppID和AppSecret调用本接口来获取access_token。因此在获取access_token钱先要拿到AppID和AppSecret,这两个参数都可以在公众平台后台中拿到。

拿到这两个参数后就可以获取access_token了:
private function _ch($url, $type='get', $res='json', $arr='')
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if ($type == 'post') {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $arr);
}
$cnt = curl_exec($ch);
if (curl_errno($ch)) {
return;
}
curl_close($ch);
if ($res == 'json') {
return json_decode($cnt, true);
}
return $cnt;
}
//获取access_token
//把下面的 *** 换自己对应的 appid 和 appsecret
private function _getAT()
{
$appid = '***';
$appsecret = '***';
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
$arr = $this->_ch($url);
if (!$arr) {
return;
}
return $arr['access_token'];
}
//因为每天调用接口获取 access_token 有次数限制,
//所以第一次获取 access_token 后最好可以把存起来
//尽量避免每次都调用接口获取 access_token
public function getWxAT()
{
if (Session::get('access_token') && Session::get('expire_time')>time() ) {
return Session::get('access_token');
}else{
$accessToken = $this->_getAT();
Session::set('access_token',$accessToken);
Session::set('expire_time',time()+7200);
return $accessToken;
}
}如果在获取 access_token 时出现 40164 错误,则需要把 invalid ip 后面的 ip 地址加入公众平台后台开发基本配置里的白名单里。

