1. 程式人生 > >第三方登入(QQ登入)開發流程詳解

第三方登入(QQ登入)開發流程詳解

  近排由於工作的繁忙,已經一個星期沒寫博文做分享了,接下來我對網站接入第三方登入----QQ登入的實現邏輯做一個詳細的講解。

  對於整個流程的詳細文件可以到QQ互聯官網(http://wiki.connect.qq.com)檢視,我這裡就簡單地進行描述,主要是分析程式碼的實現過程。

  我用的是CI框架(MVC模式),模板引擎用的是smarty。

  下圖為整個接入流程:

  

一、準備工作

  接入QQ登入前,網站需首先進行申請,獲得對應的appid與appkey,以保證後續流程中可正確對網站與使用者進行驗證與授權。

申請appid和appkey的用途

      appid

:應用的唯一標識。在OAuth2.0認證過程中,appid的值即為oauth_consumer_key的值。

    appkey:appid對應的金鑰,訪問使用者資源時用來驗證應用的合法性。在OAuth2.0認證過程中,appkey的值即為oauth_consumer_secret的值。

二、放置“QQ登入按鈕”

 此步驟自己看文件就OK了。我這裡是通過在按鈕新增a連結實現跳轉登入

V層:index.tpl

1 <a href="{$openLoginUrl.connectQQ}" class="icon connect-qq"><
span icon-bg2="icon_qq_n"></span>  QQ登入</a>

三、使用Authorization_Code獲取Access_Token

需要進行兩步:

1. 獲取Authorization Code;

2. 通過Authorization Code獲取Access Token

Step1:獲取Authorization Code

請求地址

PC網站:https://graph.qq.com/oauth2.0/authorize

WAP網站:https://graph.z.qq.com/moc2/authorize

請求方法

GET

請求引數

請求引數請包含如下內容:

引數 是否必須 含義
response_type 必須 授權型別,此值固定為“code”。
client_id 必須 申請QQ登入成功後,分配給應用的appid。
redirect_uri 必須 成功授權後的回撥地址,必須是註冊appid時填寫的主域名下的地址,建議設定為網站首頁或網站的使用者中心。注意需要將url進行URLEncode。
state 必須 client端的狀態值。用於第三方應用防止CSRF攻擊,成功授權後回撥時會原樣帶回。請務必嚴格按照流程檢查使用者與state引數狀態的繫結。
scope 可選 請求使用者授權時向用戶顯示的可進行授權的列表。

可填寫的值是API文件中列出的介面,以及一些動作型的授權(目前僅有:do_like),如果要填寫多個介面名稱,請用逗號隔開。

例如:scope=get_user_info,list_album,upload_pic,do_like

不傳則預設請求對介面get_user_info進行授權。

建議控制授權項的數量,只傳入必要的介面名稱,因為授權項越多,使用者越可能拒絕進行任何授權。

display 可選 PC網站接入時使用。

用於展示的樣式。不傳則預設展示為PC下的樣式。

如果傳入“mobile”,則展示為mobile端下的樣式。

g_ut 可選 WAP網站接入時使用。

QQ登入頁面版本(1:wml版本; 2:xhtml版本),預設值為1。

返回說明

1. 如果使用者成功登入並授權,則會跳轉到指定的回撥地址,並在redirect_uri地址後帶上Authorization Code和原始的state值。如:

PC網站:http://graph.qq.com/demo/index.jsp?code=9A5F************************06AF&state=test

WAP網站:http://open.z.qq.com/demo/index.jsp?code=9A5F************************06AF&state=test

注意:此code會在10分鐘內過期。

2. 如果使用者在登入授權過程中取消登入流程,對於PC網站,登入頁面直接關閉;對於WAP網站,同樣跳轉回指定的回撥地址,並在redirect_uri地址後帶上usercancel引數和原始的state值,其中usercancel值為非零,如:

http://open.z.qq.com/demo/index.jsp?usercancel=1&state=test

下面我們來構造請求地址:

C層:login.php 

1 2 3 4 5 6 7 public function index() { $redirect = "/user_center/index"; $this->smartyData['connectQQ'] = $this->model->connectQQ->getLoginUrl($this->getOpenLoginRedirectUrl(AccountType::ConnectQQ, $redirect)); $this->renderTemplateView('login/index.tpl'); }

  接下來我對這段程式碼進行分析

  1、$redirect = "/user_center/index";  

    這是到最後登入成功後進行跳轉的url,一般登入成功可以跳轉的首頁或者個人中心

  2、$this->getOpenLoginRedirectUrl(AccountType::ConnectQQ, $redirect);

這裡我說明下AccountType::ConnectQQ 這是個常量而已,我的專案中有微博登入,所以是用一個常量來判斷是QQ登入還是微博登入,它們的實現過程基本一致。

  我先附上這個方法的程式碼:

1 2 3 4 5 private function getOpenLoginRedirectUrl($accountType$redirect) { $url "/login/openCallback/?type=$accountType"; if(!empty($redirect)) $url "$url&redirect=" . rawurlencode($redirect); return base_url(

相關推薦

第三方登入QQ登入開發流程

  近排由於工作的繁忙,已經一個星期沒寫博文做分享了,接下來我對網站接入第三方登入----QQ登入的實現邏輯做一個詳細的講解。   對於整個流程的詳細文件可以到QQ互聯官網(http://wiki.connect.qq.com)檢視,我這裡就簡單地進行描述,主要是分析程式碼的實現過程。   我用的是C

Django 專案總結3- 第三方登入QQ登入

第三方登入(QQ 登入) 根據 qq 開發文件 oauth2.0 QQ 登入流程: 前端頁面點選 QQ 登入,需要跳轉到 QQ 的登入頁面,但是前端不知道 QQ 的登入連結,所以先想後端傳送請求,由伺服器生成 QQ 登入頁地址,返回給前端; 使用者在

網站接入QQ登入QQ互聯php版的流程

0、下載QQ登入(QQ互)php版:下載地址:點選開啟連結(本文編寫時最新版本:V2.1 ) 1、在QQ網際網路站註冊一個appid,配置網站地址和回撥地址。  例:http://yzdd.app1101808733.twsapp.com    yzdd.app110180

第三方登入開發流程

首先你得是服務號,並且是經過認證的.這樣微信會給你很多第三方介面的許可權,如果是訂閱號或者沒有認證的服務號那就不用想了! 一、開啟開發者模式 開始你需要進入微信公眾平臺開啟開發模式,並且填寫oauth2的回撥地址,地址填寫你專案的域名就可以了.比如:www.baid

vue外掛開發流程-從開發到釋出至npm

  前記:上一篇 https://www.cnblogs.com/adouwt/p/9211003.html,(這裡感謝部落格園的網友,給我點贊推薦了) 說到了一個完整的vue外掛開發、釋出的流程,總結下來就講了這麼一個事,如何注入vue, 如果封裝vue外掛,如何測試vue外掛,以及如何釋出vue外掛到np

vue外掛開發流程-從開發到釋出至npm

 vue的外掛開發 1.本地開發   1.1 初始化本地開發專案        1.2 test.js 的內容 ,這是外掛的入口檔案      test.js的程式碼如下: import testPanel from './panel.vue

使用阿里ARouter路由實現元件化模組化開發流程

Android平臺中對頁面、服務提供路由功能的中介軟體,我的目標是 —— 簡單且夠用。 這是阿里對Arouter的定位,那麼我們一起來梳理一下Arouter使用流程,和使用中我所遇到的一些問題! 先來看看有哪些功能 模組化的要解決的問題

探索 SpringBoot 啟動流程(上)

探索 SpringBoot (二) 啟動流程詳解 文章目錄 探索 SpringBoot (二) 啟動流程詳解 1 緣起 2 環境配置 3 SpringApplication 準備階段 3.1 推斷 web ap

探索 SpringBoot 啟動流程(下)

探索 SpringBoot (三) 啟動流程詳解(下) 文章目錄 探索 SpringBoot (三) 啟動流程詳解(下) 4 SpringBoot 執行階段 4.1 Spring 應用執行監聽者的載入和執行 4.2

公眾號第三方平臺開發流程

準備工作 1. 註冊申請 2. 建立第三方平臺 進入‘管理中心->建立第三方平臺’ 2.1. 輸入基本資訊 !基本資訊將顯示在授權頁被使用者看到,請認真填寫 修改平臺稽核成功後,僅對測試公眾號生效,屆時再提交“覆

SpringBoot 2.0 系列流程

寫在前面 本節將詳細介紹如何使用Spring Boot。它涵蓋了諸如專案管理及自動構建工具、自動配置以及如何執行應用程式等主題。我們還介紹了一些Spring Boot最佳實踐。Spring Boot沒有什麼特別之處(它只是另一個我們可以使用的庫),但是有一些約

二十三原型模式clone方法原始碼的簡單剖析

 作者:zuoxiaolong8810(左瀟龍),轉載請註明出處,特別說明:本博文來自博主原部落格,為保證新部落格中博文的完整性,特複製到此留存,如需轉載請註明新部落格地址即可。               &nbs

Mybatis -程式碼自動生成generatorConfig.xml配置資訊

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1

Dubbo概念篇:Dubbo ,架構演變及優缺點

架構演變 單一應用框架(ORM) 當網站流量很小時,只需一個應用,將所有功能如下單支付等都部署在一起,以減少部署節點和成本。 缺點:單一的系統架構,使得在開發過程中,佔用的資源越來越多,而且隨著流量的增加越來越難以維護。 垂直應用框架(MVC) 垂直應用架構解決了單一應用架

C++中virtual虛擬函式的用法

在面向物件的C++語言中,虛擬函式(virtual function)是一個非常重要的概念。因為它充分體現了面向物件思想中的繼承和多型性這兩大特性,在C++語言裡應用極廣。比如在微軟的MFC類庫中,你會發現很多函式都有virtual關鍵字,也就是說,它們都是虛擬函式。難怪有人甚至稱虛擬函

CSS3彈性佈局內容對齊justify-content屬性使用

內容對齊(justify-content)屬性應用在彈性容器上,把彈性項沿著彈性容器的主軸線(main axis)對齊。 該操作發生在彈性長度以及自動邊距被確定後。 它用來在存在剩餘空間時如何加以分配,也會在發生內容溢位時影響專案的對齊。 注意:彈性佈局中有兩個基本術語main axis和c

Tire樹字典樹資料結構圖解及模板

先在這裡放模板,具體圖解回去再發 #include <map> #include <queue> #include <cstdlib> #include <cm

牛客網暑期ACM多校訓練營第一場 J題

牛客網J題在比賽時是通過率最高的一道題,但是這道題對於時間的複雜度要求比較高。在比賽的時候,很多隊伍提交的程式都以”執行超時“而結束。那就讓我們先來看看這道看似簡單的題。 Different Integers 題目描述 Given a sequence of integers

Android 6.0許可權機制及開發流程

許可權機制變更的背景 在Android6.0之前,app在安裝時會提示使用者此app需要使用哪些許可權,但使用者只能選擇同意或拒絕安裝,而不能單獨對某項許可權進行授予或拒絕。只要使用者選擇了安裝,即表示使用者接受了app對這些許可權的使用,如果使用者不希望app獲取某些涉及隱

ImageView的setScaleTypeandroid:scaleType方法使用

setScaleType(android:scaleType)方法必須在ImageView設定內容(前景)圖片後才有效果,背景是沒有效果的,即xml檔案中為android:src(程式碼中為setImageDrawable(drawable);setImageBitmap(bm);setImageR