数天前,为解决微信二维码扫码登陆在Electorn跳转处理繁琐的问题,写一个微信开放平台扫码登陆解析处理工具😊,将frame数据处理为图片或Base64图片数据返回客户端进行扫码。解决Chrome70中open.weixin.qq.com腾讯SSL证书不被信任的问题(微信官方于2018年8月23日更换了域名证书),解决Chrome68中frame跨域被拦截的问题。
此方案最大特点
:扫码登录无跳转🤠。
Node.js 版本 Demo
:https://weixin.openapi.site/demo
PHP 版本 Demo
:https://apio.xyz/weixin-login-php/
须知
此方案仅适用于微信开放平台
-网站应用
。
Node.js版本为什么不封为NPM库? 这个功能的代码比较简单,https和URL库都是nodejs自带的,直接复制过去用就好了。
Node.js版本使用方法
请阅读WeixinLoginClientHandler.js
文件。
第一步:获取微信UUID;
第二步:根据微信UUID获取二维码图片;
第三步:获取微信服务器返回的Code(详见微信开放平台文档)。
测试方法
在线测试
直接请求https://weixin.openapi.site/img?appid=您的appid&redirect_uri=您在微信开放平台后台设置的授权回调域
,获取二维码和UUID。
再次请求https://weixin.openapi.site/check?uuid=上一步得到的UUID
,获得登录结果的数据。
您要是懒得部署一套,可以直接使用以上地址。
本地测试
先阅读源码,修改server.js
里面的配置信息,使用npm start
启动项目。
访问http://localhost:65533/login/weixin/demo
即可进行测试。
API
weixinLoginClientHandler.weixinUUID().then(r => console.log(r)) \\ 获取微信uuid(用于获取微信二维码和Ajax轮询结果所需参数)
weixinLoginClientHandler.weixinQRCodeImgURL().then(r => console.log(r)) \\ 可以直接获取二维码图片
weixinLoginClientHandler.weixinQRCodeImgBase64().then(r => console.log(r)) \\ 获取二维码图片的Base64数据(主要用于Chrome70中腾讯所使用的赛门铁克证书失效的情况)
weixinLoginClientHandler.getCode(uuid, params.last).then(r => console.log(r)) \\ 获取微信服务器返回的Code(第一个连接是长连接,当用户处于“扫描成功,请在微信中点击确认即可登录”状态时可能会变为轮询,这主要由腾讯服务器控制)
Example
import WeixinLoginClientHandler from './WeixinLoginClientHandler.js'
const weixinLoginClientHandler = new WeixinLoginClientHandler({
appid: 'wx827225356b689e24',
redirect_uri: 'https://qq.jd.com/',
state: ''
})
weixinLoginClientHandler.weixinUUID().then(r => {
console.log(r)
weixinLoginClientHandler.weixinQRCodeImgBase64(r).then(r => console.log(r))
})
weixinLoginClientHandler.weixinQRCodeImgURL().then(r => console.log(r))
PHP版本使用方法
第一步:根据Appid及授权回调域获取二维码图片和微信UUID; 第二步:获取微信服务器返回的Code(详见微信开放平台文档)。
测试方法
直接请求https://apio.xyz/weixin-login-php/weixin.php?appid=您的appid&redirect_uri=您在微信开放平台后台设置的授权回调域
,获取二维码和UUID。
再次请求https://apio.xyz/weixin-login-php/weixin.php?uuid=上一步得到的UUID
,获得登录结果的数据。
您要是懒得部署一套,可以直接使用以上地址。
小提示
- 这个方案可能只适合少部分应用。
- 使用此方法,无需经由服务器端跳转,可以直接获得code。如果是Electron环境,可以直接在渲染进程请求。
- 建议为该功能单独部署,可在您所有项目中使用同一个接口。PHP版本方便部署到虚拟主机等免维护环境,简单方便。
- 该文件使用原生Node.js方法,ES6写法,type=module。
- 理论上你可以模拟任何网站的二维码,但是没有私钥就算拿到code也没有用。
源码
这个可以,不用再弹窗了!
是的!
牛逼
👀️
2022年02月25日 更新。
您好 最近老是提示无法连接到微信服务器 之前都是稳定的 请问有什么更新么
我们一直在用,没有收到反馈异常,也许是服务器和微信服务器通讯不稳定?
也是最近才开始的 错误码是ETIMEDOUT 期间程序也没有调整过> 我们一直在用,没有收到反馈异常,也许是服务器和微信服务器通讯不稳定?
这个错误提示确实是网络原因。在服务器上测试下curl
腾讯服务器。
老师你好,我希望能用一个openwrt路由器实现IPv4和IPv6的桥接,请问我该如何实现?我尝试了直接新增dhcpv6的接口,但是效果不甚理想(无法成功获取公网的ipv6,但是直连上级路由的其他设备是可以获取公网的ipv6地)
![%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE20241205230845.png](https://cdn.wyr.me/visitor-files/2024-12-05/1733411344287屏幕截图 2024-12-05 230845.png)你好
,为什么我这里是0039 813C 0600 0075 16xx xx xx,只有前6组是相同的,博客中要前8位相同,这个不同能不能照着修改呢?我系统版本是Win1124H2
大神你好,win11专业版24h2最新版26100.2033,文件如何修改?谢谢
win11专业版24h2最新版26100.2033,Windows Feature Experience Pack 1000.26100.23.0。C:\Windows\System32\termsrv.dll系统自带的这个文件,39 81 3C 06 00 00 0F 85 XX XX XX XX 替换为 B8 00 01 00 00 89 81 38 06 00 00 90。仍然无法远程连接。原来是win11 21h2系统,是可以远程链接的。共享1个主机,2个显示器,2套键鼠,各自独立操作 各自不同的账号,不同的桌面环境。
博主,win11专业版24h2最新版,C:\Windows\System32\termsrv.dll系统自带的这个文件,找不到应该修改哪个字段。我的微信:一三五73二五九五00,谢谢