php實現第三方登入,百度第三方登入

yi_an發表於2016-09-28

php實現第三方登入,百度登入例子

  1. 配置說明
    1.1 php 版本5.3
    1.2 IDE phpstorm9.0.2

  2. 實現過程
    2.1前期準備
    建議先閱讀 oAuth2.0的相關資料
    http://developer.baidu.com/wiki/index.php?title=docs/oauth
    然後再進行操作,極客學院的第三方登入視訊也可以作為參考
    http://www.jikexueyuan.com/course/1742.html
    2.2具體實現
    1,登入百度開發者中心http://developer.baidu.com/
    百度開發中心
    登入之後,點選【應用管理】,然後點選【建立工程】,填寫好相應的資料。然後我們得到了應用的API KEY和SECRET KEY 如下圖所示。
    應用示例
    接著,在【安全設定】中填寫我們的的授權回撥頁的地址,下圖是我做測試用的。
    授權回撥頁
    2我沒有用官方給的php-sdk ,所以自己寫了一個。下面是專案的目錄。專案目錄
    建議還是先看一下官方的文件或者上面的視訊,來具體操作一下,體會一下oAuth2.0的授權的過程。專案中涉及到的url都是官方文件裡面的,我下面就不做詳細的介紹了。
    首先是config.php

    $serect_key = '4HV51jiSg2OC0WXQnZ2Vqc0Gxu';
    $redirect_url = 'http://localhost/phpfrom0913/baidulogin/callback.php';
    $apibase_url = 'https://openapi.baidu.com/rest/2.0/';
    $logout = 'http://www.baidu.com';//線上除錯使用

    這是用來填寫應用所需要的一些值。包括secret-key,回撥地址,百度應用介面呼叫的基本url資訊,還有重定向用到的url。
    下面是login.php 是登入的介面。
    “`

當我們點選登入的圖片的時候,我們將訪問回撥地址callback.php其程式碼如下:
```<?php
/**
 * Created by PhpStorm.
 * User: tao
 * Date: 2016-09-13
 * Time: 20:50
 */

session_start();
require_once 'config.php';
require_once 'dohttps.php';
$code = $_GET['code'];
if($code){
    $getaccesstoken_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=$code&client_id=$api_key&client_secret=$serect_key&redirect_uri=$redirect_url";
    $httpsobj = new doHttps();
    $https_res = $httpsobj->getdata($getaccesstoken_url);
    $accesstoken = $https_res['access_token'];
    $userinfo_url = $apibase_url.'passport/users/getLoggedInUser'.'?access_token='.$accesstoken;
    $user_res = $httpsobj->getdata($userinfo_url);
    $smallpic = $user_res['portrait'];
    $nickname = $user_res['uname'];
    $_SESSION['accesstoken'] = $accesstoken;
    $_SESSION['nickname'] = $nickname;
    $_SESSION['smallpic'] = $smallpic;
}else{
    echo "<javascript>alert('授權失敗')</javascript>";
}
header("Location: ".'index.php');

其中包含了一個dohttps.php的檔案,,這是用來模擬訪問url以用來獲得對應的get引數,例如code和accesstoken。當程式正確獲取到code的時候就可以完成第三方登入操作了,也可以獲取到使用者相關的第三方的引數值,具體的可以參看官方的文件。

  1. 執行截圖
    登入:登入介面
    跳轉到百度登入介面:
    這裡寫圖片描述
    登入成功,獲取到使用者資訊
    這裡寫圖片描述
    退出登入介面
    這裡寫圖片描述
    可以看出退出的時候出現了錯誤,這是因為config.php中我們寫的重定url和我們建立的百度應用中的安全配置中的域名不對應。如果想要正確退出,我們需要在【安全設定】中配置正確的根域名,這個我線上下的時候沒有測試成功,因為沒有辦法正確填寫根域名。按照安裝官方文件中的說明去做的話,線上的測試是沒有問題的,可是唯一的問題,線上上測試的時候,當我們第一次用百度授權登陸之後,之後成功退出,再次登陸的時候,如果不清除瀏覽器資料的話,就會出現頁面無法訪問的錯誤,提示是請求回撥地址太頻繁。
    至此,我還是沒有解決為什麼會出現我剛剛提到的問題,不知道是不是沒有按照官方的sdk去使用,造成了某個環節記錄無法徹底清除的錯誤,還是自己寫的demo出錯,決定回頭再把sdk試用一遍,看看是否能正確的解決問題,假如有什麼意見,記得戳我。
    把整個demo放到百度雲盤裡面了,假如需要的話,自己下載一下咯,不要嫌棄:)http://pan.baidu.com/s/1o7ONgqm OR 連結:http://pan.baidu.com/s/1dFds6WT 密碼:zpd8

相關文章