[C#]QQ开放平台(QQ站外登录)_流程和源码示例
[C#]QQ开放平台(QQ站外登录)_流程和源码示例
本人阿旭,近期研究QQ开放平台的程序开发。因为使用.NET语言,到官方SDK下载竟然是一个DLL,下来经过反编译也没搞清楚怎么弄,晕菜。后来网上见一PHP源码,写的不错,按其原理,开发成了C#语言,本示例程序使用的OAuth2.0,是目前最新执口版本,写下来希望对大家有所帮忙。
本文内容
?QQ开放平台(QQ登录)开发介绍
?准备工作
?QQ开放平台中QQ登录程序运行流程
?示例源码
?本地测试方法
QQ开放平台(QQ登录)开发介绍
QQ开放平台是针对QQ网站以外的网站开发的信息共享接口,各网站通过实现QQ代码实现,可以与QQ网站的交换数据。本文说的是腾讯的OpenID开发,相关OpenID的相关文章,是有相关技术标准的,大家可以看百科会更详细。简单来说,就是说,在用户登录网站时,只使用绑定QQ的QQ帐号进行登录即可,无需每次去输入各网站的密码...
准备工作
访问:https://www.360docs.net/doc/1312466266.html,/,点击(图1)上的QQ登录链接,然后点击(图2)中“申请加入”链接,输入你的QQ帐号进行QQ登录验证,点击(图3)中的“添加网站/应用”链接。输入网站相关信息和网站验证后,会显示(图4)显示的管理中心界面。上面显示着AppID 和AppKey,下面的程序中将会用到,保密数据,请误泄露哈!
图1
图2
图3
图4
QQ开放平台中QQ登录程序运行流程
1、客户端浏览器转向QQ验证页面,用户输入用户名密码后,QQ网站回调回开发者网站,并传回Authorization Code。
2、开发者网站发送获取到的Authorization Code后,将Authorization Code和AppID、AppKey使用Http协议发送给腾讯,腾讯验证后返回登录结果。
3、如果验证成功,返回用户的OpenID,OpenID是登录用户登录后的在开发者网站中唯一标识,升度为32位,字符范围为0-9A-F。
示例程序源码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using https://www.360docs.net/doc/1312466266.html,;
using System.IO;
using System.Text;
using System.Web.Script.Serialization;
using System.Collections.Specialized;
using System.Text.RegularExpressions;
public partial class _Default : System.Web.UI.Page
{
private static Random RndSeed = new Random();
public string GenerateRndNonce()
{
return (RndSeed.Next(1, 0x5f5e0ff).ToString("00000000") + RndSeed.Next(1, 0x5f5e0ff).ToString("00000000") +
RndSeed.Next(1, 0x5f5e0ff).ToString("00000000") + RndSeed.Next(1, 0x5f5e0ff).ToString("00000000"));
}
public string file_get_contents(string url,Encoding encode)
{
HttpWebRequest
request=(HttpWebRequest)HttpWebRequest.Create(url);
WebResponse response= request.GetResponse();
using(MemoryStream ms=new MemoryStream())
{
using(Stream stream =response.GetResponseStream())
{
int readc;
byte[] buffer=new byte[1024];
while((readc=stream.Read(buffer,0,buffer.Length))>0) {
ms.Write(buffer,0,readc);
}
}
return encode.GetString(ms.ToArray());
}
}
NameValueCollection ParseJson(string json_code)
{
NameValueCollection mc= new NameValueCollection();
Regex regex = new
Regex(@"(\s*\""?([^""]*)\""?\s*\:\s*\""?([^""]*)\""?\,?)");
json_code=json_code.Trim();
if(json_code.StartsWith("{"))
{
json_code=json_code.Substring(1,json_code.Length-2); }
foreach (Match m in regex.Matches(json_code))
{
mc.Add(m.Groups[2].Value, m.Groups[3].Value);
//Response.Write(m.Groups[2].Value + "=" +
m.Groups[3].Value + "
");
}
return mc;
}
NameValueCollection ParseUrlParameters(string str_params) {
NameValueCollection nc = new NameValueCollection();
foreach (string p in str_params.Split('&'))
{
string[] p_s = p.Split('=');
nc.Add(p_s[0], p_s[1]);
}
return nc;
}
protected void Page_Load(object sender, EventArgs e)
{
//应用的APPID
string app_id = "粘贴你的APPID";
//应用的APPKEY
string app_secret = "粘贴你的APPKey";
//成功授权后的回调地址
string my_url = "https://www.360docs.net/doc/1312466266.html,/Default.aspx";
//Step1:获取Authorization Code
//session_start();
string code = Request.QueryString["code"];
if (string.IsNullOrEmpty(code))
{
//state参数用于防止CSRF攻击,成功授权后回调时会原样带回 Session["state"] = GenerateRndNonce();//md5(uniqid(rand(), TRUE));
//拼接URL
string dialog_url =
"https://https://www.360docs.net/doc/1312466266.html,/oauth2.0/authorize?response_type=code&client_id ="
+ app_id + "&redirect_uri=" + Server.UrlEncode(my_url) + "&state="
+ Session["state"];
Response.Write("");
Response.End();
}
//Step2:通过Authorization Code获取Access Token
if
(Request["state"].ToString().Equals(Session["state"].ToString()))
{
//拼接URL
string token_url =
"https://https://www.360docs.net/doc/1312466266.html,/oauth2.0/token?grant_type=authorization_code&" + "client_id=" + app_id + "&redirect_uri=" +
Server.UrlEncode(my_url)
+ "&client_secret=" + app_secret + "&code=" + code;
string response = file_get_contents(token_url, Encoding.UTF8);
NameValueCollection msg;
if (response.IndexOf("callback") != -1)
{
int lpos = response.IndexOf("(");
int rpos = response.IndexOf(")");
response = response.Substring(lpos + 1, rpos - lpos - 1); msg = ParseJson(response);
if (!string.IsNullOrEmpty(msg["error"]))
{
Response.Write("
error:
" +msg["error"].ToString());
Response.Write("
msg :
" +msg["error_description"]);
Response.End(); return;
}
}
//Response.Write(response);
//Step3:使用Access Token来获取用户的OpenID
NameValueCollection ps = ParseUrlParameters(response);
//*parse_str($response, $params);
string graph_url =
"https://https://www.360docs.net/doc/1312466266.html,/oauth2.0/me?access_token=" + ps["access_token"]; string str = file_get_contents(graph_url,
Encoding.Default);
if (str.IndexOf("callback") != -1)
{
int lpos = str.IndexOf("(");
int rpos = str.IndexOf(")");
str = str.Substring(lpos + 1, rpos - lpos - 1);
}
NameValueCollection user = ParseJson(str);
if (!string.IsNullOrEmpty(user["error"]))
{
Response.Write("
error:
" + user["error"]);Response.Write("
msg :
" +user["error_description"]);
Response.End();
}
Response.Write("Hello " + user["openid"]);
}
else
{
Response.Write("The state does not match. You may be a victim of CSRF.request=" + Request["state"] + ",session=" + Session["state"]); }
Response.End();
}
}
本地测试方法
1、用记事本打开:C:\Windows\System32\drivers\etc\hosts文件
2、新增行“127.0.0.1域名”,比如:127.0.0.1 www.jishu.me即可(当前这个域名必须是QQ开放平台“添加网站/应用”时输入的域名,否则会报错)。
3、重新启动IE浏览器后,输入域名即可访问本地站点,注意IIS中绑定的IP要与Host文件中指定的IP一致。
版所所有阿旭博客,如要转载,请注明来源:
https://www.360docs.net/doc/1312466266.html,/a-xu/archive/2012/04/07/qq_login.html
[C#]QQ开放平台(QQ站外登录)_流程和源码示例
[C#]QQ开放平台(QQ站外登录)_流程和源码示例 本人阿旭,近期研究QQ开放平台的程序开发。因为使用.NET语言,到官方SDK下载竟然是一个DLL,下来经过反编译也没搞清楚怎么弄,晕菜。后来网上见一PHP源码,写的不错,按其原理,开发成了C#语言,本示例程序使用的OAuth2.0,是目前最新执口版本,写下来希望对大家有所帮忙。 本文内容 ?QQ开放平台(QQ登录)开发介绍 ?准备工作 ?QQ开放平台中QQ登录程序运行流程 ?示例源码 ?本地测试方法 QQ开放平台(QQ登录)开发介绍 QQ开放平台是针对QQ网站以外的网站开发的信息共享接口,各网站通过实现QQ代码实现,可以与QQ网站的交换数据。本文说的是腾讯的OpenID开发,相关OpenID的相关文章,是有相关技术标准的,大家可以看百科会更详细。简单来说,就是说,在用户登录网站时,只使用绑定QQ的QQ帐号进行登录即可,无需每次去输入各网站的密码... 准备工作 访问:https://www.360docs.net/doc/1312466266.html,/,点击(图1)上的QQ登录链接,然后点击(图2)中“申请加入”链接,输入你的QQ帐号进行QQ登录验证,点击(图3)中的“添加网站/应用”链接。输入网站相关信息和网站验证后,会显示(图4)显示的管理中心界面。上面显示着AppID 和AppKey,下面的程序中将会用到,保密数据,请误泄露哈! 图1
图2 图3 图4 QQ开放平台中QQ登录程序运行流程 1、客户端浏览器转向QQ验证页面,用户输入用户名密码后,QQ网站回调回开发者网站,并传回Authorization Code。 2、开发者网站发送获取到的Authorization Code后,将Authorization Code和AppID、AppKey使用Http协议发送给腾讯,腾讯验证后返回登录结果。 3、如果验证成功,返回用户的OpenID,OpenID是登录用户登录后的在开发者网站中唯一标识,升度为32位,字符范围为0-9A-F。
各个开发平台简介
各个开发平台简介 以下为各个开发平台的简介,大家可以看一下。由于是本人匆忙之中赶出来的,因此一定有许多不足之处。欢迎大家提出相关意见进行修改,并进行交流。这样子有助于大家更好地了解相关知识。大家修改之后,可以直接发到我本人的邮箱:17116871@https://www.360docs.net/doc/1312466266.html,,谢谢大家! ——李奕翰 (1)Q+:腾讯公司的QQ开放平台。按照目前发展趋势看来Q+是针对web QQ平台和QQ微博的一个开发平台,由于发展思路,盈利性还没确定,暂时来说Q+同时也是一个涵盖了腾讯公司所有产品的一个开发平台。腾讯公司会开放一些API 端口,给开发者使用。 优点: ①旗下产品具有较高的知名度,用户量巨大; ②开发门槛低,容易入门; ③中国企业,开发者更加熟悉,也更容易在第一时间获得相关资讯。 缺点: ①盈利模式未明。(个人估计为:应用推荐分成、web游戏、增值服务、电子商 务。按照产品划分:实用工具打包;给公司客户开发Q+应用;自己开发运 营一段时间卖掉,一个产品可能在开发者手里不值钱,但到一些公司手里可 能很有价值;进行开发者服务,比如Q+课堂之类;进行女性类应用开发; Q+皮肤类;创新奖金;应用使用量大时找天使投资;扫大街赚钱,当Q+应 用过多,用户使用迷茫时,你出来应用,帮助他们清扫;借应用推广官方微 博,借微博进行营销。 ②分成比例过低:腾讯对开发者的分成为20%~30%; ③平台刚刚起步,并且拥有众多同质化的竞争对手(360、新浪),由于竞争过分 激烈,更加造就了众多前景的不稳定性。 小结:鉴于腾讯的强大实力,虽然现在仍需要继续观察其相关进程,但是不可忽视其平台的相关问题和优势。 (2)360应用开放平台:奇虎公司的应用开放平台。360web应用开放平台,基于360海量用户资源以及强大的客户端平台,是360大开放平台战略的重要开放途径之一,它致力于与互联网同仁,以及广大第三方开发者,一道建立真正开放、稳定,良性的应用生态产业链。360web应用开放平台,旨在提高国内web应用开发的原创动力,为广大第三方开发者提供可普遍参与的应用收益模式。目前看来,该平台更加针对其产品,360桌面的开发。与Q+类似。 优点: ①相关软件用户量在国内排行第二,开放平台的用户量全国最大; ②在国内的IT企业分成里面,分成为50%,算是相对较高的; ③开发门槛低,容易入门; ④中国企业,开发者更加熟悉,也更容易在第一时间获得相关资讯。 缺点: 平台刚起步,其经营模式与Q+大同小异。暂时看来,Q+的缺点就是360缺 点。 (3)新浪微博开放平台:新浪针对其微博的一个开发平台。新浪为其开发者提供了相关的API接口,由广大第三方开发者进行相应的应用开发。
腾讯开放平台开发者协议
腾讯开放平台开发者协议 协议主体 导言 欢迎您使用腾讯开放平台提供的服务! 为使用腾讯开放平台提供的服务(以下简称:本服务),您应当阅读并遵守《腾讯开放平台开发者协议》(以下简称:本协议)、《腾讯服务协议》、《QQ号码规则》等相关协议、规则。 请您务必审慎阅读、充分理解各条款内容,特别是免除或者限制责任的条款,以及开通或使用某项服务的单独协议、规则,免除或者限制责任的条款,可能以加粗等方式提示您注意。 除非您已阅读并接受本协议及相关协议、规则等所有条款,否则,您无权使用相关服务。您使用相关服务,即视为您已阅读并同意上述协议、规则等的约束。 您有违反本协议的任何行为时,腾讯有权依照违反情况,随时单方限制、中止或终止向您提供服务,并有权追究您的相关责任。 1. 术语含义 如无特别说明,下列术语在本协议中的含义为: 1.1 开发者:指经有效注册、申请后,将其享有相应权利的各种应用接入腾讯开放平台而向用户提供各种服务的个人、法人或其他组织,简称为“您”。 1.2 应用:指由开发者开发,或开发者经权利人授权,通过腾讯开放平台向相关用户提供各种服务的应用程序及相关服务,包括但不限于游戏类服务、工具类服务、电子商务类服务、视频或音乐类服务等现存的各种服务及今后可能出现的各种服务。 1.3 腾讯开放平台:指由腾讯所拥有、控制、经营的腾讯网(https://www.360docs.net/doc/1312466266.html,)、朋友网(https://www.360docs.net/doc/1312466266.html,)、应用宝(https://www.360docs.net/doc/1312466266.html,)未来将上线的其他开放平台或网站及前述各平台网站的下属子页面、相关产品客户端等,以下简称为“开放平台”、“平台”。 腾讯、开发者均同意和理解: (1)腾讯是一个中立的平台服务提供者,仅向开发者提供信息存储空间、链接等中立的网络服务或相关中立的技术支持服务,以供开发者在中立的开放平台上自主发布、运营、推广其应用等; (2)开发者的应用由开发者自主开发、独立运营并独立承担全部责任。腾讯不会、也不可能参与开发者应用的研发、运营等任何活动,腾讯也不会对开发者的应用进行任何的修改、编辑或整理等; (3)因开发者应用及服务产生的任何纠纷、责任等,以及开发者违反相关法律法规或本协议约定引发的任何后果,均由开发者独立承担责任、赔偿损失,与腾讯无关。如侵害到腾讯或他人权益的,开发者须自
腾讯开放平台接入流程分析
腾讯开放平台接入流程分析一、腾讯开放平台接入流程示意图:
二、腾讯朋友接入流程说明: 第一阶段——创建并提交应用 流程链接:成为腾讯开发者 该过程只需要注册,注册同时电子签订《开发者协议》 流程链接:创建应用 步骤: 1. 填写创建新应用的信息 2. 修改应用属性 流程链接: 开发 和调试应用程序 步骤: 1. 开发应用程序——腾讯提供资料:编程接口列表及说明(API 文档),开发工具包下载(SDK 下载)。 2. 安装调试应用程序——开发者登录开放平台后,在“应用接入”的“调试工具”页面可以看到“API 测试控制台”,按照流程链接中的演示进行操作。 3. 好友互动测试示例——有图示操作指引。 流程链接:将应用提交审核 步骤: 1. 审核前期准备——开发商自审应用,是否符合标准:接入腾讯朋友内测区的审核标准和接入腾讯朋友内测区前的产品改造和技术改造checklist (第一步内容)。 2. 提交审核——网页提交应用,提交应用审核时需上传《确认书》,加盖公司公章。 3. 通过审核准备上线——五个工作日便会收到腾讯的邮件通知应用是否通过审核,随后准备上线,提交应用审核时按照网页提示步骤完成。 成为腾讯开 发者 创建应用 开发和调试 应用程序 将应用提交 审核
第二阶段——上线朋友应用内测区 流程链接:产品改造和技术改造 开发者需要按照腾讯提供的checklist 对应用进行自检,不合格的地方进行改造使之合格,否则不能通过腾讯审核,影响产品上线效率。 开发者需要自行检查内容: 1. 产品相关checklist 2. 技术相关checklist 流程链接:提交开发者资料 开发商需提供:营业执照复印件,提交软件著作权复印件,以上文件需要盖公司公章。 如果软件著作权证书还在办理途中的,需要相关部门的受理回执。 邮寄地址:深圳市南山区高新科技园科技中一路腾讯大厦33楼 范帷 收 邮编:518000 流程链接:申请上线到内测应用区 1. 启动申请电子流——点击“申请接入内测区”按钮。 2. 申请资源——资源包括设备资源,测试帐号资源等,提出后24小时将受理完成,会收到邮件得知处理结果。 3. 获取资源——腾讯提供资源:跳板机账号,密码,IP 地址,端口,内网和外网服 务器IP ,OpenAPI 授权;开发商需自行维护跳板机账号和密码的安全。 流程链接:应用部署和程序联调 1. 准备工作——通过流程链接查看详细说明。 2. 提交部署申请——上线内测区通过阅读申请上线到内测应用区了解操作;上线到推荐列表需阅读申请上线到朋友社区推荐应用列表了解操作。 3. 部署服务——详细步骤可看流程链接下“第三步:部署服务”。 4. 程序联调——详细步骤可看流程链接下“第四步:程序联调”。 5. 启动上线流程——打开流程链接可参考图示指引。 开发者提交任务后,腾讯方对任务单进行处理,配置放量规则,完成上线。 腾讯方会根据以下原则进行放量配置: 1. 每小时限制安装1000人; 2. 每人每天可邀请20人; 3. 每个应用安装总量限制为50W ;应用放量规则会根据实际情况作出动态调整。内测应用上线后,将出现在内测应用列表,全部朋友社区用户可见。 产品改造和技术改造 提交开发者 资料 申请上线 应用部署和程序联调 放量上线
腾讯开放平台API列表
API 列表 用户信息类API 关系链类API 应用推广类API 支付类API 营销类API 丰富能力类API 基础支持类API 即将发布的API 用户信息类API 主要使用场景:应用中需要进行用户信息展示时。 接口分类 接口功能说明 接口详细文档 空间 朋友 微博 3366 后台接口 获取用户基本资料 v3/user/get_info 批量获取用户基本资料 v3/user/get_multi_info 获取登录用户各类腾讯 增值服务信息(黄钻、蓝钻等) v3/user/total_vip_info 获取用户是否黄钻 v3/user/is_vip 批量获取好友是否QQ 会员 v3/user/friends_vip_info 验证用户是否安装了应用 v3/user/is_setup 验证用户登录态&Openkey 续期 v3/user/is_login 验证用户是否从选区页面 进入多区多服应用 v3/user/is_area_login 前台接口 用户重新登录弹框 fusion2.dialog.relogin 跳转到用户的个人中心 fusion2.nav.toHome 跳转到好友主页 fusion2.nav.toFriendHome >>查看API 导航图
关系链类API 主要使用场景:应用中需要用户之间进行互动时。 接口分类 接口功能说明 接口详细文档 空间 朋友 微博 3366 获取用户 已有关系链 验证是否平台好友 v3/relation/is_friend 获取安装了应用的平台 好友 v3/relation/get_app_friends 获取推荐的的平台好友 v3/relation/get_rcmd_friends 拓展用户 关系链 推荐添加某用户为平台 好友 fusion2.dialog.recommendPal 添加某用户为平台好友 fusion2.dialog.addPal >>查看API 导航图 应用推广类API 主要使用场景:应用中需要实现新用户/活跃用户增长时。 接口分类 接口功能说明 接口详细文档 空间 朋友 微博 3366 增加新用户 邀请好友(空间/朋友/微博) fusion2.dialog.invite 邀请好友(3366) Open3366API.Invite.show
互联网+开发平台
“NetJoint”互联网+开发平台介绍 一、互联网项目开发的痛点是什么? “人才”“技术” “NetJoint”互联网+平台为解决这两个难题而诞生 互联网项目开发,主要有如下两种模式: 1、自主开发:公司需要配置从系统设计、服务器端、PC端、微信端、APP、测试等至少5人的技术团队,技术人才市场上供不应求,人员成本较高;技术选型局限于工程师的知识技术水平,安全风险和性能效率难以评估。 2、完全外包:项目开发委托给第三方公司。项目开发完成后,项目质量难以评估。项目运营后的系统性能、二次开发、后期服务等出现的各种问题,由于没有自己的技术团队很难快速解决,只能依赖第三方公司,通常导致运营一段时间后被迫推倒重来。 二、耐特嘉为您提供第三种选择:协同开发 耐特嘉制定最适合的技术解决方案,企业自己配置少量开发人员(可委托我们协助进行人才招聘和培养)与耐特嘉优秀的技术团队一起开发项目。这样既降低了开发成本和对开发人员的依赖性,又保障了企业有自己的开发人员能够完全掌控后期的二次开发和运维服务。 “Net Joint”互联网+开发平台源自中国科大数位博士参与中科院“教育云”、欧盟“第七框架计划”等大项目的八年技术积累,整合了国际上最稳定先进的前后端开发组件与测试工具,架构先进、对开发者友好、产品性能优越,极大降低了互联网项目开发的技术门槛,提高了开发效率,是互联网初创企业及传统企业的“互联网+”新业务的最佳技术选择。 三、NetJoint统一解决了互联网系统的核心技术难点 1.架构稳定:采用国际知名的OpenStack作为云平台架构,性能稳定,保 障您的代码安全,您可以放心的在平台上开发项目。 2.安全保障: 用户密码存储安全:每个用户使用独立的随机salt和bcrypt算法