function qq_login_create_user($username, $avatar_url_2, $openid) { global $conf, $time, $longip; $arr = qq_login_read_user_by_openid($openid); if ($arr) { return xn_error(-2, '已经注册'); } // 自动产生一个用户名 $r = user_read_by_username($username); if ($r) { $username = $username . '_' . $time; $r = user_read_by_username($username); if ($r) { return xn_error(-1, '用户名被占用。'); } } // 自动产生一个 Email $email = "qq_{$time}@qq.com"; $r = user_read_by_email($email); if ($r) { return xn_error(-1, 'Email 被占用'); } // 随机密码 $password = md5(rand(1000000000, 9999999999) . $time); $user = array('username' => $username, 'email' => $email, 'password' => $password, 'gid' => 101, 'salt' => rand(100000, 999999), 'create_date' => $time, 'create_ip' => $longip, 'avatar' => 0, 'logins' => 1, 'login_date' => $time, 'login_ip' => $longip); $uid = user_create($user); if (empty($uid)) { return xn_error(-1, '注册失败'); } $user = user_read($uid); $r = db_exec("INSERT INTO bbs_user_open_plat SET uid='{$uid}', platid='1', openid='{$openid}'"); if (empty($uid)) { return xn_error(-1, '注册失败'); } runtime_set('users+', '1'); runtime_set('todayusers+', '1'); // 头像不重要,忽略错误。 if ($avatar_url_2) { $filename = "{$uid}.png"; $dir = substr(sprintf("%09d", $uid), 0, 3) . '/'; $path = $conf['upload_path'] . 'avatar/' . $dir; !is_dir($path) and mkdir($path, 0777, TRUE); $data = file_get_contents($avatar_url_2); file_put_contents($path . $filename, $data); user_update($uid, array('avatar' => $time)); } return $user; }
$grouplist = group_list_cache(); $forumlist = forum_list_cache(); $action = param('action'); $http_url_path = http_url_path(); $return_url = $http_url_path . 'qq_login.php?action=return_url'; if ($action == 'login') { $link = qq_login_link($return_url); header("Location: {$link}"); // return url } elseif ($action == 'return_url') { $qq = kv_get('qq_login'); $appid = $qq['appid']; $appkey = $qq['appkey']; //$state = param('state'); $code = param('code'); // token 保存起来,提高速度 $token = qq_login_get_token($appid, $appkey, $code, $return_url); !$token and message($errno, $errstr); // 获取 openid $openid = qq_login_get_openid_by_token($token); // 如果有 openid,则直接自动登陆 $user = qq_login_read_user_by_openid($openid); if (!$user) { $qquser = qq_login_get_user_by_openid($openid, $token, $appid); $user = qq_login_create_user($qquser['nickname'], $qquser['figureurl_qq_2'], $openid); } $r = user_token_set($user['uid'], $user['gid'], $user['password'], $user['avatar'], $user['username'], 'bbs'); // 登陆成功 header('Location: ../../'); exit; }