Home  >  Article  >  php教程  >  ecshop使用Google API及OAuth2.0登录授权(PHP)

ecshop使用Google API及OAuth2.0登录授权(PHP)

WBOY
WBOYOriginal
2016-06-06 19:43:382351browse

一、申请clientID https://console.developers.google.com/project 二、开启Google+ API权限 https://console.developers.google.com/project/gentle-charmer-848/apiui/api 三、添加同意画面 四、建立新的用户端ID(一个域名对应一个ID) 五、显示页面js登

一、申请clientID

https://console.developers.google.com/project

ecshop使用Google API及OAuth2.0登录授权(PHP)

二、开启Google+ API权限

https://console.developers.google.com/project/gentle-charmer-848/apiui/api

ecshop使用Google API及OAuth2.0登录授权(PHP)

三、添加同意画面

ecshop使用Google API及OAuth2.0登录授权(PHP)

四、建立新的用户端ID(一个域名对应一个ID)

ecshop使用Google API及OAuth2.0登录授权(PHP)

五、显示页面js登录按钮

案例地址:https://developers.google.com/+/web/signin/

参考代码:
               
                

六、google_login.php返回结果处理

define('IN_ECS', true);
require(dirname(__FILE__) . '/includes/init.php');

if(isset($_REQUEST['access_token'])) {
    $access_token = $_REQUEST['access_token'];
    $url = "https://www.googleapis.com/oauth2/v1/userinfo?access_token=".$access_token;

    $user_gg = json_decode(file_get_contents($url),true);
    $gg_email = compile_str($user_gg['email']);
    $gg_id    = $user_gg['id'];
    $gg_name  = compile_str($user_gg['name']);
    $picture  = $user_gg['picture'] == 'https://lh3.googleusercontent.com/-XdUIqdMkCWA/AAAAAAAAAAI/AAAAAAAAAAA/4252rscbv5M/photo.jpg' ? '' : compile_str($user_gg['picture']); //头像
    $gender   = 0;
    if($user_gg['gender'] == 'male')//性别
    {
        $gender = 1;
    }
    elseif($user_gg['gender'] == 'female')
    {
        $gender = 2;
    }

    $locale   = compile_str($user_gg['locale']); //国家
    $verified_email  = $user_gg['verified_email']; //邮箱是否验证
    if(empty($gg_email))
    {
        show_message("Your Google email is empty!", '', 'user.php', 'warning');
    }
    
    $sql = "select * from ".$GLOBALS['ecs']->table("users")." where email='".$gg_email.
    "' or user_name='".$gg_email."' order by user_id desc limit 1";
    $user_info = $GLOBALS['db']->getRow($sql);
    $record = array();
    if(!empty($user_info)) //gg邮箱已注册或者登陆过
    {
        $user_name = $user_info['user_name'];
        $user->set_session($user_name);
        $user->set_cookie($user_name, null);
        update_user_info();
        recalculate_price();
        
        if(empty($user_info['gg_id']) || empty($user_info['nick_name']) || empty($user_info['user_image']) || empty($user_info['sex']))
        {
            $record['is_validated'] = 1;
            empty($user_info['gg_id']) ? $record['gg_id'] = $gg_id : '';
            empty($user_info['gg_name']) ? $record['gg_name'] = $gg_name : '';
            empty($user_info['nick_name']) ? $record['nick_name'] = $gg_name : '';
            empty($user_info['user_image']) ? $record['user_image'] = get_picture($picture) : '';
            empty($user_info['sex']) ? $record['sex'] = $gender : '';
            $db->autoExecute($ecs->table('users'), $record, 'UPDATE', "user_id = '$user_info[user_id]'");
        }
    }
    else //GG邮箱未注册或者未登陆过,自动注册
    {
        $password = generate_word();
        include_once(ROOT_PATH."includes/lib_passport.php");
        include_once(ROOT_PATH.'includes/lib_transaction.php');
        $other = array();
        if(register($gg_email, $password, $gg_email,$other))
        {
            $record['gg_id']      = $gg_id;
            $record['gg_name']    = $gg_name;
            $record['nick_name']  = $gg_name;
            $record['user_image'] = get_picture($picture);
            $record['sex']        = $gender;
            $record['reg_type']   = 3;
            $record['is_validated']= 1;
            $db->autoExecute($ecs->table('users'), $record, 'UPDATE', "user_id = '$_SESSION[user_id]'");
            /* 发送注册成功邮件*/
            $tpl = get_mail_template('pp_login');
            $expired_date =local_date("Y-m-d", gmtime()+864000);
            $smarty->assign('expired_date', $expired_date);
            $smarty->assign('password', $password);
            $smarty->assign('username', $gg_email);
            $content = $GLOBALS['smarty']->fetch('str:' . $tpl['template_content']);
            send_mail($gg_email, $gg_email,$tpl['template_subject'],$content,$tpl['is_html']);
            log_account_change($_SESSION['user_id'], 0, 0, 0, 50, 'Get 50 M points from Google register.', ACT_OTHER);
        }
        else
        {
            show_message("Your Google email register error!", '', 'user.php', 'warning');
        }
    }
    $_SESSION['back_act'] = $_SESSION['back_act'] ? $_SESSION['back_act'] : "./index.html";
    ecs_header("Location:".$_SESSION['back_act']."\n");
}
else
{
    die('Illegal Access!');
}
//获取远程头像图片
function get_picture($picture){
    if($picture)
    {
        $data = file_get_contents($picture); // 读文件内容
        $filename =  DATA_DIR . '/u_image/'.local_date('ymdHis',gmtime()).'_'.rand(10,99).substr($picture,-4,4); //得到时间戳
        $fp = @fopen(ROOT_PATH . $filename,"w"); //以写方式打开文件
        @fwrite($fp,$data);
        fclose($fp);
    }
    else
    {
        $filename = '';    
    }
    return $filename;
}
?>
七、添加新字段的sql语句

ALTER TABLE `ecs_users` ADD `gg_name` varchar(60) NOT NULL;
ALTER TABLE `ecs_users` ADD `gg_id` varchar(60) NOT NULL;
ALTER TABLE `ecs_users` ADD `nick_name` varchar(60) NOT NULL;
ALTER TABLE `ecs_users` ADD `user_image` varchar(60) NOT NULL;

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn