第一步:获取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扫码登录,如果有不明白的可以评论

C#实现QQ扫码登录相关推荐

  1. 反向工程解析QQ扫码登录的OAuth2流程

    1. 引言-与OAuth2有关   OAuth 2.0协议(RFC 6749)被广泛应用于互联网应用中,最常见的可能就是第三方授权登录应用了.在许多应用网站中用户登录时,可以使用支付宝.微信.QQ的已 ...

  2. QRJDC搭建实现QQ扫码登录对接青龙对接傻妞

    文章目录 前言 QRJDC安装 对接傻妞 问题 前言 通过qrjdc获取二维码,可直接用QQ扫码登录获取ck或者直接上传青龙面板 可对接傻妞实现在消息框就能扫码登录获取ck 安装完成效果图 QRJDC ...

  3. WORDPRESS QQ扫码登录插件

    下载地址:https://www.wuzhixiang.cn/index.php/2020/01/28/wordpress-qqlogin/ 一.插件预览 登录页面 点击QQ图标 登录未绑QQ定时的小 ...

  4. (八)QRJDC正式版/QQ扫码登录直达青龙/Docker上的部署教程/很干很干/没水喝【2020年5月1日】

    交流群:点我跳转 懒人自助上车:不想自己动手的 来我这 低价捡漏:低价捡漏 好物分享 目录 QRJDC可以干嘛? 1 .拉取qrjdc镜像 2 .运行容器 3.浏览器访问 4 .对接青龙面板 5.更新 ...

  5. 微信|QQ扫码登录网页版二维码失效问题解决方案 网站无法访问PC网页版如何解决 安卓软件历史版本下载 FV fooview悬浮球帮助教程

    前言 1. 手机端浏览器登录网页的同时再用微信或者QQ扫码登录出现二维码失效问题如何解决? 2.部分网站无法访问PC网页版如何解决?请看方案 目录 前言 1.方案 2.方案 使用Edge安卓浏览器访问 ...

  6. 网站QQ扫码登录代码及详细说明

    简介: 您应该已经看到所有扫描代码的网站,以登录,获取用户信息或验证QQ号 今天,我将为您详细介绍QQ二维码扫码和登录代码. 快速将QQ登录名添加到您的网站 每个人都可以通过扫描代码,获取cookie ...

  7. SpringSecurity OAuth2实现单点登录,微信扫码登录,Redis缓存验证码---入门到实战

    1. 认证授权 1.1 什么是认证授权 ​ 例如课程发布后用户通过在线学习页面点播视频进行学习.如何去记录学生的学习过程呢?要想掌握学生的学习情况就需要知道用户的身份信息,记录哪个用户在什么时间学习什 ...

  8. 解决云服务器上go-cqhttp扫码登录QQ失败问题

    解决云服务器上go-cqhttp扫码登录QQ失败问题 搭建环境 go-cqhttp:v1.0.0-rc1 nonebot:V1.9.1 python 3.9.12 CentOs 7.6 本篇文章仅仅分 ...

  9. 手机扫码登录电脑QQ出现无法登录问题

    用QQ手机版扫描二维码安全登录电脑QQ,然后出现"当前版本过低,请升级到最新版本,报错代码[00020],为此腾讯QQ每隔一段时间会进行一次升级,但是腾讯的升级用户体验不太友好,很多人一头雾 ...

最新文章

  1. 织梦html地图插件,织梦dede网站地图xml生成插件(图文教程)
  2. python装饰器-Python 装饰器
  3. STD中string的常用方法总结
  4. 【模拟】【递归】电子表格(jzoj 2127)
  5. 物维管理、楼控系统、安防系统、巡检管理、电子巡更、门禁管理、变配电、给排水、防盗报警、消防报警、电梯监视、智能楼宇、物业管理、报修管理、维保管理、工单管理、物料管理、审批、租赁管理、楼宇管理、房产管理
  6. Python编程基础 - 使用临时文件和临时目录
  7. 虚拟专用网之L2TP协议介绍
  8. 【硬见小百科】数字万用表的工作原理
  9. 如何高效做问卷调查?
  10. 计算机表格函数公式在表格中人数,计算机办公自动化常用公式和函数在电子表格中的应用...
  11. Springboot疫情防控下基于微信小程序的食堂订餐系统 毕业设计-附源码261620
  12. 三星s8怎么分屏操作_双屏互动,大有可为 三星Galaxy Z Fold2 5G的魅力折叠体验
  13. PHP Redis使用手册
  14. pytorch distiller Weights Pruning Algorithms
  15. iTextSharp5.0页眉页脚及Asp.net预览的实现(PDF导出)
  16. SAP ERP统驭科目
  17. 容器化Docker原理和场景
  18. 狼性团队五要素:沟通+信任+慎重+换位+快乐
  19. 淘宝客商品 获取详情图片
  20. 明华读卡器 java_Java调用明华RF读写器DLL文件过程解析

热门文章

  1. petalinux2018.3安装步骤
  2. 使用OpenSSL生成/签发证书的原理、流程与示例
  3. 重读数据结构之爬楼梯问题(动态规划)
  4. c语言开头的作用是什么,C语言为什么开头都加;#includestdio.h有什么作用?
  5. 简单电子产品的蓝牙电路设计和PCB设计
  6. 阅读笔记_一本书读懂财报
  7. 2018CVPR_Future Frame Prediction for Anomaly Detection – A New Baseline
  8. mapboxgl - 用webgl展示海量数据,是否可行?
  9. 【深入浅出IOS开发】设置图片水印
  10. Apache启动报错:Apache is running a threaded MPM