Rumah >pembangunan bahagian belakang >tutorial php >已给出相应js判断代码,如何用js或者php判断电脑是否登录qq并获得相应qq号

已给出相应js判断代码,如何用js或者php判断电脑是否登录qq并获得相应qq号

WBOY
WBOYasal
2016-06-23 14:28:371680semak imbas

本帖最后由 dz215136304 于 2013-09-29 10:55:56 编辑

类似于qq邮箱的快速登录,下面是网上转载的,现在想用js或者php实现(这个是可以实现的,已经见别人做过了,用js实现的)

有时候做程序,喜欢把程序的注册与用户QQ号码绑定,程序仅允许登录成功了指定QQ账号时才可使用,

为了实现这个目的,有人用API取QQ窗口、QQ托盘图标上的QQ账号,

但是这个方法写起来比较麻烦,如果用户有意玩玩的话,也可以自己在你软件获取之前先用API修改你要获取的目标信息!

还有一种方法就是内存读取,当然要找到一个QQ登录成功后存放QQ号码的地址,基址肯定是不存在的,再加之QQ更新频繁,

所以内存读取的办法也不太好,

 

为了实现这个目的,还有一种办法那就是利用QQ网页自身的功能,这种方法既方便又准确,下面就来说下原理:

 

打开: http://xui.ptlogin2.qq.com/cgi-bin/qlogin

我们会发现这也页面会自动获取我们的已登录的QQ信息,并可以实现快速登录,分析之:

关键的东西:

<script></script>

通过分析这个js,我们找到如下2个重要的函数:

 

 function ptui_qInit()  这个函数的作用是初始化SSOAxCtrlForPTLogin.SSOForPTLogin2对象,创建一个ActiveXObject对象

 hummer_loaduin()     这个函数就是真正的通过 SSOAxCtrlForPTLogin这个COM来获取已登录QQ信息的,

 到此,我们试着自己用程序来调用 SSOAxCtrlForPTLogin的com对象,但是发现失败,原因下面说,

 

 既然不能自己调用 SSOAxCtrlForPTLogin对象,那先试试将页面保存为本地在打开看看什么情况,结果如下:

“快速登录失败,请您返回重试或切换到普通登录模式。” 

很明显, SSOAxCtrlForPTLogin对象是要判断当前url的,如果url不是来自以下域名的都不能初始化成功:

var site=["qq.com","paipai.com","tencent.com","soso.com","taotao.com","tenpay.com","foxmail.com","wenwen.com","3366.com","imqq.com"];

 

好了,既然不能自己用本地页面,也不能自己写程序调用它的COM,那我们就直接来访问它获取它页面上已经获取好的信息吧:

同时附上已经格式好了的  xui.js代码,

net.txt文件时用C#实现的,现在想用js或者php实现,可以参考下C#的代码



代码下载地址:http://pan.baidu.com/s/144rug

回复讨论(解决方案)

直接利用 oauth 应该就好了吧

腾讯不是有节口吗

腾讯不是有节口吗 没有吧 ,可以在网页上获取用户电脑上登录的qq号


腾讯不是有节口吗 没有吧 ,可以在网页上获取用户电脑上登录的qq号

获取浏览者是否登录QQ,登录QQ的号码,必须得用腾讯的那个接口。
官网可以申请到的, http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91OpenAPI%E6%9D%83%E9%99%90%E7%94%B3%E8%AF%B7

如果仅仅是获取自己电脑登录的QQ号码,很容易的。

c# 是用WebBrowser 等网页加载完成后读取的 。。  PHP 不知道有没类似的功能

初始化Com  

		if (window.ActiveXObject) {			q_hummerQtrl = new ActiveXObject("SSOAxCtrlForPTLogin.SSOForPTLogin2");			var A = q_hummerQtrl.CreateTXSSOData();			q_hummerQtrl.InitSSOFPTCtrl(0, A);			g_vOptData = q_hummerQtrl.CreateTXSSOData()		} else {}		hummer_loaduin();



function hummer_loaduin() {	q_aUinList.length = 0;	if (window.ActiveXObject) {		var Y = q_hummerQtrl.DoOperation(1, g_vOptData);		if (null == Y) {			return		}		try {			var T = Y.GetArray("PTALIST");			var c = T.GetSize();			var X = "";			var H = $("list_uin");			for (var d = 0; d < c; d++) {				var E = T.GetData(d);				var a = E.GetDWord("dwSSO_Account_dwAccountUin");				var J = "";				var O = E.GetByte("cSSO_Account_cAccountType");				var b = a;				if (O == 1) {					try {						J = E.GetArray("SSO_Account_AccountValueList");						b = J.GetStr(0)					} catch(Z) {}				}				var Q = 0;				try {					Q = E.GetWord("wSSO_Account_wFaceIndex")				} catch(Z) {					Q = 0				}				var S = "";				try {					S = E.GetStr("strSSO_Account_strNickName")				} catch(Z) {					S = ""				}				var F = E.GetBuf("bufGTKey_PTLOGIN");				var G = E.GetBuf("bufST_PTLOGIN");				var N = "";				var A = G.GetSize();				for (var W = 0; W < A; W++) {					var B = G.GetAt(W).toString("16");					if (B.length == 1) {						B = "0" + B					}					N += B				}				var M = {					uin: a,					name: b,					type: O,					face: Q,					nick: S,					key: N				};				q_aUinList[d] = M			}		} catch(Z) {}	} else {		try {			var M = pt.sso;			var L = M.InitPVA();			if (L != false) {				var I = M.GetPVACount();				for (var W = 0; W < I; W++) {					var C = M.GetUin(W);					var D = M.GetAccountName(W);					var K = M.GetFaceIndex(W);					var U = M.GetNickname(W);					var P = M.GetGender(W);					var V = M.GetUinFlag(W);					var f = M.GetGTKey(W);					var R = M.GetST(W);					q_aUinList[W] = {						uin: C,						name: D,						type: 0,						face: K,						nick: U,						key: R					}				}				if (typeof(M.GetKeyIndex) == "function") {					pt.keyindex = M.GetKeyIndex()				}			}		} catch(Z) {}	}	switch (q_aUinList.length) {	case 0:		ptui_reportAttr(77430, 0.05);		break;	case 1:		ptui_reportAttr(77431, 0.05);		break;	default:		ptui_reportAttr(77432, 0.05)	}}

好像js跑对象可以  调试的时候看到了QQ号 和昵称了   数量也对

初始化Com  

		if (window.ActiveXObject) {			q_hummerQtrl = new ActiveXObject("SSOAxCtrlForPTLogin.SSOForPTLogin2");			var A = q_hummerQtrl.CreateTXSSOData();			q_hummerQtrl.InitSSOFPTCtrl(0, A);			g_vOptData = q_hummerQtrl.CreateTXSSOData()		} else {}		hummer_loaduin();



function hummer_loaduin() {	q_aUinList.length = 0;	if (window.ActiveXObject) {		var Y = q_hummerQtrl.DoOperation(1, g_vOptData);		if (null == Y) {			return		}		try {			var T = Y.GetArray("PTALIST");			var c = T.GetSize();			var X = "";			var H = $("list_uin");			for (var d = 0; d < c; d++) {				var E = T.GetData(d);				var a = E.GetDWord("dwSSO_Account_dwAccountUin");				var J = "";				var O = E.GetByte("cSSO_Account_cAccountType");				var b = a;				if (O == 1) {					try {						J = E.GetArray("SSO_Account_AccountValueList");						b = J.GetStr(0)					} catch(Z) {}				}				var Q = 0;				try {					Q = E.GetWord("wSSO_Account_wFaceIndex")				} catch(Z) {					Q = 0				}				var S = "";				try {					S = E.GetStr("strSSO_Account_strNickName")				} catch(Z) {					S = ""				}				var F = E.GetBuf("bufGTKey_PTLOGIN");				var G = E.GetBuf("bufST_PTLOGIN");				var N = "";				var A = G.GetSize();				for (var W = 0; W < A; W++) {					var B = G.GetAt(W).toString("16");					if (B.length == 1) {						B = "0" + B					}					N += B				}				var M = {					uin: a,					name: b,					type: O,					face: Q,					nick: S,					key: N				};				q_aUinList[d] = M			}		} catch(Z) {}	} else {		try {			var M = pt.sso;			var L = M.InitPVA();			if (L != false) {				var I = M.GetPVACount();				for (var W = 0; W < I; W++) {					var C = M.GetUin(W);					var D = M.GetAccountName(W);					var K = M.GetFaceIndex(W);					var U = M.GetNickname(W);					var P = M.GetGender(W);					var V = M.GetUinFlag(W);					var f = M.GetGTKey(W);					var R = M.GetST(W);					q_aUinList[W] = {						uin: C,						name: D,						type: 0,						face: K,						nick: U,						key: R					}				}				if (typeof(M.GetKeyIndex) == "function") {					pt.keyindex = M.GetKeyIndex()				}			}		} catch(Z) {}	}	switch (q_aUinList.length) {	case 0:		ptui_reportAttr(77430, 0.05);		break;	case 1:		ptui_reportAttr(77431, 0.05);		break;	default:		ptui_reportAttr(77432, 0.05)	}}



没反应啊,我保存为html,没反应啊,代码如下
<script>		if (window.ActiveXObject) {			q_hummerQtrl = new ActiveXObject(&quot;SSOAxCtrlForPTLogin.SSOForPTLogin2&quot;);			var A = q_hummerQtrl.CreateTXSSOData();			q_hummerQtrl.InitSSOFPTCtrl(0, A);			g_vOptData = q_hummerQtrl.CreateTXSSOData()		} else {}		hummer_loaduin();		function hummer_loaduin() {	q_aUinList.length = 0;	if (window.ActiveXObject) {		var Y = q_hummerQtrl.DoOperation(1, g_vOptData);		if (null == Y) {			return		}		try {			var T = Y.GetArray(&quot;PTALIST&quot;);			var c = T.GetSize();			var X = &quot;&quot;;			var H = $(&quot;list_uin&quot;);			for (var d = 0; d &lt; c; d++) {				var E = T.GetData(d);				var a = E.GetDWord(&quot;dwSSO_Account_dwAccountUin&quot;);				var J = &quot;&quot;;				var O = E.GetByte(&quot;cSSO_Account_cAccountType&quot;);				var b = a;				if (O == 1) {					try {						J = E.GetArray(&quot;SSO_Account_AccountValueList&quot;);						b = J.GetStr(0)					} catch(Z) {}				}				var Q = 0;				try {					Q = E.GetWord(&quot;wSSO_Account_wFaceIndex&quot;)				} catch(Z) {					Q = 0				}				var S = &quot;&quot;;				try {					S = E.GetStr(&quot;strSSO_Account_strNickName&quot;)				} catch(Z) {					S = &quot;&quot;				}				var F = E.GetBuf(&quot;bufGTKey_PTLOGIN&quot;);				var G = E.GetBuf(&quot;bufST_PTLOGIN&quot;);				var N = &quot;&quot;;				var A = G.GetSize();				for (var W = 0; W &lt; A; W++) {					var B = G.GetAt(W).toString(&quot;16&quot;);					if (B.length == 1) {						B = &quot;0&quot; + B					}					N += B				}				var M = {					uin: a,					name: b,					type: O,					face: Q,					nick: S,					key: N				};				q_aUinList[d] = M			}		} catch(Z) {}	} else {		try {			var M = pt.sso;			var L = M.InitPVA();			if (L != false) {				var I = M.GetPVACount();				for (var W = 0; W &lt; I; W++) {					var C = M.GetUin(W);					var D = M.GetAccountName(W);					var K = M.GetFaceIndex(W);					var U = M.GetNickname(W);					var P = M.GetGender(W);					var V = M.GetUinFlag(W);					var f = M.GetGTKey(W);					var R = M.GetST(W);					q_aUinList[W] = {						uin: C,						name: D,						type: 0,						face: K,						nick: U,						key: R					}				}				if (typeof(M.GetKeyIndex) == &quot;function&quot;) {					pt.keyindex = M.GetKeyIndex()				}			}		} catch(Z) {}	}	switch (q_aUinList.length) {	case 0:		ptui_reportAttr(77430, 0.05);		break;	case 1:		ptui_reportAttr(77431, 0.05);		break;	default:		ptui_reportAttr(77432, 0.05)	}}</script>



腾讯不是有节口吗 没有吧 ,可以在网页上获取用户电脑上登录的qq号

获取浏览者是否登录QQ,登录QQ的号码,必须得用腾讯的那个接口。
官网可以申请到的, http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91OpenAPI%E6%9D%83%E9%99%90%E7%94%B3%E8%AF%B7

如果仅仅是获取自己电脑登录的QQ号码,很容易的。



我不是获取登录的,我的需求是 只要用户打开网页,就能检测到用户电脑上已经登录的qq(注意是用户电脑上登录的qq),这个绝对可以实现的,我见过有人搞过

dom获取把  好像只有从网页抓了   他的com有验证  js里一堆堆的异常  昨天调了好久  擦  可能还有其他办法    不过 我没啥好办法了   获取网页上的把     这样还简单点 

我不是获取登录的,我的需求是 只要用户打开网页,就能检测到用户电脑上已经登录的qq(注意是用户电脑上登录的qq),这个绝对可以实现的,我见过有人搞过

QQ自动同步登录,那个绝对得向QQ官方申请授权的。否则别想了。

已经私信你了

已经私信你了
怎么弄的?


已经私信你了
怎么弄的?
同问?

大牛 怎么弄的

已经私信你了 您好,请问这个是怎么实现的?我也想要这样的一个功能,求帮助!! 谢谢您了!!

我已经关注您了,请您也关注一下我,发我一个吧!!谢谢了!!

发我一个吧!谢谢

大哥们,谁有思路给小弟说下吧!小弟在这里拜谢了


已经私信你了
怎么弄的?
同求


已经私信你了
怎么弄的?
这个问题解决没呢。。已关注你~!

亲  你的demo不能下载呀...能给我一份吗?   1101350716@qq.com  我再研究一下

楼主 我也要 急需  dawnvi@dawnvi.com 谢谢

这问题头痛一天了,盼望能提到楼主指点。

具体咋搞  详细点 

万吨铜球,高手

万吨铜球,高手  swing_li@sina.com

楼主吉祥  同求 397109515@qq.com

这要是能用就怪了。

兄弟 ,你这个提取的做出来没有,我有方案,2 0 6 4 7 5 5 3 6 5

大哥,好像不能用啊,如何输出一下看看效果呢?

同求:603434790@qq.com

已实现,还可以获取手机号码的,后台给用户开户后可以设置有效期,获取到访客qq后可以给用户实时发送邮件给管理员,还可一键推送邮件给客户,QQ的昵称、位置、性别这些都可以获取。需要系统联系我吧,便宜卖给你 QQ :2064755365 

咋搞呢

同求一份。楼主154519725@qq.com

有这样的功能吗,同求啊1003014877@qq.com

已经私信你了 同求 313653576@qq.com

已经私信你了

同求一个啊  ……   416984751@qq.com

同求啊  hhhhhhhh

已经私信你了 同求一个啊  ……   366609189@qq.com 

已经私信你了

也发一个给我好吗? 250154026@qq.com  非常感谢

已经私信你了
能否也发我一份,学习学习~

发我一份,学习一下下:邮箱:guolongli945@qq.com

遇到同样的需求,楼主能发个解决方法给我?邮箱605986169@qq.com,谢谢

我也遇到相同的问题,能否发个给我呢,谢谢了979081767@qq.com

求高手解惑!!我也需要一份!!727188903@qq.com

同求 lbxbj2008@163.com

求高手指导,给我一份代码,邮箱1021215894@qq.com

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn