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;
}