微信网页开发授权(获取用户信息) 微信公众平台开发教程(4)

本文介绍了微信网页授权的不同scope类型及应用场景,包括静默授权和获取用户基本信息的过程。同时还提供了具体的实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微信网页授权

Senparc.Weixin SDK 是由盛派网络(Senparc)团队自主研发的针对微信各模块的
开发套件(C# SDK),
已全面支持微信公众号、微信支付、企业号、开放平台、JSSDK、摇一摇周边等模块。
快使用 Senparc.Weixin SDK 轻松打造微信各平台的扩展应用吧!

说明

关于网页授权的两种scope的区别说明
1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。

关于特殊场景下的静默授权
1、上面已经提到,对于以snsapi_base为scope的网页授权,就静默授权的,用户无感知;
2、对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是scope为snsapi_userinfo,也是静默授权,用户无感知。

具体而言,网页授权流程分为四步:
1、引导用户进入授权页面同意授权,获取code
2、通过code换取网页授权access_token(与基础支持中的access_token不同)
3、如果需要,开发者可以刷新网页授权access_token,避免过期
4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

微信公众号配置

第一步这里写图片描述这里写图片描述

程序代码

            string _code = ReqUtils.GetString("code", "");
            string _state = ReqUtils.GetString("state", "");

            if (_code == "" || _code == "authdeny")
                {
                    if (_code == "")
                        //表示用户还未授权
                        _state = "JeffreySu-" + DateTime.Now.Millisecond;//随机数,用于识别请求可靠性
                        string authUrl = OAuthApi.GetAuthorizeUrl("wx64a07fabd01d0a43", HttpContext.Request.Url.ToString(), _state, OAuthScope.snsapi_userinfo, "code", false);
                        HttpContext.Response.Redirect(authUrl, true);
                    }
                    else
                    {
                        Response.Redirect("~/Error.html", true);
                    }
                }
                else
                {
                   //执行到这里  用户同意授权,获取code
                    OAuthAccessTokenResult result = null;
                    try
                    {
                        //通过code换取网页授权access_token
                        result = OAuthApi.GetAccessToken(Configuration.Config.AppID, Configuration.Config.AppSecret, _code);
                        if (result == null && result.errcode != ReturnCode.请求成功)
                        {

                            return;
                        }

                    }
                    catch (Exception x)
                    {
                        return;
                    }
                    OAuthUserInfo userInfo = null;
                    try
                    {
                        //拉取用户信息(需scope为 snsapi_userinfo)                  
                        userInfo = OAuthApi.GetUserInfo(result.access_token, result.openid);
                    }
                    catch (ErrorJsonResultException ex)
                    {

                            return;
                        //未关注,只能授权,无法得到详细信息
                        //这里的 ex.JsonResult 可能为:"{\"errcode\":40003,\"errmsg\":\"invalid openid\"}"
                    }
                     //下面就是你的判断了。
                }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值