阅读模式:

给网站添加一键新浪微博登录的功能

查看:2836  回复:0  类型:  来源:新浪微博开放平台  标签 新浪微博开放平台

详细流程可以去新浪微博开放平台官网查看

http://open.weibo.com/


大概流程:

去新浪微博开放平台官网验证网站并提交网站资料,审核通过后创建网站应用,网站应用审核通过后会有app key, 然后所有新浪微博账号的数据都是通过这个去获取。

新浪微博开放平台中一键有写好的demo,下载地址:http://open.weibo.com/wiki/SDK#PHP_SDK

都是封装好的函数,直接调用就可以实现各种功能了。


一键登录代码:

//一键登录图片按钮,给oa链接传送参数appkey 和 网站回调地址
<img style="cursor: pointer;margin-top:7px;" src="sina/weibo_login.png" alt="微博登录" title="微博登录"
onclick="javascript:window.open('https://api.weibo.com/oauth2/authorize?client_id=12345&amp;
redirect_uri=http%3A%2F%2Fzixuephp.net%2Fapi%2Fsina%2Fcallback.php&amp;response_type=code','_self')"
width="150">

 
//回调地址代码
<?php

include_once( 'config.php' );//新浪微博demo配置文件
include_once( 'saetv2.ex.class.php' );//新浪微博demo类文件


$o = new SaeTOAuthV2( WB_AKEY , WB_SKEY );//实例化

//通过code获取token
if (isset($_REQUEST['code'])) {
    $keys = array();
    $keys['code'] = $_REQUEST['code'];
    $keys['redirect_uri'] = WB_CALLBACK_URL;
    try {
        $token = $o->getAccessToken( 'code', $keys ) ;
        } catch (OAuthException $e) {}
}
//通过token获取uid
if ($token) {
    $_SESSION['token'] = $token;
    setcookie('weibojs_' . $o->client_id, http_build_query($token));
    $c = new saetclientv2(WB_AKEY,WB_SKEY,$token['access_token']);
    $usr_info=$c->show_user_by_id($token['uid']); //微博sdk方法获取用户的信息 ,通过uid获取用户信息

    $uid = $usr_info['id'];
    $name = $usr_info['name'];
    $head = $usr_info['profile_image_url'];
    
    //通过微博uid查询之前有没有登录过
    if($u=$dbh->query("select * from user where other_id='{$uid}'")->fetch()){
        session_start();
        $_SESSION['account']=$u['account'];
        $_SESSION['account_id']=$id;
        header('Location:../../iphp.php');
        exit;
    }

?>
//未登录过的时候进行数据保存
    <!doctype html>
    <html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE-Edge"/>
        <title>微博登录一键登录</title>
        <meta name="author" content="www.zixuephp.net"/>
        <meta name="copyrihgt" content="www.zixuephp.net"/>
        <meta name="keywords" content="php自学网"/>
        <meta name="description" content="php自学网www.zixuephp.net"/>
        <link rel="shortcut icon" href="../../favicon.jpg" type="image/x-icon"/>
        <link rel="stylesheet" href="../../static/css/style.css"/>
        <script type="text/javascript" src="../../static/js/jquery-1.8.3.min.js"></script>
    </head>
    <body>

    <div id="login">
        <div>
            <form method="post">
                <p style="margin-top:15px;margin-bottom:15px;font-size:16px;">
                ----------新浪微博一键登陆授权成功,信息设置----------</p>
                <p style="margin-left:20px;margin-bottom:10px;"><span></span></p>
                <p>邮箱设置<input type="email" name="account" placeholder="邮箱账号"/><span></span></p>
                <p>密码设置<input type="password" name="passwd" placeholder="密码"/><span></span></p>
                <input type="hidden" name="ou_id" value="<?php echo $uid; ?>" />
                <input type="hidden" name="sname" value="<?php echo $name; ?>" />
                <input type="hidden" name="head" value="<?php echo $head; ?>" />
                <div id="set" style="margin-left:60px;">确定</div>
            </form>
        </div>
    </div>

    <script type="text/javascript">
        $('#set').click(function(){
            var email = $('input[name=account]').val();
            var pw = $('input[name=passwd]').val();
            var ou_id = $('input[name=ou_id]').val();
            var sname = $('input[name=sname]').val();
            var head = $('input[name=head]').val();
            $.ajax({
                type:'post',
                url:'callback.php',//发送post请求的用户数据到本页面进行保存到数据库
                data:{
                    'email':email,
                    'pw':pw,
                    'ou_id':ou_id,
                    'sname':sname,
                    'head':head
                },
                success:function(data){
                    if(data=='登陆成功!'){
                        $('.logintips span').text('登陆成功!3s后自动关闭窗口...');
                        setTimeout(function(){
                            window.close();
                        },3000);
                    }
                },error:function(){
                    $('.logintips span').text('请求出错!');
                }

            });
        });
    </script>

    </body>
    </html>
<?php

//处理来自ajax的数据
if( $_SERVER['REQUEST_METHOD'] == "POST" ){
    
    $mail = trim($_POST['email']);
    $password = md5($_POST['pw']);
    $wb_id = $_POST['ou_id'];
    $subname = trim($_POST['sname']);
    $head = trim($_POST['head']);
    $wb_id = 'wb_'.$wb_id;

    if ( empty($mail)  || empty($password) ) {
        echo "信息填写不完整。";
        exit;
    }else{


        if($dbh->query("select * from user where account='{$mail}'")->fetch()){
            echo '邮箱已被注册!';
            exit;
        }

        if($dbh->exec("insert into user (account,password,other_id) 
        values('$mail','$password','$wb_id'")>0){
            echo '登陆成功!';
            $userid=$dbh->lastInsertId();
            session_start();
            $_SESSION['account']=$mail;
            $_SESSION['account_id']=$userid;
            exit;
        }else{
            echo '信息设置失败!';
            exit;
        }
    }
}


}else{
    echo '<script>alert("授权失败!");window.close();</script>';
    exit;
}

?>

新浪微博一键登录的好处减少用户注册成本,大大降低了用户注册、登录的门槛,借助庞大的微博用户群,给第三方网站带来更多新用户。同时也使网站内容通过好友关系得到进一步的传播,从而提升网站的访问量和用户数。

分享到:
0 0

*有问题之处烦请在评论中指出非常感谢!
不是我想要的内容,继续搜索:

扫描二维码手机查看

发布评论:


登录:
  表情:
评论话题
推荐阅读:
javascript点击复制内容   阅读:2051人性漫画:打工与创业的残酷区别   阅读:1636给 centos 7 安装桌面环境   阅读:9163最简单的Banner轮播左右切换效果代码及实现思路(附带源码)   阅读:15091centos 7 安装 mysql-5.7   阅读:2489Nginx 配置文件详解   阅读:1808php 读取和设置redis的键值   阅读:3213纯干货,程序员面试的超实用技巧   阅读:1537比phpexcel还要简单的excel CSV 一键导入数据到数据库   阅读:2133centos 7 开启网络   阅读:1946centos 7 设置 nginx-1.11.10 开机启动   阅读:3104爱编程,也爱健康   阅读:1327shell脚本批量删除几天前的文件   阅读:2724linux top命令详解   阅读:1897网站局部小图片优化-base64编码图片   阅读:3186把php session 会话保存到redis   阅读:2700爱编程,也爱健康   阅读:1327web性能测试工具ab的测试方法   阅读:1739php压缩页面的html代码一行显示   阅读:2615mongodb设置shell开机启动脚本   阅读:2678javascript获取两个日期间的所有日期   阅读:66centos 7 安装 redis 3.2.9   阅读:2852javascript获取两个日期间的所有日期   阅读:66PHP 鸟哥:我也曾经是“不适合”编程的人   阅读:3170mysql中文分词全文搜索索引讯搜的安装   阅读:2181简单的DOS攻击之死亡之ping详解   阅读:15146php中地址引用&的真正理解-变量引用、函数引用、对象引用   阅读:1834面试的时候回去等通知,等电话的真实意思   阅读:8776centos 7 忘记root密码   阅读:1542centos 7 安装 php-7.1.3   阅读:8970linux时间戳有趣的情人节秒1234567890   阅读:1634解决 nginx 413 request entity too large   阅读:1611移动端自适应rem原理   阅读:5361人性漫画:打工与创业的残酷区别   阅读:1636phpexcel 超简单从excel表格一键导入数据到数据库教程   阅读:5912centos7开启交换内存   阅读:3077centos 7 安装 nginx-1.11.10   阅读:3720php 统计网页打开耗时和脚本运行内存   阅读:2630给 centos 7 安装桌面环境   阅读:9163给网站添加一键qq登录的功能   阅读:2864linux教程,鸟哥私房菜(pdf全集)   阅读:1932crontab+shell脚本实现定时备份mysql数据库   阅读:2178最简单的Banner轮播左右切换效果代码及实现思路(附带源码)   阅读:15091centos 7 修改系统屏幕分辨率   阅读:18019linux时间戳有趣的情人节秒1234567890   阅读:1634mongodb设置shell开机启动脚本   阅读:2678面试都会问你为什么你从上一家公司离职的真实意思   阅读:4263爱编程,也爱健康   阅读:1327shell脚本破解十位数内的所有纯数字rar加密压缩包脚本   阅读:3181centos7开启交换内存   阅读:3077