QQ互联OAuth2.0 .NET SDK 发布与网站QQ登陆示例代码

OAuth
OAuth(开放授权)是一个放标准,允许用户授权第三正网站访问他们存储在另外的劳动提供者上之信息,而休欲拿用户称及密码提供给第三正值网站要享受他们数据的保有内容。

行为树(BTTree)笔记

QQ登录OAuth2.0:对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保障用户数量的安康及隐私,第三正网站访问用户数量前都亟需显式的通往用户征授权。

为何是Lua版本的一言一行培训

目前境内的手机游戏都标配热更新功能,而游戏AI自然也是MMO游戏的一个标配,比如说挂机的AI,宠物的AI等等。

说于什么用重新简约的计开发AI功能,大家还见面想到以状态机或作为培训,它们能够充分十分程度上帮我们理清思维逻辑,让AI变的愈益有意思生动。

当前多Unity3D项目还是管Lua做啊脚本语言,比如我们种即是Lua做逻辑开发的3DMMOARPG之玩耍,本文分享一下咱们种遭到动用的Lua版本行为培养。

 

QQ登录OAuth2.0用OAuth2.0标准协议来拓展用户身份验证和取得用户授权,相对于事先的OAuth1.0协议,其证实流程又简约与平安。具体参考文档
:【QQ登录】OAuth2.0开文档。

behavior3

Behavior3框架提供了一致组工具及盛开规范,为你创建、设计及下作为树应用于打、模拟、机器人及外根据代理应用程序。

  • 供在线可视化地编辑器,并且提供编辑器源代码,你可下载后安排及地面,并且扩张其功效。
  • 大多代理系统布局,遵循一个简短而强的架构在一个专业的及一致的基本功及,优化控制多只代理
  • 应用一个开的与省略的格式来讲述行为培训(json),因此而得充分轻地拿它们在到好的仓库,工具或框架中

 

behavior3官网:http://behavior3.com/

behavior3的lua版本 :https://github.com/nottvlike/behavior3lua

 

注:本文部分截图及behavior3官网或github的lua版本有出入,因为我们项目组对lua版本的behavior3的召开了修改。

 

QQ互联网站已经提供了PHP,JS,Android和iOS的SDK,缺少.NET版本的SDK,春节假期期间采取一些有空时封装了一个享完全意义的.NET
SDK,后续将包裹一个应和的Windows
Phone的SDK,并开源放在http://opensns.codeplex.com
,专门搭建了一个示范网站http://www.win8charm.com/
和MSDN风格的在线帮助网站http://help.win8charm.com/
。今天立首稿子要介绍使用.NET SDK实施QQ登陆功能。

编辑器

浏览器访问:http://editor.behavior3.com/#/dash/projects

选择ProjectNew Project输入Name  – 点击 Editor
,网站会对目前浏览器编辑的数目开展封存,无需报登录就在在线编好的表现培训。

从这里http://opensns.codeplex.com/
下充斥最新版本的SDK,最新版本是Beta,
完成SDK的卷入,希望大家使用帮忙测试,SDK依赖让Newtonsoft.Json和RestSharp两个程序集,具体可参见使用RestSharp
库消费Restful
Service。
主要是片只类QzoneContext(QQ登陆的上下文数据)  和 QOpenClient
(QQ互联API入口),其他类重要是范,配置类。

葡京在线开户 1

1、你得去http://connect.qq.com/
申请一个账号,会获得一个APP ID和App
Key,这简单单东东会在变请求的时候用到。你的失填一些素材,还要交一些材料审核。

导入已部分行为培训

选择 ProjectImportTree as
Json
,粘贴AI.json数据,完成由Json数据导入成行为塑造

 

当布局文件web.config加入QQ登陆所欲的部分配置参数,如下图所示:

传输出行呢培养

选择 ProjectExportTree as
Json
,选择全部内容并复制,粘贴到AI.json,完成由AI树转换成Json数据

 

<configuration>
  <configSections>
    <sectionGroup
name=”QQSectionGroup”>
      <section name=”QzoneSection”
type=”System.Configuration.NameValueSectionHandler,System,
Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089″
/>
    </sectionGroup>
  </configSections>
   <QQSectionGroup>
    <QzoneSection>
      <add key=”AppKey” value=””
/>
      <add key=”AppSecret” value=””
/>
      <add key=”CallBackURI” value=””
/>
      <add key=”AuthorizeURL”
value=”https://graph.qq.com/oauth2.0/authorize” />
    </QzoneSection>
  </QQSectionGroup>

行培训基础知识

央提前了解行为树的功底概念,我排几触及:

各级一样帧都见面遍历所有的节点 (从性质角度可以每逻辑帧遍历一糟糕)

实践各个:从达往下,从左往右

 

AppKey是申请QQ登录成功后,分配受使用之appid;AppSecret是申请QQ登录成功后,分配受网站的appkey;CallBackURI是QQ登陆成功后的回调地址:AuthorizeURL是QQ互联的OAth2认证地址:

Composites(所有可用之类型)

脚坐贯彻一个概括的宠物AI来诠释各节点的用法。注:我排有之节点类型解释以及行使方式是依据自己的解所写,并非官方文档的说明。

 

 

2、在路面临补充加三个援Newtonsoft.Json.dll、RestSharp.dll和
QConnectSDK.dll,
在页面及停按钮,打开qq登录的页面,然后登录成功之后回调您的网站的页面。此时设用户以您的网站来账号,那就是得绑定现有账号,或者新登记一个账号。如果您是新建站,也可以了采用qq登录来作用户体系。

BTPrioritySelector(优先挑选)

要是手上节点的放置条件尚未,则置空。

对极端上层之顶节点,可以应用她

 

脚上代码:

BTSequence(序列)

苟连行节点有多单子节点,同级的节点受到,上一个回true,下一个节点才见面实行。

演示:与主人去超过18者节点也序列节点,有一定量独叶子节点,当ClearBattleState返回True,TeleportToMaster才会被实践

葡京在线开户 2

假若只有序列节点的具备叶子节点都回去true,这个节点才好不容易尽了,才会进去下一个节点

 

        /// <summary>
        /// QQ登陆页面
        /// </summary>

BTParalled(并行)

 

 

 

       [HttpGet]
       public ActionResult Login(string
returnUrl)
       {
           this.Session[RETURNURL] =
returnUrl;
           var context = new
QzoneContext();
           string state =
Guid.NewGuid().ToString().Replace(“-“, “”);
           Session[“requeststate”] =
state;
           string scope =
“get_user_info,add_share,list_album,upload_pic,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,add_one_blog,add_topic,get_tenpay_addr”;

BTParableFlexible(散列)

 

 

           var authenticationUrl =
context.GetAuthorizationUrl(state, scope);
           return new
RedirectResult(authenticationUrl);

Actions(动作/执行函数)

身处最后面的叶子节点上,用于实施函数

足让它们长前置条件(isFarFromMaster())
,给函数传参数(DoFollowMaster(sqrDistance = 4)),示例:

葡京在线开户 3

 

       }   

吃方传参数

设在行为培训为方传递多单参数,在lua端如何接受传递的参数为?

以lua的不二法门被:使用p.参数名1,p.参数名2,获取相应岗位的参数

 

        /// <summary>
        /// 回调页面
        /// </summary>

于Unity3D中调剂行为培训

俺们当下凡是在C#掬结合Unity开放的编辑器接口,编写了GizmosHelper,便于在运行时对作为培训进行调试。

关键原理:

读取AI.jso的数额,获取节点坐标、标题,由点连线,线结合树状,还原成在behavior编辑器的树状

倘某个节点和其子节点的状态为Active,这漫漫线运用绿色画,否则用白色画。 

 

       public ActionResult
QQConnect(LoginModel model)
       {
           if (Request.Params[“code”] !=
null)
           {
               QOpenClient qzone =
null;

注意事项

每当您还充分莫熟识行为树的情下,最好不用为Sequence或Parallel的子结点加措条件,而是径直加在Sequence或Parallel结点本身上面。。。

置条件可以大大方方用在Priority结点或其子结点上
诸如此类培养的逻辑会清晰一点
另外,前置条件支持以“!”开头,表示针对紧跟在那个后面的标准进行得反重判断

               var verifier =
Request.Params[“code”];
               var state =
Request.Params[“state”];
               string requestState =
Session[“requeststate”].ToString();

               if (state == requestState)

               {
                   qzone = new
QOpenClient(verifier, state);
                   var currentUser =
qzone.GetCurrentUser();
                   if
(this.Session[“QzoneOauth”] == null)
                   {
                      
this.Session[“QzoneOauth”] = qzone;
                   }
                   var friendlyName =
currentUser.Nickname;

                   var isPersistentCookie
= true;
                  
SetAuthCookie(qzone.OAuthToken.OpenId, isPersistentCookie,
friendlyName);

                   return
Redirect(Url.Action(“Index”, “Home”));
               }

           }
           return View();
       }

面的代码是ASP.NET
MVC的,项目示范运行在http://www.win8charm.com/ ,下面贴个ASP.NET
WebForm的代码示例:

QQ登陆页面

namespace OpenConnect.WebSample.Account

{
    public partial class LoginToQQ :
System.Web.UI.Page
    {
        protected void Page_Load(object
sender, EventArgs e)
        {
            GetRequestToken();
        }

        private void GetRequestToken()

        {
            var context = new
QzoneContext();
            string state =
Guid.NewGuid().ToString().Replace(“-“, “”);
            string scope =
“get_user_info,add_share,list_album,upload_pic,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,add_one_blog,add_topic,get_tenpay_addr”;

            var authenticationUrl =
context.GetAuthorizationUrl(state,scope);
            //request token, request token
secret 需要保存起来
           
//在demo演示着,直接保存在全局变量中.真实情况需要网站自己处理
            Session[“requeststate”] =
state;          
           
Response.Redirect(authenticationUrl);

        }
    }
}

 

回调页面

namespace OpenConnect.WebSample.Account

{
    public partial class QQCallback :
System.Web.UI.Page
    {
        protected void Page_Load(object
sender, EventArgs e)
        {
            if (Request.Params[“code”]
!= null)
            {
                QOpenClient qzone = null;

                User currentUser =
null;

                var verifier =
Request.Params[“code”];
                string state =
Session[“requeststate”].ToString();
                qzone = new
QOpenClient(verifier, state);
                currentUser =
qzone.GetCurrentUser();
                if (null != currentUser)

                {
                    this.result.Text =
“成功登陆”;
                    this.Nickname.Text =
currentUser.Nickname;
                   
this.Figureurl.ImageUrl = currentUser.Figureurl;
                }
                Session[“QzoneOauth”] =
qzone;

            }

     }

}

此说明一下使用QQ互联登陆是取得不顶用户之QQ号的,只会获到用户的OpenId,OpenID和QQ号是各个对许提到。

地方测试
  • 前提准备,了解当地Host文件的意图

  • 找到C:\WINDOWS\system32\drivers\etc\hosts这个文件

  • 之所以文件方式打开
  • 增一行:127.0.0.1
    www.domain.com
  • 启航本地服务器
  • 开行浏览器访问
    http://www.domain.com/
其他
  • 下载:
    http://opensns.codeplex.com/
  • 花色示范:http://www.win8charm.com/ 
  • SDK
    在线文档:http://help.win8charm.com/ 
  • QQ群:80767552
  • 注:众人拾柴火焰高,欢迎各位反馈使用受到的bug。
  • 报告issue请来:http://opensns.codeplex.com/workitem/list/basic
  • 站内信或者下方式
  • 微博:http://t.qq.com/geffzhang
  • 邮箱:geffzhang#qq.com
  • 博客:http://www.cnblogs.com/shanyou