《PHP實(shí)戰(zhàn):微信開發(fā)之獲取JSAPI TICKET》要點(diǎn):
本文介紹了PHP實(shí)戰(zhàn):微信開發(fā)之獲取JSAPI TICKET,希望對您有用。如果有疑問,可以聯(lián)系我們。
一、獲取流程PHP學(xué)習(xí)
1、獲取 access_tokenPHP學(xué)習(xí)
2、通過access_token換取 jsapi_ticketPHP學(xué)習(xí)
3、簽名算法PHP學(xué)習(xí)
簽名生成規(guī)則如下:參與簽名的字段包括noncestr(隨機(jī)字符串), 有效的jsapi_ticket, timestamp(時間戳), url(當(dāng)前網(wǎng)頁的URL,不包含#及其后面部分) .對所有待簽名參數(shù)按照字段名的ASCII 碼從小到大排序(字典序)后,使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串string1.這里需要注意的是所有參數(shù)名均為小寫字符.對string1作sha1加密,字段名和字段值都采用原始值,不進(jìn)行URL 轉(zhuǎn)義.PHP學(xué)習(xí)
二、具體實(shí)現(xiàn)方式PHP學(xué)習(xí)
1、獲取access_tokenPHP學(xué)習(xí)
/** * [getAccessToken description] 獲取access_token * @return [type] [description] */private function getAccessToken() { $data = $this->getFile($this->accessTokenFile); if(time() - $data['time'] > 0){ $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->appID}&secret={$this->appsecret}"; $re = $this->httpGet($url); $access_token = $re['access_token']; if(isset($access_token)){ $data['access_token'] = $access_token; $data['time'] = time() + 7200; $this->setFile($this->accessTokenFile,json_encode($data)); } }else{ $access_token = $data['access_token']; } return $access_token; }
access_token 的有效時間是7200s,故可以采用文件存儲的方法進(jìn)行保存,避免多次請求;PHP學(xué)習(xí)
2、獲取jsapi_ticketPHP學(xué)習(xí)
/** * [getJsapiTicket description] 獲取jsapi_ticket * @return [type] [description] */private function getJsapiTicket() { $access_token = $this->getAccessToken(); $jsapi_ticket = $this->getFile($this->jsapiTicketFile); if(time() - $jsapi_ticket['time'] > 0) { $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$access_token}&type=jsapi"; $re = $this->httpGet($url); $this->preArr($re); $jsapi_ticket = $re['ticket']; if(isset($jsapi_ticket)){ $data['jsapi_ticket'] = $jsapi_ticket; $data['time'] = time() + 7200; $this->setFile($this->jsapiTicketFile, json_encode($data)); } }else{ $jsapi_ticket = $jsapi_ticket['jsapi_ticket']; } return $jsapi_ticket; }
通過access_token進(jìn)行交換,得到j(luò)sapi_ticket,有效期也是7200s;PHP學(xué)習(xí)
3、生成簽名PHP學(xué)習(xí)
/** * [getSignpackage description] 獲取簽名 * @return [type] [description] */public function getSignpackage(){ $jsapi_ticket = $this->getJsapiTicket(); // 注意 URL 一定要動態(tài)獲取,不能 hardcode. $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $noncestr = $this->createNonceStr(); $timestamp = time(); $string1 = "jsapi_ticket={$jsapi_ticket}&noncestr={$noncestr}×tamp={$timestamp}&url={$url}"; $signature = sha1($string1); $signPackage = array( 'appId' => $this->appID, 'nonceStr' => $noncestr, 'timestamp' => $timestamp, 'signature' => $signature, ); return $signPackage; }
簽名算法PHP學(xué)習(xí)
使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串string1:PHP學(xué)習(xí)
對string1進(jìn)行sha1簽名,得到signature:PHP學(xué)習(xí)
注意事項(xiàng):PHP學(xué)習(xí)
1.簽名用的noncestr和timestamp必須與wx.config中的nonceStr和timestamp相同.PHP學(xué)習(xí)
2.簽名用的url必須是調(diào)用JS接口頁面的完整URL.PHP學(xué)習(xí)
3.出于安全考慮,開發(fā)者必須在服務(wù)器端實(shí)現(xiàn)簽名的邏輯.PHP學(xué)習(xí)
?詳情參考:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183PHP學(xué)習(xí)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持維易PHP.PHP學(xué)習(xí)
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/518.html