QQ一键登录功能的实现过程

摘要:
QQ登录的想法:当QQ登录成功后,QQ将返回一个唯一的用户ID:openId。当用户授权QQ时,判断登录后是否跳转到页面。任何提交数据的页面都可以使用$_GET或$_I得到POST!

QQ登录的思路:

当qq登陆成功后,QQ会给我们返回一个唯一的用户标识:openId,当用户授权QQ时,判断

if(已经有openId){
        跳转到登陆后的页面。
              }else if(没有openId){
                       跳转到注册页面->然后绑定->跳转到登陆后的页面
              }

绑定:将用户id和唯一标识关联,所有一键登录原理皆如此

过程:

1、实现QQ登录需要在QQ互联先创建应用:http://connect.qq.com/

2、创建应用成功得到:APP ID 和 KEY

3、确保要用得的API已激活,如下:

QQ一键登录功能的实现过程第1张

4、下载相应的SDK

5、解压SDK后浏览文件夹设置配置项,其实就是设置API->comm->inc.php文件(->代表文件夹里面),可以不浏览,自己去设置,复制以下并修改appid、appkey和回调地址,这三项一定要跟申请的应用一致,否则是不行的!

{"appid":"2222094","appkey":"f8ac3d316ebd74d2039294fff81cce9b","callback":"http://xxx/api/qq/callback.php","scope":"get_user_info","errorReport":true,"storageType":"file","host":"localhost","user":"root","password":"root","database":"test"}

 6、简化文件,实际上有用的就这几个文件,保留API(类及设置文件夹)、example(API例子)和index.php授权页面,当然example只是做参考,实际上你不需要也是可以丢掉的,但是一般还是留着,以防要用的时候要重新下载SDK

QQ一键登录功能的实现过程第2张

最重要的就是:

a.授权页面:example->oauth->index.php

b.回调页面:example->oauth->callback.php

c.还有你要执行的API:example->get_info->get_info.php

我喜欢把要用的文件拿到前面,如:example里面的get_info.php,拿到新建的user文件夹里面,还有把回调页面,感觉干净了很多 (移动的时候注意路径)

 QQ一键登录功能的实现过程第3张

7、使用API需要传入:$openid、$access_token

所以在callback.php设置了session,如下:

require_once("API/qqConnectAPI.php");

$qc = new QC();
$_SESSION['access_token']=$qc->qq_callback();
$_SESSION['openid']=$qc->get_openid();
 header('Location:'.'user/get_user_info.php');

get_info.php拿用户信息:

$qc = new QC();
$access_token=$_SESSION['access_token'];
$openid=$_SESSION['openid'];
$arr = $qc->get_user_info();

print_r($arr) 即看到返回的信息

复制代码
Array
(
    [ret] => 0
    [msg] => 
    [nickname] => 卡
    [gender] => 男
    [figureurl] => http://qzappss
    [figureurl_1] => http://qzapp.qlogo.cnss
    [figureurl_2] => http://qzapp.qlogo.cn/
    [vip] => 0
    [level] => 0
    [is_yellow_year_vip] => 0
)
复制代码

 技巧:当页浏览拿数据,重组数组并提交到“借数据页面”,通常也是注册页面

$param=array('action'=>"接数据页面",'orther_web_id'=>$_SESSION['openid'],'orther_web_name'=>urldecode($urlname),'orther_web'=>'QQ');

echo form($param);

form()是一个很方便的函数,提交过来的数组,相当于把数组每个值都放到一个input,然后按提交按钮,他自己创建自己提交,纯自动!

凡是一个页面提交了数据那就能用$_GET或$_POST拿到啦!

复制代码
function form($param){
    $f='';
    foreach($param as $k=>$v){
        if($k=='action'){
            $f='<form   method="post" action="'.$v.'">';
        }
        else{
            if($k=='orther_web_id') $v=authcode($v,'ENCODE');
            $f.='<input type="hidden" name="'.$k.'" value="'.$v.'" />';
        }
    }
    $f.="<input type='submit'   value='' /></form><script>document.getElementById('formpost').submit();</script>";
    return $f;
}
复制代码

8、最后一步就是在“接收数据页”把数据接收,拿QQ名称就:$_POST['orther_web_name']....剩下的就都不是问题了

免责声明:文章转载自《QQ一键登录功能的实现过程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java 反射原理HTTP协议详解(深入理解)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[开源项目]Hibernate基本使用

开源项目(1)Hibernate基本使用 Hibernate介绍 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。  官网  http://hibernate.org/  以下为其原理和基本的结构示意图 一步一步简单讲述其基本应用 1、创建java...

如何记录selenium自动化测试过程中接口的调用信息

注: 以下内容引自https://www.cnblogs.com/hhudaqiang/p/6635494.html 上一篇博客,我写了python自动化框架的一些知识和粗浅的看法,在上一篇中我也给自己提出一个需求:如果记录在测试过程中接口的调用情况?提出这个需求,我觉得是有意义的。你在测试过程中肯定会遇到一些莫名其妙的问题,比如:web某个页面一直在刷进...

OpenStack 中的neutron-server启动过程

neutron-server是neutron的核心组件之中的一个。负责直接接收外部请求,然后调用后端对应plugin进行处理。 其核心启动过程代码主要在neutron.server包中。 __init__.py文件里包含一个main()函数,是WSGIserver開始的模块,而且通过调用serve_wsgi来创建一个NeutronApiService的...

zabbix安装注意以下几个部分

1. /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf [zabbix] user = nginx group = nginx listen.owner = nginx listen.group = nginx listen.mode = 0666 listen = /var/opt/rh/rh-php72/run/...

DM-INI参数配置

配置文件 前言 每创建一个DM数据库,就会自动生成 dm.ini 文件。dm.ini 是 DM 数据库启动所必须的配置文件,通过配置该文件可以设置 DM 数据库服务器的各种功能和性能选项,当然还有其它参数配置文件,归档参数文件dmarch.ini及配置集群的参数文件dmmal.ini、dmwatcher.ini、dmmpp.ini、dmtimer.ini、...

JSONP原理解析

前言 我工作以来接触的第一个项目就是前后端分离的,前端静态文件有自己独立域名,通过接口来获取数据进行渲染等操作。 跨域的方法不需要多言,随便一搜,就有很多,但最常用不外乎jsonp和CORS。jsonp着重于前端,也算是前端Hack技巧,CORS重于后端,服务端需要配置的地方会较多。 这篇解析一下jsonp的实现原理。 基本原理 基本原理很容易说明白,在h...