1. 程式人生 > >PHP QQ網頁三方登入

PHP QQ網頁三方登入

一、在QQ互聯上註冊成為開發者
註冊指南地址:http://wiki.connect.qq.com/%E6%88%90%E4%B8%BA%E5%BC%80%E5%8F%91%E8%80%85

二、建立應用,獲取APP ID和APP Key
建立應用指南地址:http://wiki.connect.qq.com/__trashed-2
1、進入QQ互聯後臺建立網站應用
https://connect.qq.com/manage.html#/

2、網站基本資訊
此處主要填寫網站名字、選擇網站類別、網站簡介、以及上傳網站的log圖片

3、平臺資訊
網站地址:請填寫可訪問的域名,不能是IP地址
網站回撥域:請填寫可訪問的域名,不能是IP地址
主辦單位以及網站備案號

注:請注意網站回撥域,這個地址需要對應到後面SDK配置回撥地址的域匹配

三、下載對應SDK
我這裡使用PHP SDK,下載地址:
http://wiki.connect.qq.com/sdk%E4%B8%8B%E8%BD%BD


下載完SDK,需要使用SDK提供的網頁配置引數,如下截圖說明:


假設APP ID:123456789
假設APP Key:abcdefghl
假設第二步中申請的網站回撥域為 www.testqqlogin.com,
那麼回撥可以設定為:http://www.testqqlogin.com/?r=member/qqcallback
ps:
1、重點關注第二步中回撥域的設定,需要設定為域名形式,如www.xxx.com,test.yyy.com等,而非www.aaaa.com/test.php
2、同樣,重點關注SDK配置回撥設定,前面域名必須和QQ互聯回撥域設定一致,比如:
假如回撥域設定為:www.testqqlogin.com
那麼SDK回撥必須設定為 http://www.testqqlogin.com/oauth/callback.php 或者 http://www.testqqlogin.com/?r=member/qqcallback

但是,不能把SDK回撥域設定為以下
http://www.testqqlogin.com/index.php?r=member/qqcallback

當完成以上配置之後,它會自動在SDK目錄下的API\comm生成一個名為inc.php的配置檔案,開發人員只需要把SDK中的API這個目錄提取到自己的專案中即可


四、程式碼配置

4.1、前端網頁QQ三方登入按鈕(按鈕ID為login_qq)事件配置

<script>

        $(document).ready(function () {
            $('#login_qq').click(function () {
                window.location.href = "<?=\yii\helpers\Url::to(['member/qqlogin'])?>";
//                window.open("<?//=\yii\helpers\Url::to(['member/qqlogin'])?>//","TencentLogin","width=800,height=600,menubar=0,scrollbars=1,resizable=1,status=1,titlebar=0,toolbar=0,location=1");
            });
        });

    </script>

4.2、PHP後端處理程式碼,處理前端QQ三方登入按鈕
/**
 * 跳轉QQ登入頁面
 */
public function actionQqlogin(){
	require_once ("../vendor/qqlogin/qqConnectAPI.php");
	$qc = new \QC();
	$qc->qq_login();
}

4.3、QQ登入成功,回撥
/**
 * 處理QQ登入之後QQ伺服器的回撥callback
 */
public function actionQqcallback(){
	require_once ('../vendor/qqlogin/qqConnectAPI.php');
	//獲取登入QQ的資訊
	$auth = new \OAuth();
	$access_token = $auth->qq_callback();
	$openid = $auth->get_openid();
	$qc = new \QC($access_token, $openid);
	$userInfo = $qc->get_user_info();//獲取使用者資訊陣列,包括暱稱,頭像等

	//寫session
	$session = \Yii::$app->session;
	$session['userinfo'] = $userInfo;
	$session['openid'] = $openid;

	//QQ登入前,判斷QQ對應使用者是否已經在資料庫中,否則先插入資料庫,並跳到actionQqreg這個函式執行
	$model = new User();
	if(!$model->findQqUser($openid)){//沒找到,先註冊
		return $this->redirect(['member/qqreg']);
	}

	//QQ登入
	if($model->qqlogin()){
		return $this->redirect(['/']);
	}else{
		\Yii::$app->session->setFlash('thirdparty_info', '登入失敗');
		return $this->render('auth',['model'=>$model]);
	}
}

4.4、處理回撥中的QQ第一次登入,需要寫入資料庫
/**
 * QQ註冊,寫入資料庫
 */
public function actionQqreg(){
	$this->layout = 'layout_second';
	$model = new User();
	if(\Yii::$app->request->isPost){
		$model->scenario = User::SCENARIO_REG_QQ;
		//組裝
		$post = \Yii::$app->request->post();
		$post['User']['openid'] = \Yii::$app->session['openid'];
		if($model->load($post) && $model->validate()){
			//QQ使用者新增
			if($model->regQqUser() !== false){
				//QQ登入
				if($model->qqlogin()){
					return $this->redirect(['/']);
				}else{
					\Yii::$app->session->setFlash('info', '註冊失敗');
				}
			}else{
				\Yii::$app->session->setFlash('info', '註冊失敗');
			}
			$model->userpass = '';
			$model->useremail = '';
			$model->repass = '';
		}
	}

	return $this->render('qqreg', ['model'=>$model]);
}

五、問題

5.1、點選qq登入按鈕,但頁面卻是一片空白,這是什麼原因呢

這是QQ外掛的問題,需要調整其SDK原始碼qq_login函式,把header改為js方式跳轉,如下

//header("Location:$login_url");
echo "<script>window.location.href='$login_url'</script>";

六、總結

PHP整合QQ網頁登入功能,整體上都很簡單。主要花費的時間在回撥域和回撥地址設定上,這導致我花了很長時間去調整,這和之前整合支付寶支付很類似,同樣在回撥地址的設定出錯,導致整體整合進度延後。這也是我為什麼在第三步中詳細描述設定的原因,希望能幫助到整合QQ網頁登入的同學微笑

相關推薦

PHP QQ網頁三方登入

一、在QQ互聯上註冊成為開發者註冊指南地址:http://wiki.connect.qq.com/%E6%88%90%E4%B8%BA%E5%BC%80%E5%8F%91%E8%80%85 二、建立應用,獲取APP ID和APP Key建立應用指南地址:http://wik

ThinkPHP3.2.3實現QQ等第三方登入

首先申請自己想要做的第三方(例如:qq)的appid跟appkey 在無意間找到了一個集成了多個第三方登入叫thinkSDK的東西,使用起來非常方便,不過需要修改一些東西(點選這裡檢視與下載think

CAS統一登入認證(17): QQ,微信,人臉識別等第三方登入的另類實現

CAS本身支援許多第三方賬號登入認證,如facebook,github,google賬號等,簡單配置即可實現,網上也有一些通過改程式碼或增加代理網站實現QQ,微信登入的,但所有這些登入認證,最後使用者賬號並不是自己資料庫儲存的賬號,而是第三方的openid或者暱稱等,不是我們所需要的,轉換為對應的資

php QQ第三方登入/OAuth2.0驗證

qq實現第三方網站登入 建立QQ互聯賬號 可用QQ號碼登入 登入地址:http://connect.qq.com/ QQ互聯->管理中心->建立應用 1.建立應用 2.建立網站 注意內容:網站地址一定要加入圖中所標註的資訊 建立成功 獲取 APP ID 和

PHP QQ 登入介面應用

QQ 登入申請網址:  http://connect.qq.com/manage/info?id=1 <?php   class qzone  {  var$appid = "***********";//換成您的var$appkey = "**********"

Android使用ShareSDK整合QQ、微信、微博等第三方登入

前言 第三方登入幾乎是每個APP的必須功能。有些人說看官方的文件實在讓人眼花繚亂,以前自己第一次做這些功能的時候也會遇到很多坑。這裡整理了一份比較詳細的,主要給新手學習。有任何問題歡迎提出來! 1、獲取ShareSDK的AppKey 2

用django-social-auth 做中國社交網站三方登入(qq,微博,豆瓣,百度,人人,微信支援)

TODO 我寫這個demo之後, python-social-auth, django-social-auth的作者(一個人), 對這兩個庫進行了比較大的更新,pip裡面甚至下掉了django-social-auth, 0.8.1這個版本, 因此讓demo能夠跑起來,你可能

PHP獲取網頁上的信息相對於xpath效率低點

所有 pat ini 自己 str rpo fwrite echo bst 用php實現對網頁的抓取,及信息的收集,其實就是爬數據,具體實現步驟如下,首先應引入兩個文件curl_html_get.php和save_file.php文件,兩個文件具體代碼是這樣

QQ郵箱自動登入問題--frame巢狀元素定位

今天在自己編寫QQ郵箱自動登入的指令碼時遇到一個問題,看圖說話: 因此,正常來說都會想到要定位到“賬號密碼登入”,於是就定位到原始碼: 定位如下: driver.find_element_by_id('switcher_plogin').click() 返回提示找不到該

乾貨來了,PHP擷取網頁原始碼內所有&amp;amp;lt;a&amp;amp;gt;標籤,並形成陣列

前言         如果我們需要獲取一個網頁的原始碼,並從中獲取一些自己需要的資訊,比如<a>標籤,或者<p><ul>標籤當中的所有內容和的時候。     

PHP獲取網頁原始碼最簡單的兩種方法

第一種:curl 廢話不多說,直接上程式碼 //1,獲取curl控制代碼 $ch = curl_init(); // 2. 設定選項,包括URL curl_setopt($ch,CURLOPT_URL,"http://www.baidu.com/"); curl_

網頁註冊登入資料庫(六)

<%@ page language="java" import="java.sql.*" contentType="text/html;charset=utf-8"%> <html>   <head>     

網頁註冊登入資料庫(五)

<%@ page language="java" import="java.util.*" contentType="text/html;charset=utf-8"%> <html>   <head> <title>登陸成功&l

網頁註冊登入(三)

登入檢驗 <%@ page language="java" import="java.sql.*" contentType="text/html;charset=utf-8"%> <html>   <head>  

網頁註冊登入資料庫(二)

註冊頁面 <%@ page language="java" import="java.util.*" contentType="text/html;charset=utf-8"%> <html>   <head>   

網頁註冊登入資料庫(一)

登入頁面 <%@ page language="java" import="java.util.*" contentType="text/html;charset=utf-8"%> <html> <head> <title>使用者登入<

軟體測試----如何測試網頁登入頁面

轉自:http://www.cnblogs.com/TankXiao/p/3154017.html 具體需求: 有一個登陸頁面, 上面有2個textbox, 一個提交按鈕。 請針對這個頁面設計30個以上的test case. 此題的考察目的: 面試者是否熟悉各種測試方法,是否有豐富的

PHP獲取網頁的 Html原始碼輸出並執行

  <?php $srcurl = "所要擷取目標的URL地址"; $handle = fopen($srcurl,"rb"); $content = fread($handle,10240000); $start_position=strpos($content,'擷取內容開始程式碼

php簡單留言板登入

PHP留言板簡單登入 留言本 歡迎來到×××的留言本 [我要寫留言] [管理留言] 使用者登入介面

應用behave行為驅動框架實現QQ郵箱的登入

為了更好地定位元素,首先要仔細分析某個系統登入時,他的登入頁面到底有幾個iframe元素,當有多個時,切登入框的iframe是獨立的話,需要先把frame切換到登入的iframe上,這樣才能對其上面的元素進行一系列操作!! 如圖所示是QQ郵箱的登入頁面 分析HTML對應的dom樹結構是什麼樣的,是否此