紧接着上次的第三方登录文档,这一波又来了。

一、使用qq登录https://connect.qq.com/

首次登录的话会跳转到应用开发者注册,自己测试的话选择个人。下面的各项自己按真实情况填写。

注册后添加应用,网址一定要是外网能访问的你的网站,不能随便填写的。点击验证会出现一部分代码,将代码复制粘贴在你网站首页或者一级目录下HTML代码的head标签中。完成代码粘贴      后点击弹出成的开始验证。验证成功会提示网站验证成功,下一步创建应用。

创建成功后自动跳转到应用,页面上会显示上一个博文中的APPID和APPKEY了。

配置本地的项目的域名,将域名指向127.0.0.1;没有虚拟机的可以使用localhost来配置,在自己的域名所指位置或者localhost创建一个接收返回值的php文件,如:code.php。在其中           接收$_GET[“code”]。并将其也配置在你添加的应用回调地址中(http://localhost/code.php)。(多个回调地址中间用英文分号隔开)

QQ互联每修改一次配置都有验证一下网址才可以保存。

二、引入官方SDK

从开放平台的文档资料下载SDK

找个合适的版本,因为我做的是PHP,就下载PHP的,做java的小伙伴可以下载java的对应类型。

下载解压后会有一个connect2.1的文件夹,放在项目的根目录,API文件夹中放置了配置文件和接入类,开发中主要用的就是这个文件夹,doc文件夹是开发帮助文档,example中是一

些功能示例。Install文件夹是帮助配置的一个文件。

访问connect2.1文件夹,会显示下图的样子,按照提示填写配置,请求授权不建议选择太多,按照自己的需求选择就可以,因为选择的授权都会在用户登录的OAuth页面显示给用户的,

给用户不安全感。配置之后除了API文件夹其他都可以删掉啦。

如果没有看上一篇博文的话要提前看一下,方便理解啊。

QQ互联http://wiki.connect.qq.com/这个页面中OAuth协议介绍中有开发攻略,  Server_side  和 Client_side分别指的服务端语言和客户端语言分别是怎么接入的,php语言是服务端语言,所以使用

的是Server_side。

三、SDK核心类和重要方法 

登录授权相关的三个主要类(Connect2.1/class/*.class.php)

(1)、Recorder.class.php[配置读写与SESSION存取]

__construct方法中:

$incFileContents = file(ROOT."comm/inc.php");//读取配置文件json串inc.php是自动             生成的一个文件,里面包含有appid,appkey,callback等

$incFileContents = $incFileContents[1];

$this->inc = json_decode($incFileContents);//解析成PHP对象

readInc($name)方法中:

return $this->inc->$name;//->readInc("appid")即读取配置文件的appid

(2)、URL.classphp[基于CURL库的get与post请求]

  public function combineURL($baseURL,$keysArr){

        $combined = $baseURL."?";//拼接?

        $valueArr = array();

        foreach($keysArr as $key => $val){
$valueArr[] = "$key=$val";//拼接参数
} $keyStr = implode("&",$valueArr);//使用&拼接参数键值对 $combined .= ($keyStr); return $combined; }

(3)、Oauth.class.php[Oauth相关URL动态拼接与token操作]

public function qq_login(){//拼接qq登录页面URL
$appid = $this->recorder->readInc("appid");//读取appid
$callback = $this->recorder->readInc("callback");//读取回调地址
$scope = $this->recorder->readInc("scope");//读取授权列表 //-------生成唯一随机串防CSRF攻击
$state = md5(uniqid(rand(), TRUE));//原样返回参数
$this->recorder->write('state',$state);//state写入session中 //-------构造请求参数列表
$keysArr = array(
"response_type" => "code",
"client_id" => $appid,
"redirect_uri" => $callback,
"state" => $state,
"scope" => $scope
); $login_url = $this->urlUtils->combineURL(self::GET_AUTH_CODE_URL, $keysArr); header("Location:$login_url");
}

四、SDK优化

SDK太长时间也没有新的版本,所以有的东西老了,要调整一下文件及目录。SDK中可能有常量名称太普通,与你本地的项目中常量名称重复了;所以可以批量替换SDK中的常量名称为不常见

的名称。可以将代码少的文件直接写在包含该文件的页面中,省去包含。然后可以将不用的文件删除。

下面呢有一个调试函数,可以新建一个php文件放进去,我这就放到了debug.php中了;在项目中引入这个文件用来调试。

function  debug($val,$dump=false,$exit=true){
if($dump){
$zz = 'var_dump';
} else {
$zz = (is_array($val)|| is_object($val))?'print_r':'printf';
}
//输出到html、
header("Content-type:text/html;charst=utf-8");
echo '<pre>debug output:<hr/>';
$zz($val);
echo '</pre>';
if($exit)exit;
}

qqlogin.php页面

require_once 'debug.php';

require_once 'Connect2.1/qqConnectAPI.php';

//访问QQ登录页面

$oauth = new Oauth();

$oauth->qq_login();

     五、获取openId

QQ用户在第三方站点的唯一标识,同一个QQ用户在不同站点登录使用QQ登录openID是一样的。可以直接判断openID是不是第一次登录就可以知道用户是不是第一次登录,可以做一些限制什  么的。

获取openID:

Callback.php页面

require_once 'debug.php';

require_once 'Connect2.1/qqConnectAPI.php';

//请求accesstoken

$oauth = new Oauth();

$accesstoken=$oauth->aa_callback();

$openid=$oauth->get_openid();

最后可以将$accesstoken和$openid存在cookie里,退出qq登录时候也就是将cookie中存的数据删除掉。

在使用过程中需要注意以下三点:

APPid申请之后3个月未申请上线将被回收。

申请上线需要使用官网提供的QQ登录按钮素材。

站点里不能有违国家法律的东西。

接下来的开发可以参照官方给的流程:在这里-->http://wiki.connect.qq.com/

这个暂时告一段落了,后面还要继续新的方向......加油!

第三方登录SDK的更多相关文章

  1. thinkphp 3.23 第三方登录sdk集成包

    本集成包在官方包上扩展了支付宝登录和微信,支持最新的3.23版本 config    /* URL配置 */     'URL_CASE_INSENSITIVE' => true, //默认fa ...

  2. 使用cocoaPods一键集成第三方登录(新浪微博,qq,微信)

    第三方登录是现在app很常用的功能,而这个功能我已经写过两三次了...每次都写大同小异的代码真的是很痛苦,而且每次都要根据说明去添加那些依赖库,配置linkFlag什么的,完全是体力活,所以一直想把这 ...

  3. 史上最全的整合第三方登录的工具JustAuth

    JustAuth,如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录SDK,让登录变得So easy! 参考图例 授权gitee 授权github 授权weibo 授权钉 ...

  4. Unity利用Share SDK实现QQ、微信及微博第三方登录及定制内容分享(附代码)

    最近因为公司的项目需要添加一些实用性的功能,需要添加第三方登录及分享,采用的是Mob的SDK,可以先到其官网下载对应的SDK 点击这里,为了方便后期进行数据统计和分析,所以可以先添加一个应用,添加成功 ...

  5. Android应用之——最新版本号SDK V2.4实现QQ第三方登录

    为什么要写这篇博客呢?由于.我在做这个第三方登录的时候,找了非常多资料,发现要么就是过时了.要么就是说的非常不清楚.非常罗嗦.并且非常多都是一些小demo,不是什么实例.甚至连腾讯官方的文档都有这个问 ...

  6. iOS微信第三方登录实现

    iOS微信第三方登录实现   一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...

  7. 分享前端Facebook及Twitter第三方登录

    最近公司要求做海外的第三方登录:目前只做了Facebook和Twitter;国内百度到的信息太少VPN FQ百度+Google了很久终于弄好了.但是做第三方登录基本上都有个特点就是引入必须的js,设置 ...

  8. iOS - Share 分享/第三方登录

    1.系统方式创建分享 按照下图在 Info.plist 文件中将 Localization native development region 的值改为 China.如果不设置此项弹出的分享页面中显示 ...

  9. PHP第三方登录 -- 微博登录

    进化史 博客园 首页 新随笔 联系 管理 订阅 随笔- 9  文章- 0  评论- 0  php 实现qq第三方登录 学习之前,请大家先看一下oAuth协议. 首先呢,我们进入QQ互联的官方网站 ht ...

随机推荐

  1. [.NET] 一步步打造一个简单的 MVC 电商网站 - BooksStore(四)

    一步步打造一个简单的 MVC 电商网站 - BooksStore(四) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore &l ...

  2. 在Activiti中如何使用自定义的组织架构

    1.概述 我们知道,activiti是一个不错的流程引擎,它有自身的人员组织架构,但仅限于用户.用户组的管理,流程产生的任务(UserTask),就涉及到任务的所属人(Owner),任务的执行人(as ...

  3. npm 配置和安装 express4.X 遇到的问题及解决

    前言:懒得看前面两篇介绍的也可以从本节直接参考,但建议最好了解下,因为 4.X 的express 已经把命令行工具分离出来 (链接https://github.com/expressjs/genera ...

  4. 轻量级代码生成器-OnlyCoder

    程序猿利器:代码生成器,使用代码生成器已经好几年了,增删改查各种生成,从UI到DATA层均生成过.之前有使用过动软的,T4模板等....  T4生成实体还是没有问题的,但是生成MVC视图就有点烦杂了, ...

  5. 2 Java对象的创建过程

    JAVA中创建对象直接new创建一个对象,对么对象的创建过程是怎样的呢? 程序运行过程中有许多的对象被创建出来.那么对象是如何创建的呢? 一 对象创建的步骤 1 遇到new指令时,检查这个指令的参数是 ...

  6. js继承之原型链方式实现

    温故而知新: 在之前的文章已经重点了解了原型对象,今天就理一理这个原型对象在原型链式的继承中的使用 function a(x,y){this.x=x;this.y=y;} //定义一个函数,当构造函数 ...

  7. Mybatis(一) mybatis入门

    学习了hibernate这个持久层框架之后,在来学习Mybatis简直是无压力,因为Mybatis入门门栏很低,如果学习过了hibernate的话,对于Mybatis的学习很简单了,如果没学习过hib ...

  8. ArrayList和List主要区别 就是ArrayList类型不安全。

    什么是不安全? 1:List大家都知道初始化的时候需要定义其类型,例如 List<int> listTest = new List<int>():而ArrayList,例如:A ...

  9. C# treeview 使用笔记

    treeView默认 展开 treeView1.ExpandAll(); treeview判断点击节点: private void treeView1_AfterSelect(object sende ...

  10. C# 事务之SqlTransaction

    private static void Execute(string connectionString) { using (SqlConnection connection = new SqlConn ...