日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > htmlcss > QQ第三方登陸及同步內容到騰訊微博,騰訊空間,朋友網

QQ第三方登陸及同步內容到騰訊微博,騰訊空間,朋友網

來源:程序員人生   發布時間:2015-01-23 08:55:59 閱讀次數:13929次

1、開發前準備工作

1 進入http://connect.qq.com進行登陸,然后點擊網站接入(根據需求,如果需要移動利用接入點擊移動利用接入)。以下例子為網站接入。

2 創建利用頁面中,將鼠標放在”驗證”按鈕上,會彈出1個小窗口,將要復制的內容復制下來放在你網站的首頁對應位置,然后點擊”開始驗證”按鈕


2、開發

1 將該代碼放入你網站登陸頁面

<a href='https://graph.qq.com/oauth2.0/authorize?client_id=YOUR_APPID&response_type=code&scope=all&status=LEO&redirect_uri=YOUR_REDIRECT_URI'> <img border="0"alt="QQ登錄" src="http://qzonestyle.gtimg.cn/qzone/vas/opensns/res/img/Connect_logo_1.png"></img> </a>

按鈕圖片下載官方地址:

http://wiki.connect.qq.com/%E7%BD%91%E7%AB%99%E5%89%8D%E7%AB%AF%E9%A1%B5%E9%9D%A2%E8%A7%84%E8%8C%83#1..E4.BD.BF.E7.94.A8.E8.85.BE.E8.AE.AF.E6.8F.90.E4.BE.9B.E7.9A.84.E6.A0.87.E5.87.86.E2.80.9CQQ.E7.99.BB.E5.BD.95.E2.80.9D.E6.A0.87.E8.AF.86

注意修改a標簽中href里面client_id后面的值改成你利用的appid,status的值可以改成你想設置的值,可以用于驗證是不是來你利用的要求。redirect_uri是你的回調地址,該回調地址用于成功登陸后的操作。Scope的值還可以是其他值,scope不填時默許為get_user_info。具體請參考官方:http://wiki.connect.qq.com/api%E5%88%97%E8%A1%A8

2 進入到你網址的QQ登陸頁面,點擊QQ登陸圖標,如果出現回調地址不合法的提示,請參考官方進行回調地址修改,官方地址以下:

http://wiki.connect.qq.com/%E5%9B%9E%E8%B0%83%E5%9C%B0%E5%9D%80%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E5%8F%8A%E4%BF%AE%E6%94%B9%E6%96%B9%E6%B3%95

1切順暢出現以下頁面:


3 獲得access_token和openid方法我寫在回調action中,具體代碼以下:


package com.wingo.action.config;

import java.io.IOException;

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

import org.apache.struts2.ServletActionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.wingo.util.CommonUtil;
import com.wingo.util.ConfigUtil;

public class TencentLoginAction {
    private static Logger log = LoggerFactory.getLogger(TencentLoginAction.class);
    HttpServletRequest request = ServletActionContext.getRequest();
    HttpServletResponse response = ServletActionContext.getResponse();
    public String execute(){
        String code = request.getParameter("code");
        request.setAttribute("code", code);
        
        /* 獲得access_token
         * 成功后返回信息格式access_token=BA03E5Bxxxxxx950&expires_in=7776000&refresh_token=8972279xxxxxxF8752F
         * 1般access_token有效期是3個月
         */
        String parames = "grant_type=authorization_code&client_id="+ConfigUtil.CLIENT_ID+"&client_secret="+ConfigUtil.CLIENT_SECRET+"&code="+code+"&redirect_uri="+ConfigUtil.REDIRECT_URI;
        String access_result = CommonUtil.httpsRequest(ConfigUtil.TOKEN_URL, "GET", parames);
        if(access_result.contains("callback")){
        /*當返回的access_token是callback( {"error":100019,"error_description":"code to access token error"} )類似的數據;
        * 表示獲得access_token失敗,需要返回點擊QQ登陸頁面讓用戶重新登陸授權
        */
            try {
                response.sendRedirect("登陸頁面");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }else {
            String access_token = access_result.split("&")[0];
            request.setAttribute("access_token", access_token);
            /* 獲得openid
             * 成功后返回信息格式:callback( {"client_id":"10xxxxx18","openid":"DDxxxxxxxxxxx587"} );
             */
            String open_id = CommonUtil.httpsRequest(ConfigUtil.OPENID_URL, "GET", access_token);
            request.setAttribute("openid", open_id);
            
            if(open_id.contains("error")){
                /*當返回的open_id是callback( {"error":100007,"error_description":"param access token is wrong or lost "} );類似的數據;
                 * 表示獲得open_id失敗,需要返回點擊QQ登陸頁面讓用戶重新登陸授權
                 */
                try {
                    response.sendRedirect("登陸頁面");
                } catch (IOException e) {
                    e.printStackTrace();
                }    
            }else {
                String openId = open_id.substring(open_id.indexOf("openid")+9, open_id.lastIndexOf("""));
                request.setAttribute("myOpenId", openId);
                //TODO 我們可以將access_token與openid1起存入數據庫
                
                /*發布1條不帶圖片的騰訊微博
                 *(注意:微博內容140個漢子,即420字節。若在此處@好友,需要填寫好友的微博賬號而非昵稱)
                 * 默許返回json格式
                 * 如:{"data":{"id":"466544017145386","time":1421201332},"errcode":0,"msg":"ok","ret":0,"seqid":6104013246275818942}
                 * 其中ret為0表示成功
                 */
                parames = access_token+"&oauth_consumer_key="+ConfigUtil.CLIENT_ID+"&openid="+openId+"&content=LEO測試發布1條不帶圖片的騰訊微博";
                String reslut = CommonUtil.httpsRequest(ConfigUtil.ADD_T_URL, "POST", parames);
                request.setAttribute("reslut", reslut);
            }
        }
        
        return "test";
    }    
}
上面相干的工具類代碼以下:

package com.wingo.util;


import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.ConnectException;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


CommonUtil工具類
/**
 * 通用工具類
 * @author 李欣樺
 * @date 2014⑴1⑵1下午9:10:30
 */
public class CommonUtil {
    private static Logger log = LoggerFactory.getLogger(CommonUtil.class);
    /**
     * 發送https要求
     *
     * @param requestUrl 要求地址
     * @param requestMethod 要求方式(GET、POST)
     * @param outputStr 提交的數據
     * @return 返回微佩服務器響應的信息
     */
    public static String httpsRequest(String requestUrl, String requestMethod, String outputStr) {
        try {
            // 創建SSLContext對象,并使用我們指定的信任管理器初始化
            TrustManager[] tm = { new MyX509TrustManager() };
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
            sslContext.init(null, tm, new java.security.SecureRandom());
            // 從上述SSLContext對象中得到SSLSocketFactory對象
            SSLSocketFactory ssf = sslContext.getSocketFactory();
            URL url = new URL(requestUrl);
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
            conn.setSSLSocketFactory(ssf);
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            // 設置要求方式(GET/POST)
            conn.setRequestMethod(requestMethod);
            conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
            // 當outputStr不為null時向輸出流寫數據
            if (null != outputStr) {
                OutputStream outputStream = conn.getOutputStream();
                // 注意編碼格式
                outputStream.write(outputStr.getBytes("UTF⑻"));
                outputStream.close();
            }
            // 從輸入流讀取返回內容
            InputStream inputStream = conn.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf⑻");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String str = null;
            StringBuffer buffer = new StringBuffer();
            while ((str = bufferedReader.readLine()) != null) {
                buffer.append(str);
            }
            // 釋放資源
            bufferedReader.close();
            inputStreamReader.close();
            inputStream.close();
            inputStream = null;
            conn.disconnect();
            return buffer.toString();
        } catch (ConnectException ce) {
            log.error("連接超時:{}", ce);
        } catch (Exception e) {
            log.error("https要求異常:{}", e);
        }
        return null;
    }
    public static String urlEncodeUTF8(String source){
        String result = source;
        try {
            result = java.net.URLEncoder.encode(source,"utf⑻");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return result;
    }
}

ConfigUtil工具類:

package com.wingo.util;

public class ConfigUtil {
    //利用appid
    public static final String CLIENT_ID= "101XXXXXX18";
    //利用appsecret
    public static final String CLIENT_SECRET = "21aXXXXXXXXXXXX86";
    //授權成功后的回調地址
    public static final String REDIRECT_URI = "http://loginXXXXXXXXte.action";
    //獲得token的url(GET)獲得到access_token后有效期3個月
    public static final String TOKEN_URL = "https://graph.qq.com/oauth2.0/token";
    //獲得openid的url(GET)
    public static final String OPENID_URL = "https://graph.qq.com/oauth2.0/me";
    //發布1條不帶圖片的騰訊微博(POST)
    public static final String ADD_T_URL = "https://graph.qq.com/t/add_t";
}

package com.wingo.util;

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;

MyX509TrustManager工具類:
/**
 * 信任管理器
 * @author 李欣樺
 * @date 2014⑴1⑵1下午9:15:08
 */
public class MyX509TrustManager implements X509TrustManager {

    // 檢查客戶端證書
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    }

    // 檢查服務器端證書
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    }

    // 返回受信任的X509證書數組
    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }
}
上面回調方法中獲得access_token,openid 時也能夠根據自己的需要傳其他參數。

官方地址:http://wiki.connect.qq.com/%E4%BD%BF%E7%94%A8authorization_code%E8%8E%B7%E5%8F%96access_token

除發布騰訊微博,還可以利用其他api獲得你想要的功能。api列表官方地址:http://wiki.connect.qq.com/api%E5%88%97%E8%A1%A8。具體使用方法可以參考上面回調地址中發布騰訊微博的代碼。

4  利用騰訊開發平臺組件可以分享內容到QQ空間和朋友網(在彈出頁面,用戶也能夠選擇是不是分享到騰訊微博)。該組件不需要用戶授權也可以使用,當沒有騰訊用戶是登錄狀態時(相對騰訊網),彈出的分享界面會讓分享用戶先登錄。官方網址:http://connect.qq.com/intro/share

例子以下:

<div> <script type="text/javascript"> (function(){ var p = { url:location.href, showcount:'1',/*是不是顯示分享總數,顯示:'1',不顯示:'0' ,分享總數是以上面的url值統計的總數*/ desc:'我的分享理由',/*默許分享理由(可選),140漢字之內*/ summary:'這是我的摘要',/*分享摘要(可選)*/ title:'這是我的標題',/*分享標題(可選)*/ site:'分享來源:LEO測試',/*分享來源 如:騰訊網(可選)*/ pics:'http://img4.imgtn.bdimg.com/it/u=3654516648,56113462&fm=23&gp=0.jpg', /*分享圖片的路徑(可選)*/ style:'202',/*分享按鈕的樣式,下面的寬高亦為分享按鈕的寬高*/ width:105, height:31 }; var s = []; for(var i in p){ s.push(i + '=' + encodeURIComponent(p[i]||'')); } document.write(['<a version="1.0" class="qzOpenerDiv" href="http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?',s.join('&'),'" target="_blank">分享</a>'].join('')); })(); </script> </div> <script type="text/javascript" src="<%=basePath%>/common/js/jquery⑴.7.js"></script> <script src="http://qzonestyle.gtimg.cn/qzone/app/qzlike/qzopensl.js#jsdate=20111201" charset="utf⑻"></script>

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美专区在线 | 99久久久久国产精品免费 | 我不卡手机影院 | 日韩一级免费 | 国产精品免费一区二区三区在线观看 | 成人精品一区二区三区校园激情 | 久久视频一区 | 秋霞视频在线 | 国产日韩欧美在线影视 | 国产一区二区三区影视 | 亚洲一区二区在线视频 | 国产伦精品一区二区三区 | 亚洲成人一区二区 | 一区在线观看视频 | 久久精品网站免费观看 | 亚洲一区二区三区免费在线观看 | 91在线精品一区二区 | 日韩精品极品视频 | 成人av在线网址 | 97视频在线免费观看 | 麻豆视频免费在线播放 | 国产一区免费观看 | 久热久 | 日韩三级网 | 亚洲综合色一区 | 香蕉久久久精品 | 国产精品毛片一区二区三区 | 99久热 | 欧美日韩中文在线 | 精品无码久久久久久国产 | 午夜黄色大片 | 欧美一区二区免费视频 | 91精品一区二区三区久久久久久 | 一区二区三区久久 | 中文字幕在线一区二区三区 | 黄色毛片小视频 | 国产亚洲欧美一区二区三区 | 久久久久久九九 | 超黄网站在线观看 | 欧美黄色片 | 久久国产精品一区 |