Inhaltsverzeichnis
回复讨论(解决方案)
Heim Backend-Entwicklung PHP-Tutorial 已给出相应js判断代码,如何用js或者php判断电脑是否登录qq并获得相应qq号

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

Jun 23, 2016 pm 02:28 PM

本帖最后由 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

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Arbeiten mit Flash -Sitzungsdaten in Laravel Arbeiten mit Flash -Sitzungsdaten in Laravel Mar 12, 2025 pm 05:08 PM

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Mar 14, 2025 am 11:42 AM

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Mar 12, 2025 pm 05:09 PM

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

12 Beste PHP -Chat -Skripte auf Codecanyon 12 Beste PHP -Chat -Skripte auf Codecanyon Mar 13, 2025 pm 12:08 PM

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Rahmensicherheitsmerkmale: Schutz vor Schwachstellen. Mar 28, 2025 pm 05:11 PM

In Artikel werden wichtige Sicherheitsfunktionen in Frameworks erörtert, um vor Schwachstellen zu schützen, einschließlich Eingabevalidierung, Authentifizierung und regelmäßigen Aktualisierungen.

See all articles