亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

QQ登錄集成到自己網站php代碼

2024-05-04 21:48:07
字體:
來源:轉載
供稿:網友

我們現在在各大網站論壇都可以看到點擊一個QQ圖標就可以利用自己的QQ號在網站進行登錄了,下面我來告訴你一段QQ登錄集成到自己網站php代碼,有需要的朋友可參考.

1.打開open.qq.com 添加創建應用:-》輸入常規的數據,你會看到對應的APP ID和KEY值,這是對你身份證的唯一的驗證.

2.打開 http://connect.qq.com/manage/ 點擊->添加網站->輸入相關信息,這里比較特別注意的是,回調地址那里填上你域名就可以了以上申核需要一到兩天時間,耐心等待.

3.打開 http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91%E7%BD%91%E7%AB%99%E6%8E%A5%E5%85%A5 找到SDK庫下載,我在這里下載是官方的php SDK包,如果你的虛擬空間file_get_contents不技持https,可以考慮用curl函數來替代,好多童鞋常常因為獲取不到access_token也就是這個原因,任何一個包不是一氣呵成了,還需你配置相關的配置,這個繁索的調試過程我就在這里展開談了,說說原理->通過你的網站登陸QQ state和scope->獲得access_token->再獲得每個QQ唯一的身份ID openid.

4.在這里你調試成功后,獲得ID后,還需和你當前網站帳號綁定,才能下次登陸的時候自動去識別你的相關綁定帳號內容.

常見問題:

1.Warning: session_start() [function.session-start]: open(/tmpsess_s9b1ahi6vnvc0pfl2e0dcd0l10, O_RDWR) failed: 解決方法:No such file or directory (2) inD:powhostbbcarblogwebtestqqSDKcommsession.php on line 196

找到sssion.php session_save_path 加上注釋//,注釋掉設置路徑

2.Notice: file_get_contents() [function.file-get-contents]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? inD:powhostbbcarblogwebtestqqSDKcommutils.php on line 37

解決方法:

找到 Utils.php  function get_url_contents 函數內容直接用下面代碼替代,因為file_get_content默認不支持訪問https,如果要支持需配置php.ini,激活 php_openssl.dll 模塊,這個大家百度配置一下便可,php代碼如下:

  1. $ch = curl_init();     
  2. curl_setopt($ch, CURLOPT_URL,$url);     
  3. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);     
  4. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);     
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);     
  6. $result = curl_exec($ch);     
  7. return $result 

下面是一個完整的實例,是一個QQ登錄API示范接口,程序為PHP、具體代碼如下:

  1. <?php /**   
  2. * 申請http://connect.opensns.qq.com/apply   
  3. * 列表http://connect.opensns.qq.com/my   
  4. */   
  5. session_start();    
  6. $qq_oauth_config = array(    
  7.     'oauth_consumer_key'=>'*******',//APP ID    
  8.     'oauth_consumer_secret'=>'******************',//APP KEY    
  9.     'oauth_callback'=>"http://www.sunnyi.cn/qq.php?action=reg",//這里修改為當前腳本,但是要保留?action=reg    
  10.     'oauth_request_token_url'=>"http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token",    
  11.     'oauth_authorize_url'=>'http://openapi.qzone.qq.com/oauth/qzoneoauth_authorize',    
  12.     'oauth_request_access_token_url'=>'http://openapi.qzone.qq.com/oauth/qzoneoauth_access_token',    
  13.     'user_info_url' => 'http://openapi.qzone.qq.com/user/get_user_info',    
  14. );    
  15. $action = isset($_GET['action']) ? $_GET['action'] : '';    
  16.    
  17.    
  18. $qq = new qq_oauth($qq_oauth_config);    
  19. switch($action){    
  20.     //用戶登錄 Step1:請求臨時token    
  21.     case 'login':    
  22.         $token = $qq->oauth_request_token();    
  23.         $_SESSION['oauth_token_secret'] = $token['oauth_token_secret'];    
  24.         $qq->authorize($token['oauth_token']);    
  25.     break;    
  26.     //Step4:Qzone引導用戶跳轉到第三方應用    
  27.     case 'reg':    
  28.         $qq->register_user();    
  29.         $access_token = $qq->request_access_token();    
  30.         if($token = $qq->save_access_token($access_token)){    
  31.             //保存,一般發給用戶cookie,以及用戶入庫    
  32.             //var_dump($token);    
  33.             $_SESSION['oauth_token'] = $token['oauth_token'];    
  34.             $_SESSION['oauth_token_secret'] = $token['oauth_token_secret'];   
  35.             $_SESSION['openid'] = $token['openid'];    
  36.             header('Content-Type: text/html; charset=utf-8');    
  37.             $user_info = json_decode($qq->get_user_info());    
  38.             if($user_info->ret!=0){    
  39.                 exit("獲取頭像昵稱時發生錯誤".$user_info->msg);    
  40.             } else {    
  41.                 echo 'QQ昵稱:',$user_info->nickname,    
  42.                 '<img src="',$user_info->figureurl,'" />',    
  43.                 '<img src="',$user_info->figureurl_1,'" />',    
  44.                 '<img src="',$user_info->figureurl_2,'" />';    
  45.             }    
  46.                 
  47.         }    
  48.     break;    
  49.     default :    
  50. }    
  51.    
  52.    
  53. class qq_oauth{    
  54.     private $config;    
  55.     function __construct($config){    
  56.         $this->config = $config;    
  57.     }    
  58.     /**   
  59.      * 返回配置   
  60.      * @param string $name   
  61.      *    
  62.      */   
  63.     function C($name){    
  64.         return isset($this->config[$name]) ?  $this->config[$name] : FALSE;   
  65.     }    
  66.     /**   
  67.      * 構建請求URL   
  68.      * @param string $url   
  69.      * @param array $params   
  70.      * @param string $oauth_token_secret   
  71.      *    
  72.      */   
  73.     function build_request_uri($url,$params=array(),$oauth_token_secret=''){    
  74.         $oauth_consumer_key = $this->C('oauth_consumer_key');    
  75.         $oauth_consumer_secret = $this->C('oauth_consumer_secret');    
  76.             
  77.         $params = array_merge(array(    
  78.             'oauth_version'=>'1.0',    
  79.             'oauth_signature_method'=>'HMAC-SHA1',    
  80.             'oauth_timestamp'=>time(),    
  81.             'oauth_nonce'=>rand(1000,99999999),    
  82.             'oauth_consumer_key'=>$oauth_consumer_key,    
  83.         ),$params);    
  84.         $encode_params = $params;    
  85.         ksort($encode_params);    
  86.         $oauth_signature = 'GET&'.urlencode($url).'&'.urlencode(http_build_query($encode_params));    
  87.         $oauth_signature = base64_encode(hash_hmac('sha1',$oauth_signature,$oauth_consumer_secret.'&'.$oauth_token_secret,true));   
  88.         $params['oauth_signature'] = $oauth_signature;    
  89.         return $url.'?'.http_build_query($params);    
  90.     }    
  91.     /**   
  92.      * 校驗回調是否返回約定的參數    
  93.      */   
  94.     function check_callback(){    
  95.         if(isset($_GET['oauth_token']))    
  96.             if(isset($_GET['openid']))    
  97.                 if(isset($_GET['oauth_signature']))    
  98.                     if(isset($_GET['timestamp']))    
  99.                         if(isset($_GET['oauth_vericode']))    
  100.                             return true;    
  101.         return false;    
  102.     }    
  103.        
  104.     function get_contents($url){    
  105.         $curl = curl_init();    
  106.         curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);    
  107.         curl_setopt($curl,CURLOPT_URL,$url);    
  108.         return curl_exec($curl);    
  109.     }    
  110.     /**   
  111.      * Step1:請求臨時token、Step2:生成未授權的臨時token   
  112.      */   
  113.     function oauth_request_token(){    
  114.         $url = $this->build_request_uri($this->C('oauth_request_token_url'));    
  115.         $tmp_oauth_token = $this->get_contents($url);    
  116.         parse_str($tmp_oauth_token);    
  117.         /*   
  118.         oauth_token 未授權的臨時token   
  119.         oauth_token_secret  token的密鑰,該密鑰僅限于臨時token   
  120.         error_code  錯誤碼   
  121.         */   
  122.         if(isset($error_code)) exit($error_code);    
  123.         return array(    
  124.             'oauth_token'=>$oauth_token,    
  125.             'oauth_token_secret'=>$oauth_token_secret   
  126.         );    
  127.     }    
  128.     /**   
  129.      * Step3:引導用戶到Qzone的登錄頁   
  130.      * @param string $oauth_token 未授權的臨時token   
  131.      */   
  132.     function authorize($oauth_token){    
  133.         $str = "HTTP/1.1 302 Found";    
  134.         header($str);    
  135.         $url = $this->C('oauth_authorize_url');    
  136.         $query_strings = http_build_query(array(    
  137.             'oauth_consumer_key'=>$this->C('oauth_consumer_key'),    
  138.             'oauth_token'=>$oauth_token,    
  139.             'oauth_callback'=>$this->C('oauth_callback'),    
  140.         ));    
  141.         header('Location: '.$url.'?'.$query_strings);    
  142.     }    
  143.     /**   
  144.      * Step4:Qzone引導用戶跳轉到第三方應用   
  145.      * @return bool 驗證是否有效    
  146.      */   
  147.     function register_user(){    
  148.         /*   
  149.          * oauth_token  已授權的臨時token   
  150.          * openid   騰訊用戶對外的統一ID,該OpenID與用戶QQ號碼一一對應   
  151.          * oauth_signature  簽名值,方便第三方來驗證openid以及來源的可靠性。   
  152.          *      使用HMAC-SHA1算法:   
  153.          *      源串:openid+timestamp(串中間不要添加'+'符號)   
  154.          *      密鑰:oauth_consumer_secret   
  155.          * timestamp    openid的時間戳   
  156.          * oauth_vericode   授權驗證碼。   
  157.          */   
  158.         if($this->check_callback()){    
  159.             //校驗簽名    
  160.             $signature = base64_encode(hash_hmac('sha1',$_GET['openid'].$_GET['timestamp'],$this->C('oauth_consumer_secret'),true));    
  161.             if(!emptyempty($_GET['oauth_signature']) && $signature==$_GET['oauth_signature']){    
  162.                 $_SESSION['oauth_token'] = $_GET['oauth_token'];    
  163.                 $_SESSION['oauth_vericode'] = $_GET['oauth_vericode'];    
  164.                 return;    
  165.             }    
  166.         }    
  167.         //校驗未通過    
  168.         exit('UNKNOW REQUEST');    
  169.     }    
  170.     /**   
  171.      * Step5:請求access token    
  172.      */   
  173.     function request_access_token(){    
  174.         $url = $this->build_request_uri($this->C('oauth_request_access_token_url'),array(    
  175.             'oauth_token'=>$_SESSION['oauth_token'],    
  176.             'oauth_vericode'=>$_SESSION['oauth_vericode']    
  177.         ),$_SESSION['oauth_token_secret']);    
  178.         return $this->get_contents($url);    
  179.     }    
  180.     /**   
  181.      * Step6:生成access token (保存access token)   
  182.      *    
  183.      * 關于access_token   
  184.      * 目前access_token(及其secret)是長期有效的,和某一個openid對應,目前可以支持線下獲取該openid的信息。    
  185.      * 當然,用戶有權限在Qzone這邊刪除對第三方的授權,此時該access_token會失效,需要重新走整個流程讓用戶授權。   
  186.      * 以后會逐步豐富access_token的有效性,長期有效、短期有效、用戶登錄時才有效等。   
  187.      */   
  188.     function save_access_token($access_token_str){    
  189.         parse_str($access_token_str,$access_token_arr);    
  190.         if(isset($access_token_arr['error_code'])){    
  191.             return FALSE;    
  192.         } else {    
  193.             return $access_token_arr;    
  194.         }    
  195.     }    
  196.     /**   
  197.      * 目前騰訊僅開放該API   
  198.      * 獲取登錄用戶信息,目前可獲取用戶昵稱及頭像信息。   
  199.      * http://openapi.qzone.qq.com/user/get_user_info   
  200.      */   
  201.     function get_user_info(){    
  202.         $url = $this->build_request_uri($this->C('user_info_url'),array(    
  203.             'oauth_token'=>$_SESSION['oauth_token'],    
  204.             'openid'=>$_SESSION['openid'],    
  205.         ),$_SESSION['oauth_token_secret']);    
  206.         return $this->get_contents($url);    
  207.     }    
  208. }?> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91高清在线免费观看| 久久激情五月丁香伊人| 成人字幕网zmw| 国产精品999| 成人精品一区二区三区电影免费| 91久久久在线| 国产精品极品美女在线观看免费| 久久精品99久久久久久久久| 亚洲激情自拍图| 奇米一区二区三区四区久久| 精品国产一区av| 国产精品极品美女在线观看免费| 中文字幕最新精品| 国产视频自拍一区| 久久久久久久一| 亚洲天堂免费在线| 国产成人精品在线观看| 亚洲黄色www网站| www.久久久久久.com| 8090成年在线看片午夜| 国产精品男人的天堂| 亚洲第五色综合网| 高清一区二区三区日本久| 久久国产精品网站| 国产精品美女免费看| 亚洲成人av资源网| 日韩精品中文字幕久久臀| 啊v视频在线一区二区三区| 日韩免费在线播放| 欧美成人午夜剧场免费观看| 国产精品18久久久久久首页狼| 97人人做人人爱| 日本a级片电影一区二区| 国产欧美中文字幕| 国产精品一区二区久久久| 日韩精品高清视频| 国产精品999| 日韩成人性视频| 久久亚洲成人精品| 91在线播放国产| 久久综合伊人77777| 欧美www视频在线观看| 夜夜嗨av色一区二区不卡| xvideos国产精品| 日韩一区在线视频| 亚洲最大的成人网| 日韩精品视频免费在线观看| 国产999在线观看| 亚洲天堂色网站| 中文字幕亚洲一区在线观看| 97在线免费观看视频| 欧美国产日韩在线| 97福利一区二区| 精品久久久久久久久中文字幕| 日韩极品精品视频免费观看| 亚洲自拍偷拍网址| 欧美精品18videos性欧美| 中文字幕欧美日韩| 欧美大尺度在线观看| 国产精品日韩在线| 国模私拍视频一区| 日韩精品高清在线| 国产99久久精品一区二区| 欧美wwwwww| 精品露脸国产偷人在视频| 九九精品在线播放| 精品久久久久久久久久久久久| 最新日韩中文字幕| 午夜精品一区二区三区视频免费看| 中文字幕亚洲一区二区三区| 日本久久久a级免费| 国产精品电影在线观看| 国产精品6699| 美女扒开尿口让男人操亚洲视频网站| 亚洲精品成人网| 午夜免费在线观看精品视频| 色综合视频一区中文字幕| 欧美专区在线播放| 亚洲sss综合天堂久久| 欧美午夜电影在线| 97超级碰碰人国产在线观看| 亚洲午夜色婷婷在线| 成人免费看黄网站| 国产成人激情视频| 国产69精品99久久久久久宅男| 久久6精品影院| 亚洲第一视频网站| 久久99视频精品| 亚洲精品美女在线| 亚洲a成v人在线观看| 国产福利成人在线| 51久久精品夜色国产麻豆| 久久综合伊人77777尤物| 久久国产精品99国产精| 亚洲免费伊人电影在线观看av| 国产成人小视频在线观看| 91av成人在线| 日韩一区二区欧美| 亚洲情综合五月天| 精品调教chinesegay| 国产女人18毛片水18精品| 欧美福利视频在线观看| 国产精品久久久久久久久久三级| 欧美激情免费在线| 国产精品入口日韩视频大尺度| 久久久久五月天| 欧美极品在线播放| 日本精品在线视频| 国产精品美女久久久免费| 亚洲香蕉成视频在线观看| 中文在线资源观看视频网站免费不卡| 国产一区二区三区在线观看视频| 亚洲人成毛片在线播放| 成人xvideos免费视频| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲free性xxxx护士白浆| 日韩中文字幕在线| 日韩av免费网站| 在线观看日韩www视频免费| 5278欧美一区二区三区| 97人洗澡人人免费公开视频碰碰碰| 欧美精品成人在线| 日韩**中文字幕毛片| 欧美日韩国产色视频| 日韩在线中文视频| 精品久久久中文| 亚洲久久久久久久久久久| 这里精品视频免费| 日本欧美精品在线| 亚洲精品色婷婷福利天堂| 日韩成人av在线播放| 一区二区在线视频| 欧美性20hd另类| 色综合久综合久久综合久鬼88| 欧美麻豆久久久久久中文| 久久久久中文字幕| 日日狠狠久久偷偷四色综合免费| 久久久久久网站| 成人xxxx视频| 亚洲xxxx视频| 国产97色在线|日韩| 美女扒开尿口让男人操亚洲视频网站| 欧美国产中文字幕| 欧美日韩国产一中文字不卡| 成人伊人精品色xxxx视频| 日韩亚洲第一页| 日韩经典中文字幕在线观看| 青青久久av北条麻妃海外网| 色青青草原桃花久久综合| 欧美成人免费视频| 欧美精品在线免费播放| 国产一区二中文字幕在线看| 中文字幕视频在线免费欧美日韩综合在线看| 成人在线播放av| 中国日韩欧美久久久久久久久| 欧美亚洲国产日韩2020| 亚洲片在线观看| 亚洲美女福利视频网站| 午夜精品99久久免费| 91精品国产高清久久久久久91| 亚洲最新av在线| 啪一啪鲁一鲁2019在线视频| 色综合色综合久久综合频道88| 亚洲视频在线播放|