QQ授權登錄


一、你得先去QQ授權登錄官網申請開發者(登錄之后右上角頭像點擊一下填寫申請信息)
二、開發者審核通過之后創建應用
PS:
1、網站名稱必須和后面綁定的域名備案名稱完全一致!!!!不然審核不通過,提示與備案信息不一致
2、網站首頁必須放置QQ登錄的按鈕,然后點擊之后要跳轉到授權頁面,即使沒有審核通過也要有反應,哪怕是錯誤的頁面,例如下圖即可

三、網站應用審核通過之后就可以根據PAI文檔開發授權登錄啦
1、生成授權連接
2、用戶授權登錄后根據回調的code獲取AccessToken
3、再根據AccessToken獲取OpenId
4、再根據AccessToken和OpenId獲取用戶信息,具體返回的信息可參考API文檔

代碼參考如下圖

QQLoginHelper 幫助類

public class QQLoginHelper
    {
        public static string appId = ""; //申請QQ登錄成功后,分配給應用的appid。
        public static string appKey = ""; //申請QQ登錄成功后,分配給應用的appkey。
        public static string redirect_uri = ""; //成功授權后的回調地址,必須是注冊appid時填寫的主域名下的地址。

        /// <summary>
        /// 生成授權連接
        /// </summary>
        /// <param name="state"></param>
        /// <param name="deviceType"></param>
        /// <returns></returns>
        public static string CreateAuthorizeUrl(string state, string deviceType)
        {
            string url = string.Format("{0}?client_id={1}&response_type=code&redirect_uri={2}&state={3}&display={4}&scope=scope", "https://graph.qq.com/oauth2.0/authorize", appId, redirect_uri, state, deviceType);
            return url;
        }

        /// <summary>
        /// 根據回調獲取AccessToken
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public static string GetAccessToken(string code)
        {
            string url = string.Format("https://graph.qq.com/oauth2.0/token?grant_type={0}&client_id={1}&client_secret={2}&code={3}&redirect_uri={4}", "authorization_code", appId, appKey, code, redirect_uri);
            string result = HttpMethodHelper.HttpGet(url);
            string AccessToken = CutString(result, "access_token=", "&expires_in=");
            string ExpiresIn = CutString(result, "&expires_in=", "&refresh_token=");
            string RefreshToken = result.Split(new string[] { "&refresh_token=" }, StringSplitOptions.None)[1];
            return AccessToken;
        }

        /// <summary>
        /// 根據回調獲取OpenId
        /// </summary>
        /// <param name="access_token"></param>
        /// <returns></returns>
        public static string GetOpenId(string access_token)
        {
            string url = string.Format("https://graph.qq.com/oauth2.0/me?access_token={0}", access_token);
            string result = HttpMethodHelper.HttpGet(url);
            string client_id = CutString(result, @"client_id"":""", @""",");
            string openid = CutString(result, @"openid"":""", @"""}");
            return openid;
        }

        /// <summary>
        /// 獲取用戶信息轉換為實體
        /// </summary>
        /// <param name="access_token"></param>
        /// <param name="openid"></param>
        /// <returns></returns>
        public static QQUserInfo GetQQUserInfo(string access_token, string openid)
        {
            string url = string.Format("https://graph.qq.com/user/get_user_info?access_token={0}&oauth_consumer_key={1}&openid={2}", access_token, appId, openid);
            string result = HttpMethodHelper.HttpGet(url, Encoding.UTF8);
            QQUserInfo qqUserInfo = JsonConvert.DeserializeObject<QQUserInfo>(result);
            return qqUserInfo;
        }

        /// <summary>
        /// 獲取用戶信息JSON字符串
        /// </summary>
        /// <param name="access_token"></param>
        /// <param name="openid"></param>
        /// <returns></returns>
        public static string GetQQUserInfoJsonStr(string access_token, string openid)
        {
            string url = string.Format("https://graph.qq.com/user/get_user_info?access_token={0}&oauth_consumer_key={1}&openid={2}", access_token, appId, openid);
            string result = HttpMethodHelper.HttpGet(url, Encoding.UTF8);
            return result;
        }
        public static QQUserInfo GetQQUserInfoTest()
        {
            string url = string.Format("https://graph.qq.com/user/get_user_info?access_token={0}&oauth_consumer_key={1}&openid={2}", "", appId, "");
            string result = HttpMethodHelper.HttpGet(url, Encoding.UTF8);
            QQUserInfo qqUserInfo = JsonConvert.DeserializeObject<QQUserInfo>(result);
            return qqUserInfo;
        }



        /// <summary>
        /// 截取字符串中兩個字符串中的字符串
        /// </summary>
        /// <param name="str">字符串</param>
        /// <param name="startStr">開始字符串</param>
        /// <param name="endStr">結束字符串</param>
        /// <returns></returns>
        public static string CutString(string str, string startStr, string endStr)
        {
            int begin, end;
            begin = str.IndexOf(startStr, 0) + startStr.Length; //開始位置   
            end = str.IndexOf(endStr, begin);            //結束位置     
            return str.Substring(begin, end - begin);   //取搜索的條數,用結束的位置-開始的位置,並返回     
        }
    }

再附上 QQUserInfo.cs

/// <summary>
/// QQ授權之后返回的字段
/// </summary>
public class QQUserInfo
{
    
    public int is_lost { get; set; }
    public string figureurl_type { get; set; }

    /// <summary>
    /// 地區 省(隱藏顯示則返回空)
    /// </summary>
    public string province { get; set; }
    /// <summary>
    /// 地區 市(隱藏顯示則返回空)
    /// </summary>
    public string city { get; set; }
    /// <summary>
    /// 出生日期 年份(隱藏顯示則返回空)
    /// </summary>
    public string year { get; set; }
    /// <summary>
    /// 星座
    /// </summary>
    public string constellation { get; set; }
    /// <summary>
    /// 返回碼 0返回成功
    /// </summary>
    public int ret { get; set; }
    /// <summary>
    /// 如果ret小於0,會有相應的錯誤信息提示,返回數據全部用UTF-8編碼。
    /// </summary>
    public string msg { get; set; }
    /// <summary>
    /// 用戶在QQ空間的昵稱。
    /// </summary>
    public string nickname { get; set; }
    /// <summary>
    /// 大小為30×30像素的QQ空間頭像URL。
    /// </summary>
    public string figureurl { get; set; }
    /// <summary>
    /// 大小為50×50像素的QQ空間頭像URL。
    /// </summary>
    public string figureurl_1 { get; set; }
    /// <summary>
    /// 大小為100×100像素的QQ空間頭像URL。
    /// </summary>
    public string figureurl_2 { get; set; }
    /// <summary>
    /// 上傳的QQ頭像原圖
    /// </summary>
    public string figureurl_qq { get; set; }
    /// <summary>
    /// 大小為40×40像素的QQ頭像URL。
    /// </summary>
    public string figureurl_qq_1 { get; set; }
    /// <summary>
    /// 大小為100×100像素的QQ頭像URL。需要注意,不是所有的用戶都擁有QQ的100x100的頭像,但40x40像素則是一定會有。
    /// </summary>
    public string figureurl_qq_2 { get; set; }
    /// <summary>
    /// 性別。 如果獲取不到則默認返回"男"
    /// </summary>
    public string gender { get; set; }
    /// <summary>
    /// 是否黃鑽
    /// </summary>
    public string is_yellow_vip { get; set; }
    /// <summary>
    /// 是否vip
    /// </summary>
    public string vip { get; set; }
    /// <summary>
    /// 黃鑽等級
    /// </summary>
    public string yellow_vip_level { get; set; }
    /// <summary>
    /// vip等級
    /// </summary>
    public string level { get; set; }
    /// <summary>
    /// 是否年費黃鑽
    /// </summary>
    public string is_yellow_year_vip { get; set; }
}

拿到用戶信息就說明授權成功了,然后就該走自己的邏輯流程了。。。。

QQ授權登錄基本那就是這樣實現的,根據這些步驟來操作基本你沒有什么問題了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM