日韩精品欧美激情国产一区_中文无码精品一区二区三区在线_岛国毛片AV在线无码不卡_亞洲歐美日韓精品在線_使劲操好爽好粗视频在线播放_日韩一区欧美二区_八戒八戒网影院在线观看神马_亚洲怡红院在线色网_av无码不卡亚洲电影_国产麻豆媒体MDX

PHP獲得微信access_token及ticket并進行文件緩存

時間:2017-09-05 22:31:08 類型:PHP
字號:    

在進行微信二次開發(fā)時, 我們需要獲得access_token, 及ticket, 同時這些信息每天獲取次數(shù)的限制, 并且有效時間為7200秒, 為了避免重復獲取, 同時也為了訪問速度更快, 我們有必要獲取后, 進行文件緩存處理, 這樣既提升了訪問效率, 也避免了重復的獲取, 有些人不清楚該怎么來緩存文件, 這里專門寫了一個類, 方便大家的使用和學習, 可以直接調(diào)用


//微信類
class Wx{
	//測試賬號:
	private $AppID    = "wx533c0237aaa819c0";
	private $AppSecret = "5d8974aba181fabe8c03b2728f88da40";
	private $token = "zhuangzi";
	public $request;

	//獲取access_token, 如果過期,就重新獲得,沒過期,仍然使用原來的 
	public function get_access_token(){
		$file_path = ROOT_PATH."public/temp/wx_token.php";
		if(file_exists($file_path)){
			/*判斷簽名有沒有過期 begin*/
			$arr = include($file_path);
			$last_time = $arr["times"];
			$len = (time()-$last_time);
			if($len>=7200)
			{
				$this -> _make_access_token();
			}
			/*判斷簽名有沒有過期 end*/
		}
		else{
			$this -> _make_access_token();
		}
		
		$arr = include($file_path);
		return $arr["access_token"];
	}

	//將 獲得的 access_token 存儲到 文件中
	//access_token的有效期目前為2個小時,需定時刷新,重復獲取將導致上次獲取的access_token失效
	public function _make_access_token(){
			$AppID = $this->AppID;
			$AppSecret = $this->AppSecret;
			//通過curl方式獲取json數(shù)據(jù)
			$requesturl= "https://api.weixin.qq.com/cgi-bin/token?
			grant_type=client_credential&appid=$AppID&secret=$AppSecret";
    		$data = $this -> get_curl_contents($requesturl);
			$result = json_decode($data);

			//將獲得的 token 存儲到文件中
			$file_path = ROOT_PATH."public/temp/wx_token.php";
			$myfile = fopen($file_path, "w") or die("不能寫入文件"); 
			$txt = "<?php\n";
			$txt .= "	return array(\n";
			$txt .= "          'access_token'=>'".$result->access_token."',\n" ;
			$txt .= "          'times'  =>'".time()."'  \n" ;
			$txt .= "	);\n";
			$txt .= "?>\n";
			fwrite($myfile, $txt);
			fclose($myfile);
	}



	//獲取微信公眾號ticket
	public function get_jsapi_ticket() {
		$file_path = ROOT_PATH."public/temp/wx_ticket.php";
		if(file_exists($file_path)){
			/*判斷簽名有沒有過期 begin*/
			$arr = include($file_path);
			$last_time = $arr["times"];
			$len = (time()-$last_time);
			if($len>=7200)
			{
				$this -> _make_jsapi_ticket();
			}
			/*判斷簽名有沒有過期 end*/
		}
		else{
			$this -> _make_jsapi_ticket();
		}
		
		$arr = include($file_path);
		return $arr["wx_ticket"];
	}
	
	//將 獲得的 jsapi_ticket 存儲到 文件中
	//jsapi_ticket的有效期目前為2個小時,需定時刷新
	public function _make_jsapi_ticket(){
			 $access_token = $this -> get_access_token();
			 // echo $access_token; 
			 $url = sprintf("https://api.weixin.qq.com/cgi-bin/ticket/getticket?
			 	access_token=%s&type=jsapi", $access_token);
			 $res = $this -> get_curl_contents($url);
			 $res = json_decode($res, true);
			//將獲得的 ticket 存儲到文件中
			$file_path = ROOT_PATH."public/temp/wx_ticket.php";
			$myfile = fopen($file_path, "w") or die("不能寫入文件"); 
			$txt = "<?php\n";
			$txt .= "	return array(\n";
			$txt .= "          'wx_ticket'=>'".$res['ticket']."',\n" ;
			$txt .= "          'times'  =>'".time()."'  \n" ;
			$txt .= "	);\n";
			$txt .= "?>\n";
			fwrite($myfile, $txt);
			fclose($myfile);
	}

	//curl獲取請求文本內(nèi)容
	public function get_curl_contents($url, $method ='GET', $data = array()) {
		if($method == 'GET'){
			$curl = curl_init(); //初始化
    		curl_setopt($curl, CURLOPT_URL, $url);//設置抓取的url 為 $requesturl
    		curl_setopt($curl, CURLOPT_HEADER, 0);//設置頭文件的信息作為數(shù)據(jù)流輸出
    		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//設置獲取的信息以文件流的形式返回,而不是直接輸出。
    		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //跳過證書驗證
    		curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);  // 從證書中檢查SSL加密算法是否存在
    		$data = curl_exec($curl);//執(zhí)行命令
    		curl_close($curl);//關(guān)閉URL請求
		}
		return $data;
	}

		//生成簽名的隨機串, JSSDK會調(diào)用
		public function createNonceStr($length = 16) {
			$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
			$str   = "";
			for ($i = 0; $i < $length; $i++) {
				$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
			}
			return $str;
		}
}


微信獲得access_token類