Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微信网页授权并获取用户信息

微信网页授权并获取用户信息

作者头像
前端黑板报
发布于 2018-12-26 03:19:13
发布于 2018-12-26 03:19:13
3.2K00
代码可运行
举报
文章被收录于专栏:前端黑板报前端黑板报
运行总次数:0
代码可运行

推荐语

这一篇写的还是很清楚的,所以推荐一下,后面我会补一个Vue版本微信授权登录的例子。

介绍

在很多微信H5应用里,当用户访问第三方应用时就需要进行微信网页授权,并且很多涉及安全的操作我们必须要先获取用户信息才能继续,本文章简单介绍了微信授权流程,并通过申请微信测试账号来模拟网页授权,用户在授权页点击确定登录后获取用户信息并显示在前端页面,最后效果如下图 :

工具及开发准备

  1. 微信开发者工具及微信测试号

因为是微信授权,所以必须要在微信环境下使用,首先我们要在这里安装微信开发者工具,因为我们没有自己的应用,所以还需要在微信公众平台申请一个接口测试号,这个接口测试号就相当于我们的第三方应用。

 2. 参数设置

登陆测试号后可以查看到自己的appId和appsecret信息,将体验接口权限表里的网页服务的网页授权获取用户基本信息修改为127.0.0.1:8800,该地址就是用户确认授权后回调的地址即我们应用的后台处理地址,如下图

最后拿出自己微信扫码关注该测试号即可,如下图所示

微信授权流程介绍

具体流程及详细介绍大家可以到官网微信公众平台技术文档查看,大致分为四步:

1. 引导用户进入授权页面同意授权,此时会调用微信api获取code

2. 授权通过后会带上code参数请求回调地址

3. 后台获取code,再次调用微信接口换取网页授权access_token和openid

4. 通过网页授权access_token和openid获取用户基本信息(如果有unionid还会获取到unionid参数)

正式开始

详细代码可以在github上下载,地址https://github.com/wangfengyuan/wxAuthorize

1. 原始代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let express = require("express");const https = require('https');let app = express();
//appIDlet appID = `wxec6fa9e9bc03d885`;
//appsecretlet 
appSerect = `4c8a0d14cff08959b4e17334cabf9cf0`;
//点击授权后重定向url地址let redirectUrl = `/getUserInfo`;let host = `http://127.0.0.1:3000`;
//微信授权api,接口返回code,点击授权后跳转到重定向地址并带上code参数let authorizeUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=` +    `${host}${redirectUrl}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`app.get("/login", function(req, res) {    
    res.sendFile(path.resolve(__dirname,'login.html'));
});
app.get("/auth", function(req, res) {    
    res.writeHead(302, {    
        'Location': authorizeUrl  
     });    
    res.end();
});
app.get("/getUserInfo", function(req, res) {    
    let code = req.query.code;    
    let getaccess = `https://api.weixin.qq.com/sns/oauth2/access_token?appid=` + `${appID}&secret=${appSerect}&code=${code}&grant_type=authorization_code`;    
    //通过拿到的code和appID、app_serect获取access_token和open_id    
    https.get(getaccess, (resText) => {        
        var ddd = "";        
        resText.on('data', (d) => {
            ddd += d;        
        });
        resText.on('end', () => {
            // console.log(ddd);
            var obj = JSON.parse(ddd);
            var access_token = obj.access_token; 
            var open_id = obj.openid;            
            //通过上一步获取的access_token和open_id获取userInfo即用户信息            let getUserUrl = `https://api.weixin.qq.com/sns/userinfo?access_token=${access_token}&openid=${open_id}&lang=zh_CN`;
            https.get(getUserUrl, (resText) => {
                user = "";
                resText.on('data', (d) => {
                    user += d;
                });
                resText.on('end', () => {
                    console.log(user);
                    var userobj = JSON.parse(user);
                    res.send(userobj);
                    console.log(userobj);
                });
            })        });
    }).on('error', (e) => {
        console.error(e);
    }); 

app.listen(3000);

具体使用时要将appID和appSerect换成你对应的参数即可,因为我们的请求是要按一定顺序的,但是node发送请求是异步的,所以我们的请求嵌套了三层,代码很难看,所以这里可以采用ES6的async和await解决异步回调地狱。

2. 使用ES6的async和await的改进代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
async function wxAuth(req, res) {
    //解析querystring获取URL中的code值    
    let code = req.query.code;
    //通过拿到的code和appID、app_serect获取返回信息    let resObj = await getAccessToken(code);
    //解析得到access_token和open_id    let access_token = resObj.access_token;    let open_id = resObj.openid;
    //通过上一步获取的access_token和open_id获取userInfo即用户信息    let userObj = await getUserInfo(access_token, open_id);
    console.log(userObj);
    res.render(path.resolve(__dirname,'userInfo.ejs'), {userObj: userObj});
    // res.send(userObj);}

//通过拿到的code和appID、app_serect获取access_token和open_idfunction getAccessToken(code) {    return new Promise( (resolve, reject) => {        let getAccessUrl = `https://api.weixin.qq.com/sns/oauth2/access_token?appid=` + `${appID}&secret=${appSerect}&code=${code}&grant_type=authorization_code`;
        https.get(getAccessUrl, (res) => {
            var resText = "";
            res.on('data', (d) => { 
               resText += d; 
            });
            res.on('end', () => {
                var resObj = JSON.parse(resText);
                resolve(resObj);
            });
        }).on('error', (e) => {
            console.error(e);
        });
    });
    }
//通过上一步获取的access_token和open_id获取userInfo即用户信息function getUserInfo(access_token, open_id) {    return new Promise( (resolve, reject) => {        let getUserUrl = `https://api.weixin.qq.com/sns/userinfo?access_token=${access_token}&openid=${open_id}&lang=zh_CN`;
        https.get(getUserUrl, (res) => {
            var resText = ""; 
            res.on('data', (d) => {
                resText += d;
            });
            res.on('end', () => {
                var userObj = JSON.parse(resText);
                resolve(userObj);
            });
        }).on('error', (e) => {
            console.error(e);
        });
    })}

修改后代码流程清晰了很多,最后点击确认登陆后将获取到的userObj通过ejs模板渲染在前端页面,就能看到文章最开始展现的效果图。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端黑板报 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
研究人员介绍了“SeMask”:一种有效的 Transformer 框架,它在语义注意操作的帮助下将语义信息整合到编码器中
在展示了Transformer 在视觉领域的效率之后,研究界将注意力集中在将其应用扩展到多个领域。其中之一是语义分割,这是许多领域的关键应用,例如自动驾驶或医疗诊断。该主题的经典方法是使用现有的预训练 Transformer 层作为编码器,针对分割任务对其进行调整。然而由于与用于预训练的数据集相比,这种方法的数据集相对较小,因此在微调期间缺乏对语义上下文的洞察力。
代码医生工作室
2022/03/07
1.3K0
研究人员介绍了“SeMask”:一种有效的 Transformer 框架,它在语义注意操作的帮助下将语义信息整合到编码器中
深度学习图语义分割的综述
图像分割是计算机视觉和机器学习领域发展最快的领域之一,包括分类、分类与定位、目标检测、语义分割、实例分割和Panoptic分割。
算法进阶
2023/12/26
6930
深度学习图语义分割的综述
用于语义分割的解码器 diffusion 预训练方法
当前语义分割任务存在一个特别常见的问题是收集 groundtruth 的成本和耗时很高,所以会使用预训练。例如监督分类或自监督特征提取,通常用于训练模型 backbone。基于该问题,这篇文章介绍的方法被叫做 decoder denoising pretraining (DDeP),如下图所示。
BBuf
2023/08/25
9070
用于语义分割的解码器 diffusion 预训练方法
DAFormer | 使用Transformer进行语义分割无监督域自适应的开篇之作
DAFormer代表了UDA的一个重大进步。它在GTA→Cityscapes改善了10.8 mIoU、Synthia→Cityscapes提升了5.4 mIoU。
集智书童公众号
2022/05/26
2.8K0
DAFormer | 使用Transformer进行语义分割无监督域自适应的开篇之作
顶刊解读 IJCV | CAE-GReaT: 卷积辅助高效图推理Transformer用于密集图像预测
CAE-GReaT: 卷积辅助高效图推理Transformer用于密集图像预测 Dong Zhang,Yi Lin, Jinhui Tang,Kwang-Ting Cheng
小白学视觉
2024/10/21
1750
顶刊解读 IJCV | CAE-GReaT: 卷积辅助高效图推理Transformer用于密集图像预测
AMMUNet | 多尺度注意力图融合在图像语义分割中的应用 !
远程感知图像的语义分割至关重要,因为它为城市规划、环境监测和资源管理等一系列应用奠定了基础。深度学习的出现,尤其是卷积神经网络(CNNs),带来了显著的范式转变,革新了计算机视觉领域,进而也影响了远程感知图像分析。
AIGC 先锋科技
2024/07/08
7980
AMMUNet  |  多尺度注意力图融合在图像语义分割中的应用 !
SCLIP?与CLIP是什么关系?比CLIP高40点,这么离谱吗?
在大规模基础模型的时代,经过大规模预训练后,对各种下游任务进行最小调整已成为迁移学习的新范式。然而,与自然语言处理领域基础模型的巨大成功不同,大多数视觉模型在各种下游任务中的零样本迁移学习能力尚无法达到可比水平。通过引入语言监督并在网络规模的数据集上进行学习,对比语言图像预训练(CLIP)模型能够将视觉表示泛化到开放词汇推理,并展现出惊人的零样本分类结果,然而,在更复杂的任务,如语义分割方面,这种能力仍然非常有限。
集智书童公众号
2023/12/19
1.2K0
SCLIP?与CLIP是什么关系?比CLIP高40点,这么离谱吗?
北大、北理工、旷视联手:用于图像语义分割的金字塔注意力网络
翻译 | 林椿眄 出品 | 人工智能头条(公众号ID:AI_Thinker) 近日,北京理工大学、旷视科技、北京大学联手,发表了一篇名为 Pyramid Attention Network for Semantic Segmentation 的论文。在这篇论文中,四位研究者提出了一种金字塔注意力网络 (Pyramid Attention Network,PAN),利用图像全局的上下文信息来解决语义分割问题。 与大多数现有研究利用复杂的扩张卷积 (dilated convolution) 并人为地设计解码器网
用户1737318
2018/06/05
1.4K0
用于实时语义分割的可重参数化双分辨率网络
语义分割在自动驾驶和医学图像等应用中发挥着关键作用。尽管现有的实时语义分割模型在准确性和速度之间取得了令人称赞的平衡,但其多路径块仍然影响着整体速度。为了解决这个问题,本研究提出了一种专门用于实时语义分割的重参数化双分辨率网络(RDRNet)。具体来说,RDRNet采用了一种双分支架构,在训练过程中使用多路径块,并在推理过程中将它们重参数化为单路径块,从而同时提高了准确性和推理速度。此外,我们还提出了重参数化金字塔池化模块(RPPM),以增强金字塔池化模块的特征表示能力,同时不增加其推理时间。在Cityscapes、CamVid和Pascal VOC 2012数据集上的实验结果表明,RDRNet在性能和速度方面都优于现有的最先进模型。研究代码可在https://github.com/gyyang23/RDRNet获取。
AI浩
2024/10/22
2360
用于实时语义分割的可重参数化双分辨率网络
Segmenter:基于纯Transformer的语义分割网络
正如大家所知,在进行图像语义分割时,图像被编码成一系列补丁后往往很模糊,需要借助上下文信息才能被正确分割。
Amusi
2021/06/09
1.9K0
Segmenter:基于纯Transformer的语义分割网络
解耦Query与上下文窗,多尺度学习器,突破语义分割中的尺度不足与场失效问题 !
在语义分割中,有两种典型的学习多尺度表示的方法。第一种涉及应用具有可变感受野的滤波器,经典技术如孔洞卷积(Chen等人,2018)或自适应池化(Zhao等人,2017)。通过调整超参数,如膨胀率和池化输出大小,网络可以改变感受野以在多个尺度上学习表示。
未来先知
2024/08/13
1990
解耦Query与上下文窗,多尺度学习器,突破语义分割中的尺度不足与场失效问题 !
Transformer--编码器和解码器(包含掩码张量,注意力机制,多头注意力机制)
编码器部分: 由N个编码器层堆叠而成,每个编码器层由两个子层连接结构组成,第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接,第二个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接
用户10950404
2024/07/30
9480
Transformer--编码器和解码器(包含掩码张量,注意力机制,多头注意力机制)
YoloV8改进策略:注意力改进|VOLO,视觉识别中的视觉展望器|即插即用|附代码+改进方法
本文参考的是《VOLO:视觉识别中的视觉展望器》一文,该论文主要讨论了视觉识别领域中卷积神经网络(CNNs)与视觉转换器(ViTs)的性能对比,并提出了一个新的模型架构——Vision Outlooker(VOLO)。VOLO通过引入一种新颖的前景注意力机制(Outlook Attention),在ImageNet分类任务上实现了卓越的性能,且能够很好地迁移到下游任务,如语义分割。
AI浩
2024/11/13
1.2K0
YoloV8改进策略:注意力改进|VOLO,视觉识别中的视觉展望器|即插即用|附代码+改进方法
超快语义分割 | PP-LiteSeg集速度快、精度高、易部署等优点于一身,必会模型!!!
语义分割任务旨在精确预测图像中每个像素的标签。它已广泛应用于医学影像、自动驾驶、视频会议、半自动注释等应用。
集智书童公众号
2022/05/26
2.5K0
超快语义分割 | PP-LiteSeg集速度快、精度高、易部署等优点于一身,必会模型!!!
语义分割的基本构造_语义分割综述
语义分割(全像素语义分割)作为经典的计算机视觉问题(图像分类,物体识别检测,语义分割)。其涉及将一些原始数据(例如:平面图像)作为输入并将它们转换为具有突出显示的感兴趣区域的掩膜,其中图像中的每个像素根据其所属的对象被分配类别ID。早起的计算机视觉问题只发现边缘(线条和曲线)或渐变元素,但它们从完全按照人类感知的方式提供像素级别的图像理解。语义分割将属于同一目标的图像部分聚集在一起解决这个问题,从而扩展了其应用领域。值得注意的是,与其他的基于图像的任务相比,语义分割是完全不同且先进的。
全栈程序员站长
2022/09/25
9410
语义分割的基本构造_语义分割综述
基于 Transformer 的多模态融合方法用于语义分割 !
环境语义分割是自动驾驶中的一个挑战性课题,并在诸如操纵、路径规划和场景理解等智能车辆相关研究中发挥着关键作用。由于深度神经网络的进步,特别是卷积神经网络(CNN),以及开放数据集的可用性,语义分割领域已取得了巨大进展。早期研究采用相机的RGB图像作为输入,并用具有相对单调场景的数据集进行测试。近年来,感知传感器行业的蓬勃发展以及严格的安全要求推动了涉及不同传感器和综合场景的语义分割研究。在各种研究中,激光雷达传感器(LiDAR)参与最多。流行的仅激光雷达方法包括VoxNet[6]、PointNet[7]和RotationNet[8]。然而,多模态传感器融合被视为解决自动驾驶问题的有前途的技术,并已成为语义分割的主流选择。
未来先知
2024/08/20
9560
基于 Transformer 的多模态融合方法用于语义分割 !
华为诺亚实验室提出CFT | 大模型打压下语义分割该何去何从?或许这就是答案!
本文首发于 【集智书童】,白名单账号转载请自觉植入本公众号名片并注明来源,非白名单账号请先申请权限,违者必究。
集智书童公众号
2023/09/04
5330
华为诺亚实验室提出CFT | 大模型打压下语义分割该何去何从?或许这就是答案!
全新范式 | 沈春华老师团队提出无需解码器的目标检测器DFFT
ViT 正在改变目标检测方法的格局。ViT 在检测中的一个自然用途是用基于Transformer的主干替换基于 CNN 的主干,这直接且有效,但代价是为推理带来了相当大的计算负担。更巧妙的做法是 DETR 系列,它消除了在目标检测中对许多手工设计组件的需求,但引入了需要超长收敛时间的解码器。因此,基于 Transformer 的目标检测无法在大规模应用中流行。为了克服这些问题,作者提出了一种完全基于Transformer且无解码器(DFFT)的目标检测器,首次在训练和推理阶段都实现了高效率。 通过围绕2个切
AI科技评论
2022/06/20
4410
全新范式 | 沈春华老师团队提出无需解码器的目标检测器DFFT
长尾语义分割的挑战与解决方案,基于 Transformer 的 Query匹配在LTSS中的应用 !
语义分割[1]使得机器能够以像素 Level 识别图像,这在实际应用中令人印象深刻。由于社区的持续努力,语义分割技术已经取得了显著进步,并发展出了新的能力,例如,领域适应[2, 3],半监督[4, 5],弱监督[6, 7],小样本[8, 9]和零样本语义分割。
AIGC 先锋科技
2024/07/08
3730
长尾语义分割的挑战与解决方案,基于  Transformer 的 Query匹配在LTSS中的应用 !
谷歌团队推出新Transformer,优化全景分割方案|CVPR 2022
---- 点击上方↑↑↑“OpenCV学堂”关注我来源:公众号 新智元 授权 【导读】近日,谷歌团队推出了一项新Transformer,可用于优化全景分割方案,还登上了CVPR 2022。 最近,谷歌AI团队受Transformer和DETR的启发提出了一种使用Mask Transformer进行全景分割的端到端解决方案。 全称是end-to-end solution for panoptic segmentation with mask transformers,主要用于生成分割MaskTransfor
OpenCV学堂
2022/08/29
5490
谷歌团队推出新Transformer,优化全景分割方案|CVPR 2022
推荐阅读
研究人员介绍了“SeMask”:一种有效的 Transformer 框架,它在语义注意操作的帮助下将语义信息整合到编码器中
1.3K0
深度学习图语义分割的综述
6930
用于语义分割的解码器 diffusion 预训练方法
9070
DAFormer | 使用Transformer进行语义分割无监督域自适应的开篇之作
2.8K0
顶刊解读 IJCV | CAE-GReaT: 卷积辅助高效图推理Transformer用于密集图像预测
1750
AMMUNet | 多尺度注意力图融合在图像语义分割中的应用 !
7980
SCLIP?与CLIP是什么关系?比CLIP高40点,这么离谱吗?
1.2K0
北大、北理工、旷视联手:用于图像语义分割的金字塔注意力网络
1.4K0
用于实时语义分割的可重参数化双分辨率网络
2360
Segmenter:基于纯Transformer的语义分割网络
1.9K0
解耦Query与上下文窗,多尺度学习器,突破语义分割中的尺度不足与场失效问题 !
1990
Transformer--编码器和解码器(包含掩码张量,注意力机制,多头注意力机制)
9480
YoloV8改进策略:注意力改进|VOLO,视觉识别中的视觉展望器|即插即用|附代码+改进方法
1.2K0
超快语义分割 | PP-LiteSeg集速度快、精度高、易部署等优点于一身,必会模型!!!
2.5K0
语义分割的基本构造_语义分割综述
9410
基于 Transformer 的多模态融合方法用于语义分割 !
9560
华为诺亚实验室提出CFT | 大模型打压下语义分割该何去何从?或许这就是答案!
5330
全新范式 | 沈春华老师团队提出无需解码器的目标检测器DFFT
4410
长尾语义分割的挑战与解决方案,基于 Transformer 的 Query匹配在LTSS中的应用 !
3730
谷歌团队推出新Transformer,优化全景分割方案|CVPR 2022
5490
相关推荐
研究人员介绍了“SeMask”:一种有效的 Transformer 框架,它在语义注意操作的帮助下将语义信息整合到编码器中
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验