1. 程式人生 > >微信公眾號開發之網頁授權(獲取用戶信息)

微信公眾號開發之網頁授權(獲取用戶信息)

還需要 開發文檔 app err 通過 casb ddt 省份 sse

  這次暑假留在學校參與工作室的項目,對微信公眾號比較感興趣,所以參與這方面的學習研究。

昨天完成了關於網頁授權,獲取用戶信息方面的功能,所以乘熱打鐵,寫上一篇。實現本篇涉及的

功能,還需要完成一些基礎。在寫完這篇博客後,我會盡快補上。

-------------------------廢話不多說直入正題

需要的工具:

微信公眾號(可以申請,但做開發的,可以申請測試號,申請詳細不多說了)

服務器(可以自行購買,我使用的是新浪的sae。)

編輯器(隨意,不做推薦)

微信公眾號開發文檔(地址)

-------------------------官方文檔解讀(只說我讀到的信息)

!!!!!完成基本配置後才能進行一下工作,配置信息在這。(稍後補上)

你要完成網頁授權,並獲取用戶信息要完成一下3步驟。

-1-用戶授權並獲取code

-2-使用code換取access_token

-3-使用access_token獲取用戶信息

--------------------用戶授權並獲取code

參數說明
appid=APPID(公眾號唯一標識)
redirect_uri=REDIRECT_URI(授權後重定向的回調鏈接地址)
response_type=code(返回類型,無需更改)
scope=SCOPE(snsapi_base ,不彈出授權頁面,直接跳轉,只能獲取用戶openid),snsapi_userinfo 彈出授權頁面,可通過openid拿到昵稱、性別、所在地。)
state=STATE(重定向後會帶上state參數,開發者可以填寫任意參數值)
#wechat_redirect(無需更改)

地址實例(雖是測試號,但我還是隱藏部分信息)紅色字體需要根據實際更改。
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxe5809c42e6c00d22&redirect_uri=http://dingcanphp.applinzi.com/getUserInfo.php&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect

返回結果(code的值,不一定是顯示在瀏覽器界面上的,具體看你的redirect_uri中的文件)
061h4k8Z1G7AhY0025bZ1nbh8Z1h4k8Q

-----------------使用code換取access_token

參數說明
appid=APPID(公眾號唯一標識)
secret=SECRET(公眾號的appsecret)
code=CODE(第一步獲取的code參數)
grant_type=authorization_code(無需更改)


地址實例(雖是測試號,但我還是隱藏部分信息)紅色字體需要根據實際更改。
https://api.weixin.qq.com/sns/oauth2/access_token?appid=wxe5809c42e6c00d22&secret=5444ba1b31666f6052e9c703f906368b&code=061h4k8Z1G7AhY0025bZ1nbh8Z1h4k8Q&grant_type=authorization_code

返回結果(json格式數據)
{
"access_token": "e1nYJFpZuehfQH1buzHFZLb7onqs_wT1cudSdy9HRlnaMXFtFpRMNFOA0euK6UxPcItrSNbAQVcXDdthbLJYX0MdH1p7-tkZSKuGqBCxVc0",
"expires_in": 7200,
"refresh_token": "0iVsXn4O1rBCASbO7hx8VNVUVFM1RP2Q4xS0giegd4jlIsJYOjTJNZ0b4Dsh_xcoB02ZZ3bt0WH0a47LvjIEPjWUnESJCZyl6EtY_xYZdVs",
"openid": "o47Fa0mp9SRTf3eiKmqWm69BjG_8",
"scope": "snsapi_userinfo"
}

結果解釋
access_token 網頁授權接口調用憑證,註意:此access_token與基礎支持的access_token不同
expires_in access_token接口調用憑證超時時間,單位(秒)
refresh_token 用戶刷新access_token
openid 用戶唯一標識,請註意,在未關註公眾號時,用戶訪問公眾號的網頁,也會產生一個用戶和公眾號唯一的OpenID
scope 用戶授權的作用域,使用逗號(,)分隔

-----------------使用access_token獲取用戶信息

參數說明
access_token=ACCESS_TOKEN(第2步獲取的access_token參數,此access_token與基礎支持的access_token不同)
openid=OPENID(第2步獲取的openid參數)
langlang=zh_CN 返回國家地區語言版本,zh_CN 簡體,zh_TW 繁體,en 英語

地址實例(雖是測試號,但我還是隱藏部分信息)紅色字體需要根據實際更改。
https://api.weixin.qq.com/sns/userinfo?access_token=e1nYJFpZuehfQH1buzHFZLb7onqs_wT1cudSdy9HRlnaMXFtFpRMNFOA0euK6UxPcItrSNbAQVcXDdthbLJYX0MdH1p7-tkZSKuGqBCxVc0&openid=o47Fa0mp9SRTf3eiKmqWm69BjG_8&lang=zh_CN

返回結果(json格式數據)
{
"openid": "o47Fa0mp9SRTf3eiKmqWm69BjG_8",
"nickname": "齊齊",
"sex": 0,
"language": "zh_CN",
"city": "Shaoxing",
"province": "Zhejiang",
"country": "CN",
"headimgurl": "http://wx.qlogo.cn/mmhead/Q3auHgzwzM6kqfcibzzVc8MDGBch53mIgJjWrbKSwkBnzcsWBOMOGlg/0",
"privilege": []
}

結果解釋
openid 用戶的唯一標識
nickname 用戶昵稱
sex 用戶的性別,值為1時是男性,值為2時是女性,值為0時是未知
province 用戶個人資料填寫的省份
city 普通用戶個人資料填寫的城市
country 國家,如中國為CN
headimgurl 用戶頭像,最後一個數值代表正方形頭像大小(有0、46、64、96、132數值可選,0代表640*640正方形頭像),用戶沒有頭像時該項為空
privilege 用戶特權信息,json 數組,如微信沃卡用戶為(chinaunicom)

---------------------------------代碼實現

解讀完文檔,理解實現的步驟、過程,那就開始具體的代碼實現。

接觸過php,但是沒系統性的學習一下,所以代碼實現的時候有些困難,如果不懂phpd的可以看這

直接上代碼,在需要的地方我以註釋的形式說明。

命名為login.php放在服務器根目錄。

<?php
    $appid=‘wxe5809c42e6c00d2d‘;
    $redirect_uri = urlencode ( ‘http://dingcanphp.applinzi.com/getUserInfo.php‘ );//將字符串以 URL 編碼。
    $url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
    header("Location:".$url);//header() 函數向客戶端發送原始的 HTTP 報頭。
?>

命名為getUserInfo.php放在服務器根目錄。

<?php
    header("content-type:text/html;charset=utf-8");
    $code = $_GET["code"];//預定義的 $_GET 變量用於收集來自 method="get" 的表單中的值。
    if (isset($_GET[‘code‘])){//判斷code是否存在
        $userinfo = getUserInfo($code);
        $xinxi = $userinfo[‘nickname‘];//獲取nickname對應的值,即用戶名
        print ‘<h2 style="text-align:center">用戶名:‘.$xinxi.‘</h2>‘;//打印輸出
    }else{
        echo "NO CODE";
    }
    
    function getUserInfo($code)
    {
        $appid = "wxe5809c42e6c00d2d";
        $appsecret = "506eba1b31666f6052e9c703f906368b";

        //Get access_token
        $access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
        $access_token_json = https_request($access_token_url);//自定義函數
        $access_token_array = json_decode($access_token_json,true);//對 JSON 格式的字符串進行解碼,轉換為 PHP 變量,自帶函數
        //獲取access_token
        $access_token = $access_token_array[‘access_token‘];//獲取access_token對應的值
        //獲取openid
        $openid = $access_token_array[‘openid‘];//獲取openid對應的值

        //Get user info
        $userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid";
        $userinfo_json = https_request($userinfo_url);
        $userinfo_array = json_decode($userinfo_json,ture);
        return $userinfo_array;
    }

    function https_request($url)//自定義函數,訪問url返回結果
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl,  CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($curl);
        if (curl_errno($curl)){
            return ‘ERROR‘.curl_error($curl);
        }
        curl_close($curl);
        return $data;
    }
?>

自定義函數中的curl。

--------------------------網頁授權,用戶信息的獲取體驗

兩種體驗方式。需要完成配置後實現。

微信公眾號自動回復中:

//自動回復模式
        if (strstr($keyword, "文本")){
            $content = "這是個文本";
        }else if (strstr($keyword, "登錄")){
            $content = "OAuth2.0網頁授權演示\n";
            $content .= ‘<a href="http://dingcanphp.applinzi.com/login.php">點擊這裏體驗</a>‘;
            $content .="\n".‘<a href="https://jq.qq.com/?_wv=1027&k=4BeSCye">技術支持 現代軟件工程工作室</a>‘;
        }else{
            $content = date("Y-m-d H:i:s",time())."\n\n".‘技術支持 現代軟件工程工作室‘;
        }

菜單點擊訪問:

{
    "button": [
             {
                    "type":"view",
                    "name":"餐廳信息",
                    "url":"http://dingcanphp.applinzi.com/index/canting.html"
                },
         {
            "name": "幫助",
            "sub_button": [
                {
                         "type":"view",
                         "name":"天氣查詢",
                         "url":"http://dingcanphp.applinzi.com/index/tianqi.html"
                },
        {
                         "type":"view",
                         "name":"網頁授權",
                         "url":"http://dingcanphp.applinzi.com/login.php"
                }
            ]
        }    
    ]
}

效果圖展示:

技術分享

謝謝閱讀,如有不足,請賜教。

微信公眾號開發之網頁授權(獲取用戶信息)