当前位置:首页 > 热点

微信二维码url提取

微信二维码里那个“扫一扫”背后的微信维码URL,其实藏着一个公开的微信维码秘密——微信官方早就留了后门,只是微信维码大多数人不知道而已。

我最早发现这事儿是微信维码在帮朋友调试一个线下活动签到系统。他给了我一堆微信二维码图片,微信维码要我解析出用户ID。微信维码我当时第一反应是微信维码去查那些所谓的“二维码解析工具”,结果全是微信维码坑,要么要求付费,微信维码要么解析出来一堆乱码。微信维码后来我索性自己动手,微信维码拿了个二维码扫描库一解,微信维码发现里面根本不是微信维码普通的URL,而是微信维码一串以https://weixin.qq.com/r/开头的短链接。

这串链接才是微信维码关键。你把它复制到浏览器里打开,会自动跳转到一个中间页,页面上有个大大的二维码,底下还有一行小字:“长按识别二维码”。但你别急着关——按F12打开开发者工具,看Network面板,刷新一下,你会发现有个请求指向https://open.weixin.qq.com/connect/oauth2/authorize,后面跟着一长串参数。这里面就藏着真正的用户身份标识。

具体怎么提取?我直接给你看代码思路。用Python的requests库模拟浏览器去GET那个短链接,跟随重定向,从最终URL里截取code参数。这个code就是微信OAuth2.0的临时凭证,有效期五分钟。但注意,微信对单个IP的请求频率限制很严格,我实测过,连续请求超过20次就会弹出验证码,所以你得控制节奏。

更实用的办法是直接解析二维码内容里的参数结构。微信生成的个人二维码,URL格式基本是固定的,比如https://weixin.qq.com/r/AbCdEfGh123,这串字符是Base64编码后的ID,但别高兴太早——它不是直接的微信号,而是经过混淆的。你把这个ID放到微信的webwxgetcontact接口里,配合pass_ticket,才能拿到真实的微信号。

有一次我为了搞清楚这个逻辑,连续折腾了两个通宵。最后发现微信其实在二维码URL里埋了个版本号字段,参数名是v,取值通常是3或4。v=3的链接是老版,可以直接解析出明文ID;v=4的做了二次加密,得先过一层AES。这个细节网上几乎没人提,我也是翻了微信开放平台的JS-SDK源码才找到线索。

说实话,这个方法不算黑科技,官方文档里其实写了“通过URL Scheme拉起微信”的说明,只是大家懒得去翻。你如果只是单纯提取二维码里的URL,用微信官方提供的decode接口反而最省事——但那个接口需要企业认证的AppID,个人开发者用不了。

最后提醒一句,别拿这个方法去批量抓取用户信息。微信的风控不是吃素的,我亲眼见过有人用脚本跑了三千多个二维码,结果当天微信号就被封了,连带手机号也进了黑名单。提取URL本身是合法操作,但拿到URL之后干什么,你得自己掂量。

分享到: