網站 asp.net c# 接入QQ第三方登入的方法

龐順龍發表於2019-05-11

網站 asp.net c# 接入QQ第三方登入的方法

1、在qq互聯註冊網站,提交資料  https://connect.qq.com 

2、提交網站接入申請,等待幾個工作日後通過稽核,獲得對應的appid與appkey 

3、下一步就是使用id和key進行網站的接入開發,開發完成後,提交稽核通過即可

4、網站接入開發簡單整理,首先引入授權js檔案,放到需要實現qq登入的頁面

<script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid="網站應用id" data-redirecturi="http://www.80iter.com" charset="utf-8"></script>

5、網站的接入程式碼方式可以參照官方api文件 http://wiki.connect.qq.com/oauth2-0%E5%BC%80%E5%8F%91%E6%96%87%E6%A1%A3 

6、本站基於asp.net 開發,js程式碼如下:

function QQLogin(typeid) {
    //typeid 1使用者後臺qq繫結  2使用者qq登入
    if (QC.Login.check()) {
        QC.Login.signOut();
    }
    var NickName = "";
    var OpenId = "";
    var AccessToken = "";
    QC.Login.showPopup();
    QC.Login.getMe(function (openId, accessToken) {
        OpenId = openId;
        AccessToken = accessToken;
    });
    var paras = {};
    QC.api("get_user_info", paras).success(function (s) {
        NickName = s.data.nickname;
        $.ajax({
            url: "/qqlogin",
            dataType: "json",
            type: "get",
            data: "OpenId=" + OpenId + "&NickName=" + NickName + "&AccessToken=" + AccessToken + "&typeid=" + typeid + "&returnUrl=" + window.location.href,
            error: function (XmlHttpRequest, textStatus, errorThrown) { alert("qq login error...")},
            success: function (d) {
                if (d.result == "1") {
                    if (typeid == "1") {
                        window.location = d.returnval;
                    } else {
                        //登入成功
                        window.location = d.returnval;
                    }
                }
                if (d.result == "0") {
                    //獲取失敗
                    QC.Login.signOut();
                    window.location = d.returnval;
                }
            }
        });
    });
}
c#程式碼如下,僅供參考:

Get["/qqlogin"] = parameters =>
{
    string OpenId = ObjectHelper.Get("OpenId");
    string NickName = ObjectHelper.Get("NickName");
    string AccessToken = ObjectHelper.Get("AccessToken");
    string typeid = ObjectHelper.Get("typeid");
    string returnUrl = string.IsNullOrEmpty(ObjectHelper.Get("returnUrl")) ? "/" : ObjectHelper.Get("returnUrl");

    if (typeid == "1")
    {
        //使用者自主繫結qq
        if (Page.HasLogin)
        {
            //繫結關係
            return JSONHelper.JsonResult(1, "/user/userSettingBind");
        }
        else
        {
            return Response.AsRedirect("/invalid");
        }
    }

    if (typeid == "2")
    {
        //使用者點選登入
        Model.SysUser model = bllSysUser.GetLoginUserInfoByQQOpenId(OpenId);
        if (model != null)
        {
            //模擬登入 
        }
        else
        {
            //沒有賬號繫結過
            return ObjectHelper.JsonResult(0, "/resigerqq?OpenId=" + OpenId + "&NickName=" + NickName + "&AccessToken=" + AccessToken);
        }
    }

    return ObjectHelper.JsonResult(1, returnUrl);
};
7、另外本站使用的是自定義圖示和a標籤的方式開啟qq登入,還有官方另外一種js寫法:

這種js方式是使用系統自帶按鈕登入,但是這樣會彈出新視窗,不喜歡 
//呼叫QC.Login方法,指定btnId引數將按鈕繫結在容器節點中 
QC.Login({ 
//btnId:插入按鈕的節點id,必選 
btnId:"qqLoginBtn", 
//使用者需要確認的scope授權項,可選,預設all 
scope:"all", 
//按鈕尺寸,可用值[A_XL| A_L| A_M| A_S| B_M| B_S| C_S],可選,預設B_S 
size: "B_M"
}, function(reqData, opts){//登入成功 
console.log(reqData, opts); 
}, function(opts){//登出成功 
alert('QQ登入 登出成功'); 
}); 

8、這樣就實現了qq登入

龐順龍最後編輯於:3年前

內容均為作者獨立觀點,不代表八零IT人立場,如涉及侵權,請及時告知。

相關文章