1. 程式人生 > >web接入QQ第三方登入

web接入QQ第三方登入

接入qq第三方登入比接入微博第三方登入要麻煩,主要是因為前期的準備工作較麻煩,需要進行域名備案,備案通過後才能在qq互聯平臺上通過應用稽核。

我在做專案的時候,備案是通過阿里雲伺服器進行的,備案大概需要半個月的時間,所以這個週期還是很長的。備案的流程很簡單,就是需要比較長的時間,這裡就不做介紹了。

qq登入和微博登入的基本開發過程是差不多的,所以在這裡我就不做特別詳細的介紹了。

下面直接介紹如何接入qq第三方登入吧。

首先需要登入qq互聯的網站,完成使用者開發者資訊的驗證。

這裡寫圖片描述

稽核通過後,需要在qq互聯上建立應用,並進行稽核。沒有通過備案的域名是不能通過稽核的,所以需要先進行域名備案。

稽核通過後就可以獲得應用的appid和appkey。

這裡寫圖片描述

下面我們就可以進行專案的開發了。

下載qq互聯的java sdk
http://wiki.connect.qq.com/sdk%E4%B8%8B%E8%BD%BD
sdk中包含了專案的demo程式,demo像我們展示了接入第三方登入的流程。
(1)編寫配置檔案qqconnectconfig.properties
這裡面有三個值需要我們修改,分別是appid,appkey和redirect_URI。
前面兩個值可以通過qq互聯的應用管理獲得,redirect_URI是值使用第三方登入頁面登入成功後的跳轉地址,這個地址需要與qq互聯上保持一致,不然跳轉到qq登入頁面會報錯。
這裡寫圖片描述

(2)引入開發需要的jar包
專案如果詞語maven進行管理的話,可以在pom.xml中加入下面的依賴

    <dependency>
        <groupId>net.gplatform</groupId>
        <artifactId>Sdk4J</artifactId>
        <version>2.0</version>
    </dependency>

(3)編寫跳轉按鈕事件
這裡使用springmvc來進行開發,這個controller相應qq.do的請求,這個請求呼叫response.sendRedirect(new Oauth().getAuthorizeURL(request));會將頁面重定向到qq第三方的登入頁面。

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.qq.connect.QQConnectException;
import com.qq.connect.oauth.Oauth;

@Component
@RequestMapping("/qq.do")
public class qqloginController {

    @RequestMapping
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        response.setContentType("text/html;charset=utf-8");
        try {
            response.sendRedirect(new Oauth().getAuthorizeURL(request));
        } catch (QQConnectException e) {
            e.printStackTrace();
        }

        return null;
    }
}

(4)編寫回調controller

使用者在第三方登入頁面登入成功後,我們就可以進行登入資訊獲取了,這個時候頁面會自動跳轉到我們上面配置的redirect_URI的地址。

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.qq.connect.api.OpenID;
import com.qq.connect.api.qzone.UserInfo;
import com.qq.connect.javabeans.AccessToken;
import com.qq.connect.javabeans.qzone.UserInfoBean;
import com.qq.connect.oauth.Oauth;

@Component
@RequestMapping("/afterlogin.do")
public class afterlogin {

    @RequestMapping
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

        try {
            AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);
            String accessToken   = null,
                   openID        = null;
            long tokenExpireIn = 0L;
            if (accessTokenObj.getAccessToken().equals("")) {
                System.out.print("沒有獲取到響應引數");
            }else{
                accessToken = accessTokenObj.getAccessToken();
                tokenExpireIn = accessTokenObj.getExpireIn();
                OpenID openIDObj =  new OpenID(accessToken);
                openID = openIDObj.getUserOpenID();
                UserInfo qzoneUserInfo = new UserInfo(accessToken, openID);
                UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();
                String name = userInfoBean.getNickname();
               System.out.println("歡迎你," + name + "!");

            }

        }catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }
}