💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # 获取access_token 有了凭证我们主动模式才能发 access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用它。 access_token的存储至少要保留512个字符空间。 access_token的**有效期目前为2个小时**。 access_token的每天请求的次数为2000次。 ![](https://box.kancloud.cn/4946a47082e4e4918defbf7c206a241d_677x241.png) **根据官方所提的要求,那么我们在实现工作,一定要缓存起来我们access_token。** 缓存的方案 数据库、redis、mongodb、memcache、文件缓存 **主动模式** ![](https://box.kancloud.cn/ebc0c4734bfd5dca9a53ebde35f1c58e_1105x293.png) https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183 ![](https://box.kancloud.cn/5fd499692cee1758e4b03c7a0abba7ad_712x512.png) 我们自己执行下这个代码 ~~~ <?php /** * 主动模式 */ $wx = new Wechat(); echo $wx->getAccessToken(); class Wechat { // appid const APPID = 'wx77c58459abaf8ad6'; // appsecret const SECRET = '8074c29bdfa71fdbe9debc19060275dc'; /** * 得到access_token access_token是全局唯一有效的 * @return [type] [description] */ public function getAccessToken(){ # 缓存的文件 $cacheFile = self::APPID.'_cache.log'; // 判断文件是否存在,要是不存在则表示没有缓存 // 存在判断修改的时间是否过了有效期,如果没有过,则不进行url网络请求 if (is_file($cacheFile) && filemtime($cacheFile)+7000 > time()) { echo '缓存了<hr>'; return file_get_contents($cacheFile); } // 第1次或缓存过期 $surl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s'; $url = sprintf($surl,self::APPID,self::SECRET); // 发起GET请求 http_request是我们封装的函数 $json = $this->http_request($url); // 把json转为数组 $arr = json_decode($json,true); $access_token = $arr['access_token']; // 写缓存 file_put_contents($cacheFile,$access_token); // 返回数据 echo '2222<hr>'; return $access_token; } /** * 发起请求 * @param strin $url url地址 * @param string|array $ret 请求体 * @param string $file 上传的文件绝对地址 * @return [type] [description] */ private function http_request($url,$ret='',$file=''){ if (!empty($file)) { // 有文件上传 # php5.5之前 '@'.$file;就可以进地文件上传 # $ret['pic'] = '@'.$file; # php5.6之后用此方法 $ret['media'] = new CURLFile($file); } // 初始化 $ch = curl_init(); // 相关设置 # 设置请求的URL地址 curl_setopt($ch,CURLOPT_URL,$url); # 请求头关闭 curl_setopt($ch,CURLOPT_HEADER,0); # 请求的得到的结果不直接输出,而是以字符串结果返回 必写 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); # 设置请求的超时时间 单位秒 curl_setopt($ch,CURLOPT_TIMEOUT,30); # 设置浏览器型号 curl_setopt($ch,CURLOPT_USERAGENT,'MSIE001'); # 证书不检查 curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0); # 设置为post请求 if($ret){ # 如果 $ret不为假则是post提交 # 开启post请求 curl_setopt($ch,CURLOPT_POST,1); # post请求的数据 curl_setopt($ch,CURLOPT_POSTFIELDS,$ret); } // 发起请求 $data = curl_exec($ch); // 有没有发生异常 if(curl_errno($ch) > 0){ // 把错误发送给客户端 echo curl_error($ch); $data = ''; } // 关闭请求 curl_close($ch); return $data; } } ~~~