天天看點

微網誌登入、微信登入、qq登入java技術實作

為了增加使用者體驗,使用者能夠快速的注冊登入,第三方賬号進行登入注冊的的需求也就由此而誕生

<a href="http://s1.51cto.com/wyfs02/M01/88/60/wKiom1fzcGmw7PCJAAIosTb8rHY899.png-wh_500x0-wm_3-wmp_4-s_3686603957.png" target="_blank"></a>

1、微信

 1) 微信登入也是最坑人的,需要花300大洋成為開發者賬戶,沒辦法誰讓微信使用者群體大呢是以也就隻好認了;然後登入網站背景需要建立網站應用,填寫授權回調域(登入網站的域名)隻填寫域名即可

 2)檢視微信提供的接口,寫java代碼

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

<code>    </code><code>public</code> <code>void</code> <code>wx() {</code>

<code>        </code><code>try</code> <code>{</code>

<code>            </code><code>response.sendRedirect(</code><code>"https://open.weixin.qq.com/connect/qrconnect?appid="</code>

<code>                    </code><code>+ ShareLoginDict.WEIXINKEY.getState()</code>

<code>                    </code><code>+ </code><code>"&amp;redirect_uri="</code>

<code>                    </code><code>+ URLEncoder.encode(ShareLoginDict.WEIXINURL.getState()) </code>

<code>                    </code><code>+ </code><code>"&amp;response_type=code&amp;scope=snsapi_login&amp;state=66666#wechat_redirect"</code><code>);</code>

<code>        </code><code>} </code><code>catch</code> <code>(IOException e) {</code>

<code>            </code><code>// TODO Auto-generated catch block</code>

<code>            </code><code>e.printStackTrace();</code>

<code>        </code><code>}</code>

<code>    </code><code>}</code>

<code>@Override</code>

<code>    </code><code>public</code> <code>Result userwx(String return_code) {</code>

<code>        </code><code>Result result = </code><code>new</code> <code>Result();</code>

<code>        </code><code>Map&lt;String, Object&gt; token = (Map&lt;String, Object&gt;) WeiXinAPI</code>

<code>                </code><code>.getToken(return_code);</code>

<code>        </code><code>if</code> <code>(token != </code><code>null</code> <code>&amp;&amp; token.get(</code><code>"access_token"</code><code>) != </code><code>null</code><code>) {</code>

<code>            </code><code>Map&lt;String, Object&gt; user = (Map&lt;String, Object&gt;) WeiXinAPI</code>

<code>                    </code><code>.getWxUser(token.get(</code><code>"access_token"</code><code>).toString(),</code>

<code>                            </code><code>token.get(</code><code>"openid"</code><code>).toString());</code>

<code>            </code><code>if</code> <code>(user != </code><code>null</code><code>) {</code>

<code>                </code><code>result.addModel(</code><code>"openid"</code><code>, user.get(</code><code>"openid"</code><code>));</code>

<code>                </code><code>result.addModel(</code><code>"nickname"</code><code>, user.get(</code><code>"nickname"</code><code>));</code>

<code>                </code><code>result.addModel(</code><code>"headimgurl"</code><code>, user.get(</code><code>"headimgurl"</code><code>));</code>

<code>                </code><code>result.addModel(</code><code>"data"</code><code>, </code><code>"data_success"</code><code>);</code>

<code>            </code><code>}</code><code>else</code><code>{</code>

<code>                </code><code>result.addModel(</code><code>"data"</code><code>, </code><code>"data_null"</code><code>);</code>

<code>            </code><code>}</code>

<code>        </code><code>}</code><code>else</code><code>{</code>

<code>            </code><code>result.addModel(</code><code>"data"</code><code>, </code><code>"data_null"</code><code>);</code>

<code>        </code><code>return</code> <code>result;</code>

當使用者通過微信登入時,調用微信接口擷取使用者接口傳回微信端的openid,昵稱,頭像;然後将此資訊存入到浏覽器的cookie中,當使用者浏覽其他資訊時,辨識如果是使用者是用微信登入的,攔截器直接從cookie中擷取使用者的資訊顯示昵稱和頭像,并同時判斷該openid是否和資料庫中使用者做綁定,如果沒有綁定提示使用者注冊。

2、qq登入

 1)qq互聯建立應用

接入QQ登入前,網站需首先進行申請,獲得對應的appid與appkey,以保證後續流程中可正确對網站與使用者進行驗證與授權。

申請appid和appkey的用途

 appid :應用的唯一辨別。在OAuth2.0認證過程中,appid的值即為oauth_consumer_key的值。

appkey:appid對應的密鑰,通路使用者資源時用來驗證應用的合法性。在OAuth2.0認證過程中,appkey的值即為oauth_consumer_secret的值。

 2)檢視QQ提供的接口,寫java代碼

36

37

38

39

40

41

<code>public</code> <code>void</code> <code>qq() {</code>

<code>            </code><code>response.sendRedirect(</code><code>"https://graph.qq.com/oauth2.0/authorize?response_type=code&amp;client_id="</code>

<code>                    </code><code>+ ShareLoginDict.QQKEY.getState()</code>

<code>                    </code><code>+ ShareLoginDict.QQURL.getState() + </code><code>"&amp;scope=get_user_info"</code><code>);</code>

<code>    </code><code>public</code> <code>Result userqq(String return_code) {</code>

<code>        </code><code>Map&lt;String, Object&gt; token = (Map&lt;String, Object&gt;) QQAPI</code>

<code>            </code><code>Map&lt;String, Object&gt; tokenme = (Map&lt;String, Object&gt;) QQAPI</code>

<code>                    </code><code>.getTokenMeOpenId(token.get(</code><code>"access_token"</code><code>).toString());</code>

<code>            </code><code>if</code> <code>(tokenme != </code><code>null</code> <code>&amp;&amp; tokenme.get(</code><code>"openid"</code><code>) != </code><code>null</code><code>) {</code>

<code>                </code><code>Map&lt;String, Object&gt; user = (Map&lt;String, Object&gt;) QQAPI</code>

<code>                        </code><code>.getQqUser(token.get(</code><code>"access_token"</code><code>).toString(),</code>

<code>                                </code><code>tokenme.get(</code><code>"openid"</code><code>).toString());</code>

<code>                </code><code>if</code> <code>(user != </code><code>null</code><code>) {</code>

<code>                    </code><code>result.addModel(</code><code>"openid"</code><code>, tokenme.get(</code><code>"openid"</code><code>));</code>

<code>                    </code><code>result.addModel(</code><code>"nickname"</code><code>, user.get(</code><code>"nickname"</code><code>));</code>

<code>                    </code><code>result.addModel(</code><code>"figureurl"</code><code>, user.get(</code><code>"figureurl"</code><code>));</code>

<code>                    </code><code>result.addModel(</code><code>"data"</code><code>, </code><code>"data_success"</code><code>);</code>

<code>                </code><code>}</code><code>else</code><code>{</code>

<code>                    </code><code>result.addModel(</code><code>"data"</code><code>, </code><code>"data_null"</code><code>);</code>

<code>                </code><code>}</code>

<code>    </code><code>}  </code>

當使用者通過QQ登入時,調用QQ接口擷取使用者接口傳回QQ端的openid,昵稱,頭像;然後将此資訊存入到浏覽器的cookie中,當使用者浏覽其他資訊時,辨識如果是使用者是用微信登入的,攔截器直接從cookie中擷取使用者的資訊顯示昵稱和頭像,并同時判斷該openid是否和資料庫中使用者做綁定,如果沒有綁定提示使用者注冊。

3 微網誌登入

 1)微網誌建立應用

 2)檢視微網誌提供的接口,寫java代碼

<code>public</code> <code>void</code> <code>wb() {</code>

<code>            </code><code>response.sendRedirect(</code><code>"https://api.weibo.com/oauth2/authorize?client_id="</code>

<code>                    </code><code>+ ShareLoginDict.WEIBOKEY.getState()</code>

<code>                    </code><code>+ ShareLoginDict.WEIBOURL.getState()</code>

<code>                    </code><code>+ </code><code>"&amp;response_type=code"</code><code>);</code>

<code>    </code><code>public</code> <code>Result userwb(String return_url, String return_code) {</code>

<code>        </code><code>Map&lt;String, Object&gt; token = (Map&lt;String, Object&gt;) WeiBoAPI.getToken(</code>

<code>                </code><code>return_url, return_code);</code>

<code>            </code><code>Map&lt;String, Object&gt; user = (Map&lt;String, Object&gt;) WeiBoAPI</code>

<code>                    </code><code>.getWbUser(token.get(</code><code>"access_token"</code><code>).toString(),</code>

<code>                            </code><code>token.get(</code><code>"uid"</code><code>).toString());</code>

<code>                </code><code>result.addModel(</code><code>"name"</code><code>, user.get(</code><code>"screen_name"</code><code>));</code>

<code>                </code><code>result.addModel(</code><code>"pic"</code><code>, user.get(</code><code>"avatar_large"</code><code>));</code>

<code>                </code><code>result.addModel(</code><code>"idstr"</code><code>, user.get(</code><code>"idstr"</code><code>));</code>

當使用者通過微網誌登入時,調用微網誌接口擷取使用者接口傳回微網誌端的idstr,昵稱,頭像;然後将此資訊存入到浏覽器的cookie中,當使用者浏覽其他資訊時,辨識如果是使用者是用微信登入的,攔截器直接從cookie中擷取使用者的資訊顯示昵稱和頭像,并同時判斷該openid是否和資料庫中使用者做綁定,如果沒有綁定提示使用者注冊。

本文轉自 xinsir999 51CTO部落格,原文連結:http://blog.51cto.com/xinsir/1858721,如需轉載請自行聯系原作者