- 一、微信接口文档
- 二、access_token 的存储与更新
- 三、PHP调微信小程序接口生成access_token
- 1、代码
- 2、打印
一、微信接口文档
- 导航:微信官方文档 --> 服务端 --> 接口调用凭证 --> getAccessToken
具体调用请前去官方文档查看
二、access_token 的存储与更新
接口文档里写了,请仔细阅读接口文档
-
access_token
的存储至少要保留512
个字符空间; -
access_token
的有效期目前为2 个小时
,需定时刷新,重复获取将导致上次获取的access_token
失效; - 建议开发者使用中控服务器统一获取和刷新
access_token
,其他业务逻辑服务器所使用的access_token
均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致access_token
覆盖而影响业务; -
access_token
的有效期通过返回的expires_in
来传达,目前是7200秒
之内的值,中控服务器需要根据这个有效时间提前去刷新。在刷新过程中,中控服务器可对外继续输出的老access_token
,此时公众平台后台会保证在5分钟内
,新老access_token
都可用,这保证了第三方业务的平滑过渡; -
access_token
的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新access_token
的接口,这样便于业务服务器在API调用获知access_token
已超时的情况下,可以触发access_token
的刷新流程。
详情可参考微信公众平台文档 《获取access_token》
三、PHP调微信小程序接口生成access_token
1、代码
public function test() {
$accessToken = self::getAccessToken();
echo "access_token is {$accessToken}";
}
public function getAccessToken() {
$url = 'https://api.weixin.qq.com/cgi-bin/token';
$data = [
'grant_type' => 'client_credential', //填写 client_credential
'appid' => 'wx523***********', //小程序唯一凭证:AppID 16位16进制(字母小写)
'secret' => 'c4ca4238a0************9a6f75849b' //小程序唯一凭证:AppSecret 32位16进制(字母小写) => 类似于md5()
];
$apiUrl = self::getUrl($url, $data);
$result = json_decode(self::curlGet($apiUrl),true);
$accessToken = isset($result['access_token']) ? $result['access_token'] : '';
if (!$accessToken) {
die(json_encode($result, JSON_UNESCAPED_UNICODE)); //输出错误
}
return $accessToken;
}
//url生成器
public function getUrl($apiUrl, $param = []){
$param = http_build_query($param);
return $apiUrl . '?' . $param;
}
public function curlGet($url, $header = []) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPGET, true);
if ($header) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
}
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置超时时间:30s
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //忽略ssl检测
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //1 或 TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。-
curl_setopt($ch, CURLINFO_HEADER_OUT, true); //TRUE 时追踪句柄的请求字符串,从 PHP 5.1.3 开始可用。这个很关键,就是允许你查看请求header
$output = curl_exec($ch);
if (!$output) {
// echo "request $url fail:", (array)curl_error($ch); //记录日志
}
curl_close($ch);
// echo "request $url success:" . json_encode(array($url, $header, $output), true); //记录日志
return $output;
}
2、打印
- 由于
appid
,secret
不是真实有效的,所以打印如下
{"errcode":40013,"errmsg":"invalid appid rid: 609deb67-3288bef4-69fe5dee"}
- 正常返回
{"access_token":"ACCESS_TOKEN","expires_in":7200}