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;
}
}