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保存,但是并不行,都不对,也不知道渔夫是怎讲的明明是错的还当对的讲,坑呀!

php微信开发-自动刷新accesstoken

上一篇:C#关于调用微信接口的代码


下一篇:如何revert一个merged branch上所有的改动