C#实现QQ扫码登录

news/2025/2/3 10:57:00/

第一步:获取AppID AppSecret(去QQ开放平台申请网址https://connect.qq.com/index.html/)
第二步:生成扫描二维码,获取code
https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=yourclient_id&redirect_uri=回调地址&state=" + random
(注:
client_id是在QQ开放平台申请通过后获得的appID,
redirect_uri(重定向地址,需要进行UrlEncode,实现登录接口后自己网站的页面处理,比如跳转到会员后台页面)
response_type:code(写死的,不用管它)
state:(用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验,我是用的生成的随机数,放在session里,等一下验证)

然后就是调用接口代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using System.Net;
using System.IO;
using System.Text;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System.Text.RegularExpressions;
//using CsharpHttpHelper;
public partial class callback_qqLogin : System.Web.UI.Page
{protected void Page_Load(object sender, EventArgs e){if (Session["loginState"] != null && Request.QueryString["state"] != null && Request.QueryString["code"] != null){string state = Request.QueryString["state"].ToString();if (!Session["loginState"].ToString().Equals(state)){Response.Redirect("../Reminder-reviewError.html");Response.End();}else{string code = Request.QueryString["code"].ToString();QQ_callback qq_callback = new QQ_callback();User_info qq_info = qq_callback.getQQUserInfoJSON(code);string openId = qq_info.openId;Handler handler = new Handler();string userId = handler.GetCallback(openId);string userName = qq_info.nickname;//判断是不是第一次登录,如果是就添加到数据库if ("".Equals(userId)){string pwd = "123456";//初始密码pwd = Encrypt.MD5.MD5Encrypt(pwd);string userSex = qq_info.gender;string province = qq_info.province;string city = qq_info.city;//添加到数据库}           //清空session["loginState"] ,当点击QQ登录图标时再自动生成随机数放进去Session["loginState"] = "";Response.Redirect("../member/index.html");}}else{Response.Redirect("../Reminder-reviewError.html");}}
}

通过QQ code获到QQ用户的资料信息

public User_info getQQUserInfoJSON(string code){string client_id = "你在QQ开放平台申请通过后的获得的client_id "";string appid = "你在QQ开放平台申请通过后的获得的appid";string Return_url = "你的回调地址";string state = "text";string apiurl = string.Format("https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id={0}&client_secret={1}&code={2}&redirect_uri={3}&state={4}", client_id, appid, code, Return_url, state);System.GC.Collect();System.Net.ServicePointManager.DefaultConnectionLimit = 200;WebRequest request = WebRequest.Create(apiurl);WebResponse response = request.GetResponse();Stream stream = response.GetResponseStream();Encoding encode = Encoding.UTF8;StreamReader reader = new StreamReader(stream, encode);string jsonText = reader.ReadToEnd();string access_token = jsonText.Split('&')[0].Split('=')[1].ToString();string url_me = string.Format("https://graph.qq.com/oauth2.0/me?access_token={0}", access_token);request = WebRequest.Create(url_me);response = request.GetResponse();stream = response.GetResponseStream();reader = new StreamReader(stream, encode);string openIdStr = reader.ReadToEnd();openIdStr = openIdStr.Substring(openIdStr.IndexOf('(') + 1, (openIdStr.IndexOf(')') - openIdStr.IndexOf('(') - 1)).Trim();JObject jo = (JObject)JsonConvert.DeserializeObject(openIdStr);string openId = jo["openid"].ToString();根据OpenID获取用户信息 可以显示更多 用的就几个 需要的可以自己在下面加string getinfo = string.Format("https://graph.qq.com/user/get_user_info?access_token={0}&oauth_consumer_key={1}&openid={2}", access_token, client_id, openId);request = WebRequest.Create(getinfo);response = request.GetResponse();stream = response.GetResponseStream();reader = new StreamReader(stream, encode);string userStr = reader.ReadToEnd();//this.Label1.Text = userStr;//this.Label2.Text = openIdStr;JObject info = (JObject)JsonConvert.DeserializeObject(userStr);User_info qq_info = new User_info();qq_info.openId = openId;qq_info.nickname = info["nickname"].ToString();qq_info.gender = info["gender"].ToString();qq_info.province = info["province"].ToString();qq_info.city = info["city"].ToString();qq_info.figureurl = info["figureurl"].ToString();//大小为30×30像素的QQ空间头像URL。reader.Close();stream.Flush();stream.Close();response.Close();return qq_info;}

自己定义的User_info

public class User_info
{public string openId { get; set; }//QQ昵称public string nickname { get; set; }//QQ昵称public string gender { get; set; }//QQ性别public string province { get; set; }//QQ所在省份public string city { get; set; }//QQ所在地区public string year { get; set; }//QQ出生年份public string figureurl { get; set; }//QQ空间头像URL图像30*30public string figureurl_1 { get; set; } //QQ空间头像URL图像50*50public string figureurl_2 { get; set; }//QQ空间头像URL图像100*100
}

以上代码就可以实现QQ扫码登录
演示网址(https://www.shisezhe.com/register.html),点击上面的QQ登录图标就可以实现QQ扫码登录,如果有不明白的可以评论


http://www.ppmy.cn/news/699408.html

相关文章

Go语言版实现QQ扫码登陆

点击查看 官方文档 1. 申请appid和appkey appid:应用的唯一标识。在OAuth2.0认证过程中,appid的值即为oauth_consumer_key的值。appkey:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中,…

使用JSSDK实现网站的QQ登录

使用JSSDK实现网站的QQ登录 进入QQ互联官网:https://connect.qq.com/index.html 进行开发者注册并审核认证【实名认证】:首先使用QQ账号登录上述的QQ互联官网;接着填写开发者审核认证资料,需提交:开发者类型&#xf…

Laravel第三方登录开发之实现QQ登录

在我们的项目开发中,第三方登录可以很好的为用户提供便捷,比如微信、QQ、微博登录等等。 Laravel,作为一个优雅的PHP框架,已经集成了诸多第三方登录插件。 本文,将详细论述如何在Laravel框架中,实现QQ登录。…

电脑登陆不了网页的服务器地址,电脑登陆qq打不开网页怎么设置

当我们遇到上QQ不能打开网页的时候,其实这些都是电脑的DNS解析出问题了,怎么办。下面是学习啦小编为大家整理的关于电脑登陆qq打不开网页的相关资料,希望对您有所帮助! 电脑登陆qq打不开网页的解决方法 第一步、清除DNS解析缓存 我们的系统会…

Python利用selenium实现自动登录网页qq

就在刚刚,终于实现了自动登录网页的功能,牛蛙牛蛙,今天来写一下笔记,防止以后忘了,哈哈哈,我这个人记性不好。明天就可以写那个程序来自动登录“开学通知”了,嘿嘿嘿。话不多说,直接…

登陆页面html5代码qq,HTML5QQ登录的一篇代码分享

html5背景 *{margin:0;padding:0;list-style-type:none;} a,img{border:0;} $(function () {if (!window.ActiveXObject && !!document.createElement("canvas").getContext) {$.getScript("http://im-img.qq.com/pcqq/js/200/cav.js?_=1428576021379&…

PHP QQ网页三方登录

一、在QQ互联上注册成为开发者 注册指南地址: http://wiki.connect.qq.com/%E6%88%90%E4%B8%BA%E5%BC%80%E5%8F%91%E8%80%85 二、创建应用,获取APP ID和APP Key 创建应用指南地址:http://wiki.connect.qq.com/__trashed-2 1、进入QQ互联后台…

网站接入QQ登录最新2020 java版本

1.首先先注册账号,然后填资料审核,等个三四天吧大概 https://connect.qq.com/ 2.审核通过后点击创建应用,把备案号什么的都填(这个审核两天之内一般) !!! 这里有个重点,网站地址只能填一下,回调地址随便填一个,通过后可以随便改的 3. 整理java代码 我的是springBoot项目 先导入…