.Net QQ互联教程
qq互联只需要备案即可申请,申请成功后可以到qq互联官网查看教程,本站开始想使用js的教程但是由于本站需要绑定本站的账号用js教程无法完成,所以使用原始的oauth2.0来完成。
申请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();
}
.Net QQ互联教程的更多相关文章
- QQ互联登录以及非官方正版应用报100044错误
QQ第三方登录的时候,显示非官方正版应用,报100044错误:坑1:我们在QQ互联注册成功后需要设置包名和签名,签名是通过官方提供的工具生成的.注意一点:这里的签名是需要由打包签名之后APK生成,我们 ...
- 解决qq互联回调地址错误redirect uri is illegal(100010)的方法,不同于网上大部分方法
我是在用ecshop自己搭建的一个网店系统安装了第三方登录的插件,包括qq登录插件.网上大部分情况都是discuz论坛的这个回调地址出错及解决办法.所以在我出错的时候参考他们的办法并不管用.但是在后面 ...
- 【Discuz】关闭QQ互联插件提示信息:系统繁忙,请稍后再试
版本:X3.2.20160601 提示信息 系统繁忙,请稍后再试 解决方案 Step1.删除QQ互联插件目录 网站的根目录\source\plugin\qqconnect Step2.上传原始QQ互联 ...
- QQ互联OAuth
/** * QQ互联 oauth * @author dyllen * */ class Oauth { //取Authorization Code Url const PC_CODE_URL = ' ...
- QQ互联开发-01-开发者注册和网站应用申请
首先需要申请网站应用 要想使用QQ互联,首先需要先注册一个开发者账号,使用QQ号码可以注册,注册后,就可以创建网站应用了: 通过下面地址:https://connect.qq.com/,我们去登录QQ ...
- PHP版QQ互联OAuth示例代码分享
) { $ch = curl_init(); if(! $flag) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); cu ...
- QQ互联登陆出现(1054) Unknown column “conuintoken” in “field list”
在dz论坛中打开了QQ互联登录功能之后提示(1054) Unknown column conuintoken in field list 错误 我们看到sql 错误就是说没有conuintoken字了 ...
- QQ互联登录回调路径错误redirect uri is illegal(100010)
QQ互联登录设置的路径设置
- QQ互联OAuth2.0 .NET SDK 发布以及网站QQ登陆示例代码(转)
OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容. QQ登录OAuth2 ...
随机推荐
- idea中经常用到的快捷键
Ctrl+Alt+L 格式化代码 (但是在jsp或js中不给力,不如eclipse好用) Ctrl+G 搜索行数 Ctrl+F12 搜索方法,变量等... Ctrl+F8 ...
- thinkphp 5 _initialize 使用问题
如果继承的是common的话.控制器的_initialize要先继承父类的_initialize parent::_initialize();
- servlet的继承关系
一.servlet的继承关系 1.servlet程序是sun公司开发用于web资源技术,任何一个类只需要实现了servlet接口,那么就可以成为servlet程序 2.继承体系: ---------- ...
- python标准库之operator(运算符模块)
operator模块提供了一系列与Python自带操作一样有效的函数.例如:operator.add(x, y)和表达式x+y是等效的.那些特殊类的方法都有自己的函数名:为了方便起见,一些函数名是没有 ...
- 修改Windows server 时间同步
1.关闭“与Internet时间同步”选项. 2.禁用Windows时间服务,并将其设置为手动. 3.禁用Hyper-v时间同步服务,并将其设置为手动,这个在Hyper-v软件上选中要修改的虚拟机,设 ...
- python_Tkinter
Tkinter相关 python支持多种图形界面的第三方库,包括:TKwxWidgetsQTGTK等等但是python自带的库是支持TK的TKinter,使用使用Tkinter,无需安装任何包,就可以 ...
- Arrays和String单元测试-20175218
Arrays和String单元测试 一.题目 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常,错误和边界情况 String类 charAt split Arra ...
- 29. Divide Two Integers (JAVA)
Given two integers dividend and divisor, divide two integers without using multiplication, division ...
- 前后端分离框架前端react,后端springboot跨域问题分析
前后端分离框架前端react,后端springboot跨域问题分析 为啥跨域了 前端react的设置 springboot后端设置 为啥跨域了 由于前后端不在一个端口上,也是属于跨域问题的一种,所以必 ...
- vue-computed计算属性用法
siytem函数可以当做变量在html中展现,列:{{siytem}} v-for(item in siytem)遍历也可以. 这个函数是从获取到的数据中,得到值后再次提取里面的数据,通过下标 me ...