<?php class share{ private $wxuser = ''; public $error = array(); function __construct($wxuser) { $this->wxuser = $wxuser; } public function getSgin($access_token) { //$wxuser = getCache('wx_'.$this->_mid.'_user'); $filename = PIGCMS_PATH.'upload/token/share_wxinfo.php'; //var_dump($wxuser);die; if (!file_exists($wxuser)) { if (empty($wxuser) || !isset($wxuser['appid'])) { $wxuser1 = array( 'appid' => $this->wxuser['appid'], 'appsecret' => $this->wxuser['appSecret'], 'share_ticket' => '', 'share_dated' => 0 ); $str="<?php return ".var_export($wxuser1,true).';'; file_put_contents($filename,$str); } } $wxuser = include $filename; //var_dump($wxuser);die; $now = time(); if($wxuser['share_ticket'] == '' || (file_exists($wxuser) && (time()-filemtime($wxuser) > 5000))){ //echo 1;die; $ticketData = $this->getTicket($access_token); if ($ticketData['errcode'] > 0) { $errorarr['ticket_error'] = array('errcode' => $ticketData['errcode'], 'errmsg' => $ticketData['errmsg']); } else { $wxuser1['share_ticket'] = $ticketData['ticket']; $wxuser1['share_dated'] = $now + $ticketData['expires_in']; file_put_contents($wxuser,$str); $str="<?php return ".var_export($wxuser1,true).';'; file_put_contents($filename,$str); //setCache('wx_'.$this->_mid.'_user', $wxuser); $ticket = $ticketData['ticket']; } } else { $ticket = $wxuser['share_ticket']; } $url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; //echo $url;die; $sign_data = $this->addSign($ticket, $url); return $sign_data; } public function addSign($ticket, $url) { $timestamp = time(); $nonceStr = rand(100000, 999999); $array = array( "noncestr" => $nonceStr, "jsapi_ticket" => $ticket, "timestamp" => $timestamp, "url" => $url, ); ksort($array); $signPars = ''; foreach ($array as $k => $v) { if ("" != $v && "sign" != $k) { if ($signPars == '') { $signPars .= $k . "=" . $v; } else { $signPars .= "&" . $k . "=" . $v; } } } $result = array( 'appId' => $this->wxuser['appid'], 'timestamp' => $timestamp, 'nonceStr' => $nonceStr, 'url' => $url, 'signature' => SHA1($signPars), ); return $result; } public function getToken() { //getToken $filename = PIGCMS_PATH.'/upload/token/accesstoken'; // echo $filename;die; if(!file_exists($filename) || (file_exists($filename) && (time()-filemtime($filename)) > 5000)){ //1.url地址 $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->wxuser['appid'].'&secret='.$this->wxuser['appSecret']; //2.判断是否为post请求 //3.发送请求 $content = $this->post($url); //4.处理返回值 //返回数据格式为json,php不可以直接操作json格式,需要json_decode转化一下 $content = json_decode($content); $access_token = $content->access_token; //把access_token保存到文件 file_put_contents($filename, $access_token); } //如果没有过期,那么就去读取缓存文件里的access_token else{ $access_token = file_get_contents($filename); } //把access_token返回 return $access_token; } public function post($url) { // 创建curl对象 $ch = curl_init (); // 配置这个对象 curl_setopt ($ch, CURLOPT_URL, $url); // 请求的URL地址 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在 curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // 返回接口的结果,而不是输出 // 发出请求 $data = curl_exec ( $ch ); if(curl_errno($ch)) { return 'error'.curl_error($ch); } // 关闭对象 curl_close ( $ch ); // 返回数据 return $data; } public function getTicket($token) { $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" . $token . "&type=jsapi"; return $this->https_request($url); } protected function https_request($url, $data = null,$noprocess=false) { $curl = curl_init(); curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0"); $header = array("Accept-Charset: utf-8"); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); //curl_setopt($curl, CURLOPT_SSLVERSION, 3); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); /* * *$header 必须是一个数组** */ curl_setopt($curl, CURLOPT_HEADER, FALSE); curl_setopt($curl, CURLINFO_HEADER_OUT, true); if (!empty($data)) { curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); if($noprocess) return $output; $errorno = curl_errno($curl); if ($errorno) { return array('curl' => false, 'errorno' => $errorno); } else { $res = json_decode($output, 1); if ($res['errcode']) { return array('errcode' => $res['errcode'], 'errmsg' => $res['errmsg']); } else { return $res; } } curl_close($curl); } }