zoukankan      html  css  js  c++  java
  • QQ一键登录功能的实现过程

    QQ登录的思路:

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

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

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

    过程:

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

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

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

    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

    最重要的就是:

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

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

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

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

     

    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 id="formpost" 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' style='0px; height:0px;filter:alpha(opacity=0);opacity:0' value='' /></form><script>document.getElementById('formpost').submit();</script>";
        return $f;
    }

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

  • 相关阅读:
    IntelliJ IDEA常用统一设置2-Inspections检查设置(Linux/Mac/Windows)
    IntelliJ IDEA版本:Ultimate、Community、EAP版本的区别
    IntelliJ IDEA重构技巧收集
    Java泛型中的类型擦除机制简单理解
    阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义
    Java中PO、BO、VO、DTO、POJO、DAO概念及其作用和项目实例图(转)
    Java使用logback记录日志时分级别保存文件
    Java中List,Set和Map详解及其区别和使用场景(转)
    Java中泛型的Class<Object>与Class<?>的区别(转)
    Java中泛型T和Class<T>以及Class<?>的理解(转)
  • 原文地址:https://www.cnblogs.com/tinyphp/p/2973049.html
Copyright © 2011-2022 走看看