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

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

WBOY
WBOYOriginal
2016-06-06 19:43:382390Durchsuche

一、申请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;

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn