1. 程式人生 > >網站接入第三方登入功能:Java開發QQ登入

網站接入第三方登入功能:Java開發QQ登入

 

我的個人部落格:http://www.zjhuiwan.cn

QQ登入確實比自己註冊賬戶登入要方便的多,所以就搞了個QQ登入。QQ互聯開放平臺為第三方網站提供了豐富的API。第三方網站接入QQ互聯開放平臺後,即可通過呼叫平臺提供的API實現使用者使用QQ帳號登入網站功能,且可以獲取到騰訊QQ使用者的相關資訊。

準備工作

首先得去QQ開放平臺註冊個賬號https://connect.qq.com/index.html

 

申請為開發者,需要稽核,稽核通過後建立網站應用,也要稽核。 根據要求填好資料提交稽核就OK。

 

建立好後會得到APPID和APP key。建立應用時填寫的回撥地址很重要(回撥地址可以改的,方便測試),是在QQ登入後執行的。

154157990805028013007.png

 

 

java SDK下載http://qzonestyle.gtimg.cn/qzone/vas/opensns/res/doc/qqConnect_Server_SDK_java_v2.0.zip

 

下載完後把Sdk4J.jar匯入到專案中,還有qqconnectconfig.properties放到資原始檔中。

qqconnectconfig.properties需要修改一些內容。

 

154158017848758031729.png

 

然後就是程式碼了。因為比較簡單,就貼一下吧。

 

前端,通過a標籤來登入。

1

<a  class="qq" href="<%=path%>/qqLogin"><img alt="QQ登入" title="QQ登入" src="img/QQ.png"></a>

 

點選QQ登入,然後就是執行qqLogin,

Controller程式碼

1

2

3

4

5

6

7

8

9

10

11

12

13

14

/**

     * QQ登入

     */

    @RequestMapping("/qqLogin")

    public void qqLogin(HttpServletRequest request, HttpServletResponse response) {

        try {

            response.setContentType("text/html;charset=utf-8");

            response.sendRedirect(new Oauth().getAuthorizeURL(request));

        catch (QQConnectException e) {

            e.printStackTrace();

        catch (IOException e) {

            e.printStackTrace();

        }

    }

彈出QQ登入點選登入後執行回撥方法。就是建立應用時填的

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

/**

     * 登入回撥

     */

    @RequestMapping("回撥路由")

    public String qqCallBack(HttpSession session, HttpServletRequest request, HttpServletResponse response) {

        response.setContentType("text/html;charset=utf-8");

        try {

            AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);

 

            String accessToken = null, openID = null;

            long tokenExpireIn = 0L;

 

            if (accessTokenObj.getAccessToken().equals("")) {

               

                return "404";

            }

 

            accessToken = accessTokenObj.getAccessToken();

            tokenExpireIn = accessTokenObj.getExpireIn();

           

 

            // 利用獲取到的accessToken 去獲取當前用的openid

            OpenID openIDObj = new OpenID(accessToken);

            openID = openIDObj.getUserOpenID();

            

 

            String icon = null, nickName = null, sex = null;

            // 去獲取使用者在Qzone的暱稱等資訊

            com.qq.connect.api.qzone.UserInfo qzoneUserInfo =

                new com.qq.connect.api.qzone.UserInfo(accessToken, openID);

            UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();

 

            if (userInfoBean.getRet() == 0) {

                nickName = userInfoBean.getNickname();

                sex = userInfoBean.getGender();

                if (userInfoBean.getAvatar().getAvatarURL100() == null) {

                    icon = userInfoBean.getAvatar().getAvatarURL50();

                }

                icon = userInfoBean.getAvatar().getAvatarURL100();

                // userInfoBean.getAvatar().getAvatarURL50();

                // userInfoBean.getAvatar().getAvatarURL100();

            }

            // 自己網站的使用者實體類,根據openId查詢是否已存在

            UserInfo userInfo = new UserInfo();

            userInfo.setOpenId(openID);

            UserInfo localUser = userInfoService.selectByOpenId(userInfo);

            if (localUser != null) {

                // 老使用者處理

                //你需要的業務操作

            else {

                // 新使用者處理

                UserInfo userInfos = new UserInfo();

                userInfos.setUserId(Tools.getUniqueId());

                userInfos.setUserName(nickName);

                userInfos.setSex(sex);

                userInfoService.save(userInfos);

                //你需要的業務操作

            }

 

        catch (QQConnectException e) {

            e.printStackTrace();

        }

 

        return "redirect:/index";

    }

 

一個簡單的QQ登入功能就完成了。

154158066691906014189.png

 

 

154158090735407050973.png

PQ_IH7XBF`T5B`_)B2H0A%4.png