微信卡券获取api_ticket及缓存

时间:2018-03-12 00:05:31 类型:PHP
字号:    

api_ticket 是用于调用微信卡券JS API的临时票据,有效期为7200 秒,通过access_token 来获取。

开发者注意事项:

1.此用于卡券接口签名的api_ticket与步骤三中通过config接口注入权限验证配置使用的jsapi_ticket不同。

2.由于获取api_ticket 的api 调用次数非常有限,频繁刷新api_ticket 会导致api调用受限,影响自身业务,开发者需在自己的服务存储与更新api_ticket。


/*获取api_ticket begin
	api_ticket 是用于调用微信卡券JS API的临时票据,有效期为7200 秒,通过access_token 来获取。*/
	public function make_api_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=wx_card", $access_token);
			 $res = json_decode($this -> get_curl_contents($url), true);
			 if($res && isset($res["errmsg"])){
			 	//将获得的 ticket 存储到文件中
				$file_path = ROOT_PATH."/up/wx/wx_api_ticket.php";
				$myfile = fopen($file_path, "w") or die("不能写入文件");
				$expire_time = time() + $res['expires_in'];
				$txt = "<?php\n";
				$txt .= "	return array(\n";
				$txt .= "          'wx_api_ticket'=>'".$res['ticket']."',\n" ;
				$txt .= "          'expire_time'=>'".$expire_time."',\n" ;
				$txt .= "	);\n";
				$txt .= "?>\n";
				fwrite($myfile, $txt);
				fclose($myfile);
				return $res['ticket'];
			}
			else{
				$this->make_api_ticket();
			}
	}
	//获取api_ticket end
//curl获取请求文本内容
	public function get_curl_contents($url, $data = null) {
			$curl = curl_init(); //初始化
    		curl_setopt($curl, CURLOPT_URL, $url);//设置抓取的url 为 $requesturl
    		curl_setopt($curl, CURLOPT_HEADER, 0);//设置头文件的信息作为数据流输出
    		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    		//设置获取的信息以文件流的形式返回,而不是直接输出。
    		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //跳过证书验证
    		curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在
			if (!empty($data)){
		        curl_setopt($curl, CURLOPT_POST, 1);  //POST请求
		        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
		    } 
    		$data = curl_exec($curl);//执行命令
    		curl_close($curl);//关闭URL请求
		    return $data;
	}