php微信开发-自动刷新accesstoken

用了如下2个方法来实现

 1 <?php
 2 public function http_curl($url,$type=‘get‘,$res=‘json‘,$arr=‘‘)//接口调用函数
 3   {
 4       /*
 5       *$cur 接口url string
 6       *$type 请求类型 string
 7       $res   返回数据类型 string
 8       $arr  post请求参数 string
 9       */
10        //1.初始化curl
11        $ch=curl_init();
12        //2.设置curl的参数
13       // curl_setopt($ch, CURLOPT_URL, $url);
14       // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
15
16       curl_setopt_array(
17         $ch,
18         array(
19         CURLOPT_URL => $url,
20         CURLOPT_REFERER => $url,
21         CURLOPT_AUTOREFERER => true,
22         CURLOPT_RETURNTRANSFER => true,
23         CURLOPT_SSL_VERIFYPEER => false,
24         CURLOPT_SSL_VERIFYHOST => false,
25         CURLOPT_CONNECTTIMEOUT => 1,
26         CURLOPT_TIMEOUT => 30,
27         )
28       );
29
30       if($type==‘post‘){
31          curl_setopt($ch, CURLOPT_POST, 1);
32          curl_setopt($ch, CURLOPT_POSTFIELDS, $arr);
33     //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//测试
34        // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//测试
35
36       }
37       //3.采集
38       $output=curl_exec($ch);
39       //4.关闭
40       if($res==‘json‘){
41         if(curl_error($ch)){
42           return curl_error($ch);
43           curl_close($ch);
44         }else{
45             return json_decode($output,true);
46         }
47       }
48   }
49   // public function getWxAccessToken()//返回access_token *session解决办法 ,存mysql或memcache都可以
50   // {
51   //     //将access_token 存在session/cookie中
52   //     if(isset($_SESSION[‘access_token‘])&&isset($_SESSION[‘expire_time‘])){
53   //       if($_SESSION[‘access_token‘]&&$_SESSION[‘expire_time‘]>time()){
54   //         //如果access_token在session中并没有过期
55   //         return $_SESSION[‘access_token‘];
56   //       }
57   //     }
58   //     else{
59   //       //如果access_token不存在或者已经过期,重新取access_token
60   //       $appid=‘wx4e91a0e959b399a5‘;
61   //       $appsecret=‘46cf302c8ff3585026682f6ae603da94‘;
62   //       $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
63   //       $res=$this->http_curl($url,‘get‘,‘json‘);
64   //       $access_token=$res[‘access_token‘];
65   //       $_SESSION[‘access_token‘]=$access_token;
66   //       var_dump($_SESSION[‘access_token‘]);
67   //       $_SESSION[‘expire_time‘]=time()+7000;
68   //       return $access_token;
69   //     }
70   // }
71   function getWxAccessToken()// 新的返回access_token *session解决办法 ,存mysql或memcache都可以
72   {   $dir = __DIR__;
73       $tokenFile = $dir."\access_token.txt";
74       //缓存文件名生成的目录如下:E:\phpStudy\WWW\web1\wexin\application\index\controller\access_token.txt
75       echo $tokenFile;
76       $data = json_decode(file_get_contents($tokenFile));
77       if ($data->expire_time < time() or !$data->expire_time) {
78       $appid = "wx4e91a0e959b399a5";
79       $appsecret = "46cf302c8ff3585026682f6ae603da94";
80       $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
81       $res = $this->http_curl($url,‘get‘,‘json‘);
82       $access_token = $res[‘access_token‘];
83       if($access_token) {
84       $data->expire_time = time() + 7000;
85       $data->access_token= $access_token;
86       $fp = fopen($tokenFile, "w");
87       fwrite($fp, json_encode($data));
88       fclose($fp);
89       }
90       } else {
91       $access_token = $data->access_token;
92       }
93       return $access_token;
94   }  

采用文件的形式保存在了服务器,以前用的session保存,但是并不行,都不对,也不知道渔夫是怎讲的明明是错的还当对的讲,坑呀!

时间: 2024-10-09 21:33:14

php微信开发-自动刷新accesstoken的相关文章

微信开发定时刷新accessToken

根据appid和appsecret可以调用接口得到通用的accessToken,有效时间是2个小时,重复调用接口上次的值将失效,每次业务逻辑都调用接口会造成服务不稳定,所以需要一个方法每隔两个小时自动刷新accessToken.可以定义一个全局的map实现缓存,时间到了自动清除缓存中的数据 1 /** 2 * 获取AccessToken并缓存 3 */ 4 public static String getAccessToken(String appid, String appsecret) {

Gulp+browser-sync打造前端开发自动刷新

以下是gulpfile.js: var gulp = require('gulp'),     config = require('./config'),     cleanCss = require('gulp-clean-css'),     jshint = require('gulp-jshint'),     uglify = require('gulp-uglify'),     rename = require('gulp-rename'),     concat = requir

使用delphi+intraweb进行微信开发5—准备实现微信API,先从获取AccessToken开始

在前4讲中我们已经使iw开发的应用成功和微信进行了对接,再接下来的章节中我们开始逐一尝试和实现微信的各个API,开始前先来点准备工作. 首先需要明确的是,微信的API都是通过https调用实现的,分为post方法调用和get方法调用.不需要上传数据的采用get方法(例如获取AccessToken),而需要向微信服务器提交数据的采用post方法(例如创建菜单). 微信方法调用均需传递AccessToken(URL参数方式),这个AccessToken不是我们微信接入时使用的Token,这个Acce

推荐开发工具系列之--PyF5(自动刷新)

昨天介绍的自动刷新的软件 推荐开发工具系列之--LinrF5(自动刷新)已经是很靠谱了:今天再介绍一款软件,同样靠谱:萝卜白菜各有所爱,看喜欢那种就用那种: 首先下载软件:http://pan.baidu.com/s/1bnttBTt 解压后双击f5.exe即可使用:绿色不用安装:然后复制项目的路径:按下面的截图输入后点击项目: 接着改文件看看效果: 支持Firefox,IE,各种手机浏览器哦,一个F5,所有客户端环境都能搞定,不需要像livereload一样装插件,F5自身就能支持带有服务器技

推荐开发工具系列之--LinrF5(自动刷新)

最近有点事:略忙:以至于上篇文章说好的明天一直到了今天才到: //*******************************分割是会呼吸的痛****************************** 作为一个程序员:尤其是作为一个网站开发程序员:如果再更尤其点作为一个前端程序员:想必有一套动作做的是相当的多:那就是不断的ctrl+s -> alt+tab -> F5 (就在打F5这2个字的时候竟然随手按了下F5,码的这些字瞬间就没了,还好ueditor足够强大自动保存了草稿可以恢复,真诚

C#微信开发之旅(三):AccessToken获取及全局管理

由于AccessToken有效期为2小时,并且接口调用有数量限制,所以开始时选择用WCF做了全局管理(项目中要到AccessToken的地方太多了,支付相关.生成二维码.获取用户信息.菜单操作等等) 下面是AccessToken全局管理的单例类,(原理:通过微信接口获取AccessToken,存储在内存中,当其他项目调用时,会判断是否过期,过期去拿新Token再返回): 1 /// <summary> 2 /// AccessToken类,公众号通过此token 获取相关信息 (单例类) 3

微信开发-点击链接自动添加关注

这个功能和微信提供的接口无关,只牵扯到微信的图文消息的另一种应用. 1.登录进入需要被关注的微信公众号,进入管理->素材管理,新增一条单图文消息,标题为点击下方链接关注XXX,图片可以是一张白色的图片,正文可以是此微信公众号的一些简介. 2.保存后回到图文消息列表,打开刚才保存的图文消息,复制打开窗口的URL地址,这个地址就是在微信上点击以后跳转到图文消息,在图文消息第二行有一行蓝色字,点击就会弹出关注提示 微信开发-点击链接自动添加关注,布布扣,bubuko.com

java微信开发API解析(六)-综合运用(消息处理、自定义菜单响应处理、用户自动分组处理;包含源码)

java微信开发API解析(六) 全局说明 * 详细说明请参考前两篇文章. 本文说明 * 本文主要是对前面学习的知识进行综合整合. * 我们对需要的bean.工具类.xml.file进行必要的包装. * 我们构建一个可以直接使用的Java微信应用. * 文后包含该部分效果的测试微信公众号 * 文后包含构建好的源码供下载 bean的构建 public class Access_token,获取Access_token对应的bean. private String access_token; pri

前端开发 ---浏览器自动刷新

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000; min-height: 13.0px } span.s1 { } span.Apple-tab-span { white-space: pre } 1.livereload (1