吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2761|回复: 4
收起左侧

[其他原创] 一个QQ互联如何实现不同域名不同站点的登录案例展示!微信同理

[复制链接]
勤勤学长 发表于 2020-4-29 20:47
近期实现的一个功能,实现不同站点之间如何共用一个QQ互联登录。


众所周知,一个QQ互联应用只能绑定一个域名做回调。


我们就可以以此作为跳板。


业务逻辑:发起站点带着信息到跳板,完成登录后回调,再根据之前信息带着相关数据再次跳转回来。


现在开始代码
//代码出现是qqxz_encode和qqxz_decode是我封装的一种可逆加密解密函数。

发起站:
[PHP] 纯文本查看 复制代码
    //发起请求
    public function qqsend(){

        $damain = $_SERVER['SERVER_NAME'];

        $str = 'url='.$damain.'&rand='.time();
        $url = 'https://***.cn/plugin/qq_connect/index/qqsend?key='.urlencode(qqxz_encode($str));//跳板站点
        //var_dump($url);
        header("location:".$url);	
        exit;
    }


跳板站点接收信息
[PHP] 纯文本查看 复制代码
    public function qqsend(){
        session('domain',null);
        session('domain_time',null);

        
		if(!empty($_GET['key'])){

			$data = $_GET['key'];
			$key = qqxz_decode($data);//如果被改动就会解密失败
			if (!$key) {
					exit(  'key格式不正确');
			 }else{
				 parse_str($key, $key_data );
			 }
			 session('domain',$key_data['url']);//记录发起登录站点的url
			 session('domain_time',time());//记录发起登录的时间简单判断是否超时
			 $qqconfig=$this->getPlugin()->getConfig();
					$oauth=new Oauth();
					$oauth->qq_login($qqconfig);
					exit;
			 

		}
		//后边是原始站点正常QQ登录
    }


跳板站点回调部分
[PHP] 纯文本查看 复制代码
    //回调
    public function qqback(){

        if(!empty(session('domain'))){
            $time = time();
            
            if((session('domain_time')-$time)>300){
                exit('登录超时,请重新发起登录');
            }
        $oauth = new Oauth();
        $accesstoken = $oauth->qq_callback();
        $openid = $oauth->get_openid();
        $qc = new QC($accesstoken,$openid);
        $userinfo = $qc->get_user_info();

	$userInfo['nickname'] = $userinfo['nickname'];//昵称
	$userInfo['avatar']   = $userinfo['figureurl_1'];//头像
	$userInfo['openid']   = $openid;//昵称
	$userInfo['time']     = session('domain_time');
	
	$url = 'http://'.session('domain').'/plugin/qq_connect/index/qqback?key='.urlencode(qqxz_encode(http_build_query($userInfo)));//我们再把得到的数据进行加密回调给发起站点
	header("location:".$url);	
	exit;
	
}
}


发起站点回调
[PHP] 纯文本查看 复制代码
    public function qqback(){


		if(!empty(input('get.key'))){
					
			$data = input('get.key');
			$time = time();
				
			$str =qqxz_decode($data);
			if(!$str){
				exit(  '非法请求');
			}
			parse_str($str, $data); 
				
			if(($time-$data['time'])>300){
				exit('登录超时,请重新发起登录');
			}
					
					 
				
		}else{
			exit('非法请求');
		}
				
		$qq_openId =$data['openid'];
		$qq_nickname = $data["nickname"];
		$qq_avatar = $data["avatar"];


    }


大致就是这样,记录一个时间用于时间范围判断,这样就能避免同一个URL,能重复使用。
当然,这个不是最好的解决方法,只是我目前能想到的唯一方法。


你好,我是勤勤学长,欢迎讨论。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

XinSong 发表于 2020-4-29 20:59
你可以给他,加一个,加一个参数
chinaround 发表于 2020-4-29 21:37
bdanccd 发表于 2021-4-6 17:29
残-梦 发表于 2021-10-25 15:31
有成品没
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-21 19:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表