qq互聯隻需要備案即可申請,申請成功後可以到qq互聯官網檢視教程,本站開始想使用js的教程但是由于本站需要綁定本站的賬号用js教程無法完成,是以使用原始的oauth2.0來完成。
申請qq互聯接口
qq互聯官網申請的時候需要注意将申請的應用名稱和備案域名的網站名稱一緻才能通過
開始編碼實作
- 展示qq登入的按鈕,可以到官網下載下傳登入的logo。
- 将點選按鈕後的連結跳到你申請的回掉頁面。
- 回掉頁面設計一般是綁定已有賬号和綁定新賬号其實就是登入和注冊。
- 回掉頁面展示效果(可自行設計)。
- 實作服務端的業務邏輯。
查閱相關案例都說qq登入無須綁定已有賬号,這樣失去了qq登入的使用者體驗,但是本人覺得還是有必要的,下次登入的話即可直接登入。
服務端代碼
public ActionResult QQReturn()
{
int qqid = 0;
string name = "", image = "",sex="";
#region 首次調用
if (string.IsNullOrEmpty(Request["code"]))
{
#region 擷取code
string url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=" + appid + "&redirect_uri=" + HttpUtility.UrlEncode("http://pqpqpq.cn/account/qqreturn") + "&state=loginsuccess&scope=get_user_info,get_info";
Response.Redirect(url);
#endregion
}
else
{
#region 擷取access_token
if (Request["state"] == "loginsuccess")
{
string code = Request["code"];
string url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=" + appid + "&client_secret=" + appkey + "&code=" + code + "&redirect_uri=" + HttpUtility.UrlEncode("http://pqpqpq.cn/account/qqreturn");
string str = RequestType.HttpGet(url);
if (!string.IsNullOrEmpty(str) && str.IndexOf('&') != -1)
{
if (!str.Contains("msg"))
{
string[] arr = str.Split('&');
string[] arr1 = new string[arr.Length];
for (int i = 0; i < arr.Length; i++)
{
arr1[i] = arr[i].Split('=')[1];
}
access_token = arr1[0];
refresh_token = arr1[2];
expires_in = arr1[1];
}
}
}
#endregion
}
#endregion
string url1 = "https://graph.qq.com/oauth2.0/me?access_token=" + access_token;
string str1 = RequestType.HttpGet(url1);
if (!string.IsNullOrEmpty(str1))
{
str1 = str1.Replace("callback(", "").Replace(")", "").Replace(";", "");
}
//AddLog(str1);
AccessToken openid = JsonConvert.DeserializeObject<AccessToken>(str1);
if (openid != null)
{
var isopenid = db.person_qq_login.Where(c => c.openid == openid.openid).FirstOrDefault();
if (isopenid == null)
{
#region 插入qq登入資訊
string geturl = "https://graph.qq.com/user/get_user_info?access_token=" + access_token + "&oauth_consumer_key=" + appid + "&openid=" + openid.openid;
string userstr = RequestType.HttpGet(geturl);
AddLog(userstr);
UserInfo userdata = JsonConvert.DeserializeObject<UserInfo>(userstr);
if (userdata.ret == 0)
{
person_qq_login qq = new person_qq_login();
qq.figureurl = userdata.figureurl;
qq.figureurl_1 = userdata.figureurl_1;
qq.figureurl_2 = userdata.figureurl_2;
qq.figureurl_qq_1 = userdata.figureurl_qq_1;
qq.figureurl_qq_2 = userdata.figureurl_qq_2;
qq.gender = userdata.gender;
qq.is_yellow_vip = userdata.is_yellow_vip;
qq.is_yellow_year_vip = userdata.is_yellow_year_vip;
qq.level = userdata.level;
qq.msg = userdata.msg;
qq.nickname = userdata.nickname;
qq.ret = userdata.ret;
qq.vip = userdata.vip;
qq.yellow_vip_level = userdata.yellow_vip_level;
qq.openid = openid.openid;
qq.addTime = DateTime.Now;
db.person_qq_login.Add(qq);
db.SaveChanges();
if (db.SaveChanges()>0)
{
qqid = qq.ID;
name = userdata.nickname;
image = userdata.figureurl_qq_2;
sex = userdata.gender;
}
}
#endregion
}
else
{
var isuser = db.person_user.Where(c => c.qqID == isopenid.ID).FirstOrDefault();
if (isuser == null)
{
qqid = isopenid.ID;
name = isopenid.nickname;
image = isopenid.figureurl_qq_2;
}
else
{
//記錄session
Session["user_model"] = isuser;
return RedirectToAction("Index", "Center");
}
}
}
ViewData["qqid"] = qqid.ToString();
ViewData["nickname"] = name;
ViewData["faceimage"] = image;
ViewData["sex"] = sex;
return View();
}