官术网_书友最值得收藏!

4.2 基礎支持

4.2.1 申請測試賬號

在第1章中提到微信公眾號有訂閱號和服務號之分,服務號審核較為嚴格,但提供的接口更為豐富,開發者可能手頭上并沒有服務號可以使用,或者直接拿服務號來做開發測試頁較為不妥,會影響訂閱者的體驗。微信公眾平臺提供了測試賬號供開發者使用,讓開發者能盡情體驗各種接口的實際效果。

在“開發者中心”→“配置項”頁面下的“開發者工具”部分單擊“接口測試申請系統”的鏈接,打開申請頁面,如圖4-1所示。

圖4-1

可以分別選擇微信賬號登錄或手機賬號登錄。這里我們選擇用自己的微信賬號掃描二維碼的方式登錄,如圖4-2所示。

圖4-2

測試賬號有一年的使用期,這個日期足夠我們開發使用了。紅框中的appID是每個公眾號唯一的ID,appsecret是對應的密鑰,默認只有已經成為開發者的服務號才有,有了它我們才能進行一些接口訪問,這個在后面會介紹。按照第3章介紹的方式配置好接口信息,掃描測試號二維碼,關注我們的測試號,就可以正常使用微信公眾號提供的各種接口了。

4.2.2 獲取access_token

access_token在微信開發中有著非常重要的作用,它相當于一把鑰匙,只有獲得這個值,才能獲得其他接口的使用權限。access_token是公眾號的全局唯一票據,公眾號調用各接口都需要使用access_token,有效期是7 200秒,重復獲取將導致覆蓋上次獲取的值。由于獲取access_token的API調用次數有限,建議全局存儲并更新access_token。

公眾號可以使用AppID和AppSecret調用“獲取access_token”接口來獲取access_token。AppID和AppSecret可在“微信公眾平臺-開發-基本配置”頁中獲得(需要已經成為開發者,且賬號沒有異常)。為了提高公眾平臺開發者接口調用的安全性,避免開發者ID和密碼泄露后給賬號造成損失,微信官方對調用“獲取access_token”接口增加了IP白名單校驗:只有將IP地址設置為公眾號的IP白名單才能成功調用該接口。

1.接口調用請求說明

請用GET請求如下https地址:

https請求方式:GET

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

參數說明如表4-2所示。

表4-2 參數說明

這個接口的調用也很簡單,將URL中的APPID和APPSECRET替換成我們自己申請的appID和appsecret,使用GET方式發送HTTP請求。注意,調用微信接口時均使用HTTPS協議,這樣能夠保證個人信息不會泄露。

2.返回說明

正常情況下,微信會返回以下JSON數據包給公眾號:

     {"access_token":"ACCESS_TOKEN","expires_in":7200}

參數說明如表4-3所示。

表4-3 參數說明

發生錯誤時微信會返回錯誤碼等信息,JSON數據包示例如下(該示例為appID無效錯誤):

     {"errcode":40013,"errmsg":"invalid appid"}

了解了接口的基本信息,下面給出具體的代碼:

     const API_URL  = 'https://api.weixin.qq.com';
        private static $access_token;
        private static $expries_time = 0;

/** *用于獲取AccessToken。若成功則返回AccessToken,若失敗則返回false */ public static function getToken(){ //如果已經獲取過且沒有過期,就直接返回 if(isset(self::$access_token) && time() < self::$expries_time){ return self::$access_token; } $url=self::API_URL."/cgi-bin/token?grant_type=client_credential&appid=".APPID. "&secret=".APPSECRET; $content=curl_get($url); //解析成json $ret=json_decode($content,true);//{"access_token":"ACCESS_TOKEN", "expires_in":7200} if(array_key_exists('errcode',$ret) && $ret['errcode'] != 0){ return false; }else{ self::$access_token = $ret['access_token']; //計算過期時間 self::$expries_time = time() + intval($ret['expires_in']); return self::$access_token; } }

函數curl_get(URL)是利用cURL庫實現GET方式發送請求并獲取數據,這個函數我們以后會經常用到。由于本書主要介紹微信開發,具體的PHP函數這里就不展開了,搜索一下大家就能知道這個函數的用法。

     /**
      *用GET方式獲取服務器響應
      * @param {string} $url
      * @return {string|boolen}成功時返回服務器響應內容,失敗則返回false
      */
     function curl_get( $url ){
         $ch = curl_init();
         curl_setopt($ch, CURLOPT_URL, $url);;
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
         if(!curl_exec($ch)){
             error_log( curl_error ( $ch ));
             $data = '';
         } else {
            $data = curl_multi_getcontent($ch);
         }
         curl_close($ch);
         return $data;
     }
主站蜘蛛池模板: 夏津县| 乌兰浩特市| 子洲县| 奇台县| 永兴县| 东乌珠穆沁旗| 汉阴县| 永兴县| 古蔺县| 宜春市| 灵寿县| 哈巴河县| 石门县| 万荣县| 乌拉特前旗| 大余县| 饶平县| 宣城市| 泊头市| 宁波市| 扶风县| 娱乐| 宜都市| 蓝山县| 健康| 碌曲县| 剑川县| 土默特左旗| 南溪县| 郓城县| 德格县| 达尔| 驻马店市| 高淳县| 尉氏县| 鹤庆县| 新巴尔虎左旗| 顺昌县| 西贡区| 汪清县| 泸西县|