1. 程式人生 > >微信中控方法(getAccessToken、getJsapiTicket)。可繼續優化,redis作為中間層,入庫同時加入redis,要使用時先查詢redis。

微信中控方法(getAccessToken、getJsapiTicket)。可繼續優化,redis作為中間層,入庫同時加入redis,要使用時先查詢redis。

IE 數據 names str namespace extend family ext nts

<?php /** * 微信父類控制器 * @author Songle * */ namespace Home\Controller;
use Think\Controller;
class Wechat2Controller extends Controller { private $last_time = null; private $appid = null; private $appsecret = null; public function __construct() { parent::__construct();

} /** * 添加微信分享接口 * 第一步:access token */ public function getAccessToken() { $appid = wx55f7980035ddbc37; //獲取用戶唯一憑證 $secret = b3a96346c6a10b97dfdc134d5f0dd506; //用戶唯一憑證密鑰 $time = time() + 7000; //當前時間+2小時等於過期時間
// 如果有未過期token $map[expires] = array(gt, time());
$token = D(access_token)->order(id desc)->where($map)->getField(access_token); if ($token) { return $token; } else {
$res = file_get_contents(https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid= . $appid . &secret= . $secret);
$res = json_decode($res, true); $token = $res[access_token]; $model = D(access_token); //把獲取的token存儲到數據庫中 if ($token) { $data = array( access_token => $token, expires_time => $time, ); $data = $model->add($data); //把獲得的token存儲到數據庫中 }
return $token; }
} /** * 添加微信分享接口 * 第二步:用第一步拿到的access_token 采用http GET方式請求獲得jsapi_ticket */ public function getJsapiTicket() { $time = time() + 7000; //當前時間+2小時等於過期時間 $map[ticket_expires_time] = array(gt, time()); // 庫裏如果有未過期的 ticket $res = D(access_token)->where($map)->field(ticket)->find(); if ($res) { $ticket = $res[ticket]; $result[result] = $ticket; return $result; } else { $token = $this->getAccessToken(); $res = file_get_contents("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" . $token . "&type=jsapi"); $res = json_decode($res, true); $ticket = $res[ticket]; // ticket不能頻繁的訪問接口來獲取,在每次獲取後,我們把它保存到數據庫中。 $model = D(access_token); //把獲取的ticket存儲到數據庫中 if ($ticket) { $data = array( access_token => $token, expires_time => $time, ticket => $ticket, ticket_expires_time => $time, ); $data = $model->where(array(access_token=>$token))->save($data); //把獲得的token存儲到數據庫中 } $result[result] = $ticket; //沒查詢到符合條件的 return $result; } }
}

微信中控方法(getAccessToken、getJsapiTicket)。可繼續優化,redis作為中間層,入庫同時加入redis,要使用時先查詢redis。