微信接口调用
1.有appid,appsecret和微信調(diào)用網(wǎng)址URL
2.php先通過appid和appsecret向獲取token網(wǎng)址請(qǐng)求token
3.用token向獲取ticket網(wǎng)址請(qǐng)求ticket
4.將已獲得的數(shù)據(jù)照微信規(guī)范處理后發(fā)送到URL,獲取signpackage
5.由于token和ticket有請(qǐng)求次數(shù)限制和過期時(shí)間,所以應(yīng)在本地緩存這兩個(gè)數(shù)據(jù),過期后再重新獲取
getSign.php
<?php header("Access-Control-Allow-Origin: *"); require_once "jssdk.php"; $url = $_POST['url']; $jssdk = new JSSDK("XXX", "XXX",$url); $signPackage = $jssdk->GetSignPackage(); $signPackage=json_encode($signPackage); echo $signPackage; ?>jssdk.php <?php class JSSDK {private $appId;private $appSecret;private $url;public function __construct($appId, $appSecret ,$url) {$this->appId = $appId;$this->appSecret = $appSecret;$this->url = $url;}public function getSignPackage() {$jsapiTicket = $this->getJsApiTicket();// 注意 URL 一定要?jiǎng)討B(tài)獲取,不能 hardcode.if(!$this->url){$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";$this->url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";}$timestamp = time();$nonceStr = $this->createNonceStr();// 這里參數(shù)的順序要按照 key 值 ASCII 碼升序排序$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=".$this->url;$signature = sha1($string);$signPackage = array("appId" => $this->appId,"nonceStr" => $nonceStr,"timestamp" => $timestamp, // "url" => $this->url,"signature" => $signature, // "rawString" => $string);return $signPackage; }private 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;}private function getJsApiTicket() {// jsapi_ticket 應(yīng)該全局存儲(chǔ)與更新,以下代碼以寫入到文件中做示例$data = json_decode($this->get_php_file("jsapi_ticket.php"));if ($data->expire_time < time()) {$accessToken = $this->getAccessToken();// 如果是企業(yè)號(hào)用以下 URL 獲取 ticket// $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";$res = json_decode($this->httpGet($url));$ticket = $res->ticket;if ($ticket) {$data->expire_time = time() + 7000;$data->jsapi_ticket = $ticket;$this->set_php_file("jsapi_ticket.php", json_encode($data));}} else {$ticket = $data->jsapi_ticket;}return $ticket;}private function getAccessToken() {// access_token 應(yīng)該全局存儲(chǔ)與更新,以下代碼以寫入到文件中做示例$data = json_decode($this->get_php_file("access_token.php"));if ($data->expire_time < time()) {// 如果是企業(yè)號(hào)用以下URL獲取access_token// $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";$res = json_decode($this->httpGet($url));$access_token = $res->access_token; // echo $access_token."<br/>";if ($access_token) {$data->expire_time = time() + 7000;$data->access_token = $access_token;$this->set_php_file("access_token.php", json_encode($data));}} else {$access_token = $data->access_token;}return $access_token;}private function httpGet($url) {$curl = curl_init();curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_TIMEOUT, 500);// 為保證第三方服務(wù)器與微信服務(wù)器之間數(shù)據(jù)傳輸?shù)陌踩?#xff0c;所有微信接口采用https方式調(diào)用,必須使用下面2行代碼打開ssl安全校驗(yàn)。// 如果在部署過程中代碼在此處驗(yàn)證失敗,請(qǐng)到 http://curl.haxx.se/ca/cacert.pem 下載新的證書判別文件。curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);curl_setopt($curl, CURLOPT_URL, $url);$res = curl_exec($curl);curl_close($curl);return $res;}private function get_php_file($filename) {echo trim(substr(file_get_contents($filename), 15));return trim(substr(file_get_contents($filename), 15));}private function set_php_file($filename, $content) {echo "writing in";$fp = fopen($filename, "w");fwrite($fp, "<?php exit();?>" . $content);fclose($fp);} }
access_token.php <?php exit();?> {"access_token":"","expire_time":0}
jsapi_ticket.php <?php exit();?> {"jsapi_ticket":"","expire_time":0}
總結(jié)
- 上一篇: APP设计阅读:6本交互设计殿堂级的书籍
- 下一篇: 某短视频的X-Gorgon,X-Lado