已给出相应js判断代码,如何用js或者php判断电脑是否登录qq并获得相应qq号
类似于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("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) }}</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

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Laravel simplifie la gestion des données de session temporaires à l'aide de ses méthodes de flash intuitives. Ceci est parfait pour afficher de brefs messages, alertes ou notifications dans votre application. Les données ne persistent que pour la demande ultérieure par défaut: $ demande-

L'extension PHP Client URL (CURL) est un outil puissant pour les développeurs, permettant une interaction transparente avec des serveurs distants et des API REST. En tirant parti de Libcurl, une bibliothèque de transfert de fichiers multi-protocol très respectée, PHP Curl facilite Efficient Execu

Alipay Php ...

Laravel fournit une syntaxe de simulation de réponse HTTP concise, simplifiant les tests d'interaction HTTP. Cette approche réduit considérablement la redondance du code tout en rendant votre simulation de test plus intuitive. L'implémentation de base fournit une variété de raccourcis de type de réponse: Utiliser illuminate \ support \ faades \ http; Http :: faux ([[ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

Voulez-vous fournir des solutions instantanées en temps réel aux problèmes les plus pressants de vos clients? Le chat en direct vous permet d'avoir des conversations en temps réel avec les clients et de résoudre leurs problèmes instantanément. Il vous permet de fournir un service plus rapide à votre personnalité

L'article traite de la liaison statique tardive (LSB) dans PHP, introduite dans PHP 5.3, permettant une résolution d'exécution de la méthode statique nécessite un héritage plus flexible. Problème main: LSB vs polymorphisme traditionnel; Applications pratiques de LSB et perfo potentiel

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

L'article traite des fonctionnalités de sécurité essentielles dans les cadres pour se protéger contre les vulnérabilités, notamment la validation des entrées, l'authentification et les mises à jour régulières.
