QQ一鍵登錄功能的實現過程


QQ登錄的思路:

當qq登陸成功后,QQ會給我們返回一個唯一的用戶標識:openId,當用戶授權QQ時,判斷

if(已經有openId){
        跳轉到登陸后的頁面。
              }else if(沒有openId){
                       跳轉到注冊頁面->然后綁定->跳轉到登陸后的頁面
              }

綁定:將用戶id和唯一標識關聯,所有一鍵登錄原理皆如此

過程:

1、實現QQ登錄需要在QQ互聯先創建應用:http://connect.qq.com/

2、創建應用成功得到:APP ID 和 KEY

3、確保要用得的API已激活,如下:

4、下載相應的SDK

5、解壓SDK后瀏覽文件夾設置配置項,其實就是設置API->comm->inc.php文件(->代表文件夾里面),可以不瀏覽,自己去設置,復制以下並修改appid、appkey和回調地址,這三項一定要跟申請的應用一致,否則是不行的!

{"appid":"2222094","appkey":"f8ac3d316ebd74d2039294fff81cce9b","callback":"http://xxx/api/qq/callback.php","scope":"get_user_info","errorReport":true,"storageType":"file","host":"localhost","user":"root","password":"root","database":"test"}

 6、簡化文件,實際上有用的就這幾個文件,保留API(類及設置文件夾)、example(API例子)和index.php授權頁面,當然example只是做參考,實際上你不需要也是可以丟掉的,但是一般還是留着,以防要用的時候要重新下載SDK

最重要的就是:

a.授權頁面:example->oauth->index.php

b.回調頁面:example->oauth->callback.php

c.還有你要執行的API:example->get_info->get_info.php

我喜歡把要用的文件拿到前面,如:example里面的get_info.php,拿到新建的user文件夾里面,還有把回調頁面,感覺干凈了很多 (移動的時候注意路徑)

 

7、使用API需要傳入:$openid、$access_token

所以在callback.php設置了session,如下:

require_once("API/qqConnectAPI.php");

$qc = new QC();
$_SESSION['access_token']=$qc->qq_callback();
$_SESSION['openid']=$qc->get_openid();
 header('Location:'.'user/get_user_info.php');

get_info.php拿用戶信息:

$qc = new QC();
$access_token=$_SESSION['access_token'];
$openid=$_SESSION['openid'];
$arr = $qc->get_user_info();

print_r($arr) 即看到返回的信息

Array
(
    [ret] => 0
    [msg] => 
    [nickname] => 卡
    [gender] => 男
    [figureurl] => http://qzappss
    [figureurl_1] => http://qzapp.qlogo.cnss
    [figureurl_2] => http://qzapp.qlogo.cn/
    [vip] => 0
    [level] => 0
    [is_yellow_year_vip] => 0
)

 技巧:當頁瀏覽拿數據,重組數組並提交到“借數據頁面”,通常也是注冊頁面

$param=array('action'=>"接數據頁面",'orther_web_id'=>$_SESSION['openid'],'orther_web_name'=>urldecode($urlname),'orther_web'=>'QQ');

echo form($param);

form()是一個很方便的函數,提交過來的數組,相當於把數組每個值都放到一個input,然后按提交按鈕,他自己創建自己提交,純自動!

凡是一個頁面提交了數據那就能用$_GET或$_POST拿到啦!

function form($param){
    $f='';
    foreach($param as $k=>$v){
        if($k=='action'){
            $f='<form id="formpost" method="post" action="'.$v.'">';
        }
        else{
            if($k=='orther_web_id') $v=authcode($v,'ENCODE');
            $f.='<input type="hidden" name="'.$k.'" value="'.$v.'" />';
        }
    }
    $f.="<input type='submit' style='width:0px; height:0px;filter:alpha(opacity=0);opacity:0' value='' /></form><script>document.getElementById('formpost').submit();</script>";
    return $f;
}

8、最后一步就是在“接收數據頁”把數據接收,拿QQ名稱就:$_POST['orther_web_name']....剩下的就都不是問題了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM