【第三方 授權】網頁第三方授權

0、通用流程

(1)去第三方填寫必要的材料,申請獲取需要的信息(比如appid,appsecret等),如果需要打通app和網頁應用(或多個網頁應用之間打通),也需要去指定地方申請打通
(2)通過第三方提供的sdk,或者我們自己的一箇中轉網址,跳轉到第三方的網址並帶上指定的參數
(3)第三方網址通過網址參數,得知我們應用身份,用戶登錄第三方的賬戶後,第三方會帶上參數回調到我們的回調網址
(4)在我們回調網址上拿去參數(類似一次性使用的code)後,配合appid、appsecret等,調用接口,可以獲取用戶的唯一身份標識(openid之類,但openid只能用於識別單個應用中用戶身份唯一,對於需要打通的,需要通過unionid作爲打通的唯一身份標識,同一個用戶在不同應用間的openid不同)

 

1、微信授權

(1)使用場景:
微信內網頁(通過瀏覽器頭信息判斷)使用微信公衆號做授權,
pc網頁上使用二維碼掃一掃微信登錄的爲微信開放平臺的網頁應用(如果有多個選項,一般提供給用戶自行選擇),
手機瀏覽器打開,一般來說前兩種方式都不合適,通常手機瀏覽器就隱藏微信授權登錄入口

(2)資料填寫與申請:
微信公衆號:
微信公衆平臺申請認證的服務號(服務號功能比訂閱號齊全),
如果需要和app打通,或者多個公衆號之間打通,申請完服務號之後,去微信開放平臺填寫資料綁定(app和網頁可以多個綁定在一起,但有一定上限)

網頁應用:
去微信開放平臺填寫資料申請網頁應用,多個應用(和app)的綁定也是在微信開放平臺(app和網頁可以多個綁定在一起,但有一定上限)

(3)代碼接入:
第一步:跳轉第三方

微信公衆號:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
通常爲,混編或者我們跳轉到我們自己的中轉地址,由php代碼直接先通過接口獲取需要用的參數,然後拼接好地址,跳轉到第三方(例如,交友項目裏授權常會引入的auth.php文件,具體不贅述,主要爲後端處理,有興趣的可以看參考文檔或者我們自己的代碼)

需要注意的是:snsapi_base和snsapi_userinfo,分爲2種授權模式,snsapi_base爲靜默授權,最終只能拿到用戶的openid而無法獲取到其它信息比如用戶頭像、暱稱、性別、城市等等,snsapi_userinfo需要用戶同意(如果用戶不同意,iOS會直接退出內嵌瀏覽器界面,Android會白屏,且無法對此情況處理,所以只需考慮用戶同意授權情況),可以拿到openid、unionid(如果有打通多個應用)、暱稱、性別、省份、城市、國家、頭像信息。

微信開放平臺網頁應用:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html

微信開放平臺提供sdk,
(1)在頁面中先引入如下JS文件(支持https):
http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js
(2)在需要使用微信登錄的地方實例以下JS對象:
var obj = new WxLogin({
  self_redirect: true,
  id: "login_container",
  appid: "",
  scope: "snsapi_login",
  redirect_uri: "",
  state: "",
  style: "",
  href: ""
});
具體參數參考文檔說明,除了固定的參數,和應用相關的參數一般從配置讀取或者從後端接口獲得

第二步:第三方回調

第三方回調的時候,會帶上臨時票據code,5-10分鐘內有效,只可使用一次,一般這個回調地址也會由php負責處理,獲取到code後,通過接口驗證票據有效性,並獲取需要的信息,openid和其它用戶信息等,一般回到我們頁面的時候已經獲取到需要使用的信息,可以通過頁面變量獲取到,或者我們自己服務的token和後端進行交互了

 

2、QQ授權

(1)使用場景:沒有限制,有網頁的地方就可以用,通常在QQ(手機客戶端,通過瀏覽器頭信息判斷)裏,如果有QQ授權選項就默認走此通道,不用給用戶選擇(官方說法,還有專門的jssdk可用,以現有經驗來說用一套即可)

(2)資料填寫與申請:
QQ互聯申請網站應用,可能需要放代碼段到我們的網站上來認證此網站域名屬於我們,如果需要和app打通,申請審覈通過之後,需要發郵件給[email protected],QQ互聯申請打通的郵箱,按照特定格式發送郵件,等待打通
具體申請和打通的操作可以看這篇blog:https://blog.csdn.net/snow_finland/article/details/52511664

(3)代碼接入:

第一步:跳轉第三方

官方提供php的sdk,所以用自己的php的網址作爲中轉頁面,通過php的sdk,可直接跳轉到第三方進行授權(如需增加回調參數,需要去sdk裏做一下改動)

第二步:第三方回調

第三方回調的時候,會帶上臨時票據code,通過php的sdk,可以驗票據,並拿到用戶信息(如果有和app打通,那麼還可以拿到unionid),一般回到我們頁面的時候已經獲取到需要使用的信息,可以通過頁面變量獲取到,或者我們自己服務的token和後端進行交互了

PHP的sdk下載地址:https://wiki.connect.qq.com/sdk%E4%B8%8B%E8%BD%BD

 

3、微博授權

(1)使用場景:沒有限制,有網頁的地方就可以用,通常在微博(手機客戶端,通過瀏覽器頭信息判斷)裏,如果有weibo授權選項就默認走此通道,不用給用戶選擇(官方說法,還有專門的jssdk可用,以現有經驗來說用一套即可)

(2)資料填寫與申請:
新浪微博開放平臺申請網頁應用,需要放代碼段到我們的網站上來認證此網站域名屬於我們,可以和app打通(但由於年代久遠,不記得如何操作打通步驟,需要自行摸索)

(3)代碼接入:
同QQ授權

PHP的sdk下載地址:https://open.weibo.com/wiki/SDK

 

4、Facebook授權

(1)使用場景:沒有限制,有網頁的地方就可以用,通常在Facebook(手機客戶端,通過瀏覽器頭信息判斷)裏,如果有Facebook授權選項就默認走此通道,不用給用戶選擇(新版使用jssdk,之前有使用php的sdk作爲中轉)

(2)資料填寫與申請:
Facebook for Developers(https://developers.facebook.com),去這裏註冊申請應用,注意app和網頁如果需要打通,直接使用同一個appid即可(好像不需要填寫多餘資料,如果已經有app應用的話)

(3)代碼接入:

一:JSSDK

JSSDK文檔地址:https://developers.facebook.com/docs/javascript

第一步:引入jssdk

<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId: '<?php echo $global_config['facebook_app_id']; ?>',
      autoLogAppEvents: true,
      xfbml: true,
      version: 'v6.0'
    });
  };
</script>
<script async defer src="https://connect.facebook.net/en_US/sdk.js"></script>

第二步:在需要獲取用戶信息的地方,先檢查登錄狀態,如果已經登錄直接獲取用戶信息;否則調起登錄

FB.getLoginStatus(function(response) {
  console.log('FB.getLoginStatus:', response);
  if (response.authResponse && response.authResponse.userID) {
    // response.authResponse.accessToken,這裏即爲token,通過token,調用第三方接口可以獲取到用戶身份標識和用戶信息,response.authResponse.userID等於第三方唯一用戶標識符,相當於微信的unionid/openid,按需判斷即可
    // todo 一般爲和自己服務端交互,把用戶信息或id傳過去
  } else {
    FB.login(function(response) {
      // alert('FB.login:' + JSON.stringify(response));
      console.log('FB.login:', response);
      if (response.authResponse && response.authResponse.userID) {
        // response.authResponse.accessToken,這裏即爲token,通過token,調用第三方接口可以獲取到用戶身份標識和用戶信息,response.authResponse.userID等於第三方唯一用戶標識符,相當於微信的unionid/openid,按需判斷即可
        // todo 一般爲和自己服務端交互,把用戶信息或id傳過去
      } else {
        console.log('User cancelled login or did not fully authorize.');
        oauthFlag = false
      }
    });
  }
});

二、PHPSDK

PHPSDK文檔地址:https://developers.facebook.com/docs/reference/php

步驟同QQ授權,以我們自己的php地址作爲中轉,調用第三方sdk

 

5、Twitter授權

(1)使用場景:沒有限制,有網頁的地方就可以用(之前用的不多)

(2)資料填寫與申請:
Twitter Developer(https://developer.twitter.com),去這裏註冊申請應用,可以和app打通(但由於年代久遠,不記得如何操作打通步驟,需要自行摸索)(官方說法,還有專門的jssdk可用,以現有經驗來說用一套即可)

(3)代碼接入:
同QQ授權

Twitter授權登錄文檔地址:https://developer.twitter.com/en/docs/basics/authentication/guides/log-in-with-twitter

PHPSDK文檔地址:https://developer.twitter.com/en/docs/developer-utilities/twitter-libraries

JSSDK接入方式文檔:https://developer.twitter.com/en/docs/twitter-for-websites/javascript-api/guides/set-up-twitter-for-websites

 

6、Line授權

(1)使用場景:沒有限制,有網頁的地方就可以用(之前用的不多)

(2)資料填寫與申請:
LINE Developers(https://developers.line.biz/zh-hant/),去這裏註冊申請應用,注意app和網頁如果需要打通,直接使用同一個appid即可(不需要填寫多餘資料,只要同時勾選上web和app應用即可,web需要填寫準確的回調地址,可填寫多個)

(3)代碼接入:
同QQ授權(提醒:由於使用的是PHP的方式,在code驗證票據的時候是通過服務器訪問LINE的服務,需要此服務器能訪問到LINE的服務,或者通過代理方式訪問)

Line授權登錄文檔地址:https://developers.line.biz/en/docs/line-login/integrate-line-login/

無官方PHPSDK,github有如下地址:(之前使用的是第一個庫做的修改(原庫存在和LINE對接的一些錯誤,具體詳見Line的文檔進行修改))
https://github.com/makorn645/PHP-line-login-sdk
https://github.com/chez14/line-sdk-php
https://github.com/shrekuu/line-web-login-v2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章