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

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

WBOY
Freigeben: 2016-06-23 14:28:37
Original
1674 Leute haben es durchsucht

本帖最后由 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();
Nach dem Login kopieren
Nach dem Login kopieren



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)	}}
Nach dem Login kopieren
Nach dem Login kopieren

好像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();
Nach dem Login kopieren
Nach dem Login kopieren



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)	}}
Nach dem Login kopieren
Nach dem Login kopieren



没反应啊,我保存为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>
Nach dem Login kopieren



腾讯不是有节口吗 没有吧 ,可以在网页上获取用户电脑上登录的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

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage