本文属于个人原创作品、个人总结,谢绝转载、抄袭。如果您有疑问或者希望沟通交流,可以联系QQ:865562060。

一、背景

    近期实现微信招聘公众号的需求,需要在微信用户同意公众号授权后,获取到微信用户信息。这一步操作在前端无法完成,所以这里我们使用了C# WebApi项目,通过接口实现后台获取微信用户数据再重定向到前端页面。

二、思路

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

4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制);

首先,我们需要明确传递给后台的参数,以及后台返回的数据是什么。根据上述思路,前端第一次请求后台是需要引导用户进入授权页面同意授权,获取code,只要这一过程发生在微信端并且用户点击同意,就可以获取到code;此时操作仍然在后台,我们还需要进一步获取用户信息,所以我们在后台需要伪跳转(在后台接口进行跳转至另一信息获取接口),调用微信接口获取到用户信息。这个时候鉴权、获取用户信息都完成了,后台如何把用户信息给前端、如何定位前端页面呢?所以我们需要在前端传递给后台的参数里,加上鉴权、获取用户信息后的重定向URL,并将用户信息拼接到URL上。

看到这里,思路就很清晰了。前端请求后台鉴权并带上重定向URL、后台获取用户信息并将用户信息添加到URL上、后台重定向此URL,最终微信端展示页面的就是每个用户的个人数据了。

三、代码实现

ConfigurationManager.AppSettings["appid"]配置为微信公众号的AppID;
ConfigurationManager.AppSettings["appsecret"]配置为微信公众号的AppSecret;
ConfigurationManager.AppSettings["apppath"]配置为后台接口服务器域名,这个是需要在公众号后台配置的;如下图
    /// <summary>/// 微信公众号用户信息获取/// </summary>public class AuthController : Controller{private static string appId = ConfigurationManager.AppSettings["appid"];private static string secret = ConfigurationManager.AppSettings["appsecret"];/// <summary>/// 微信公众号引导页/// </summary>/// <returns>成功时,返回带有用户信息的URL并重定向</returns>public ActionResult GetUserInfo(){string code = Request.QueryString["code"];string state = Request.QueryString["state"];try{if (!string.IsNullOrEmpty(code) && !string.IsNullOrEmpty(state)){OAuthToken oauthToken = JsonConvert.DeserializeObject<OAuthToken>(new WXHelper().Request(string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appId, secret, code), "", "GET"));string accesstoken = string.Empty;AccessToken token = JsonConvert.DeserializeObject<AccessToken>(new WXHelper().Request(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, secret), "", "GET"));if (token != null && !string.IsNullOrEmpty(token.access_token)){accesstoken = token.access_token;}if (oauthToken != null && !string.IsNullOrEmpty(oauthToken.openid)){OAuthUserInfo userInfo = JsonConvert.DeserializeObject<OAuthUserInfo>(new WXHelper().Request(string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN", accesstoken, oauthToken.openid), "", "GET"));}else{ViewData["errmsg"] = "Token获取失败!";}}else{ViewData["errmsg"] = "用户code获取失败!";}}catch (Exception ex){ViewData["errmsg"] = ex.Message;}return View();}/// <summary>/// 微信公众号引导页/// </summary>/// <param name="url">微信前端传递的跳转url</param>/// <returns>成功时,重定向至获取用户信息</returns>public ActionResult Index(string url){if (!string.IsNullOrEmpty(url)){url = WXHelper.DecodeBase64(url);string state = EncryptHelper.MD5Encrypt(url);//使用微信接口,重定向地址为本接口中的另一方法return Redirect(string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state={2}#wechat_redirect", appId, ConfigurationManager.AppSettings["apppath"] + "/**/**/GetUserInfo", state));}elseViewData["errmsg"] = "重定向url不能为空!";return View();}}

   四、思考

在实际项目中做微信网页授权会因为场景不同而产生不同的代码实现,但是基本的微信授权逻辑,在上述代码中都有体现,希望能给各位开发者在类似业务场景下带来些许帮助。微信接口的严格性(局限性),会给开发者带来一些麻烦,但是办法总比困难多。通过不断的发现问题、思考问题、解决问题,才是开发者的生存之道。

C#实现微信网页授权相关推荐

  1. 不插即用!配备微信网页授权模块的CodeIgniter应用脚手架

    昨天发了一篇<即插即用!适用于CodeIgniter框架的微信网页授权模块>,今天想了想干脆整理一个脚手架好了. Github仓库: CodeIgniter-Weixin_Template ...

  2. android user-agent iso-8859-1,微信网页授权,错误40163,ios正确,安卓错误?

    2018-07-18:一年时间过去了,我又回来填自己挖的坑了!! 2017年7月,我遇到了这个问题,当时在这里提了问,后来又跟踪了两天,也没彻底搞懂,反正时好时坏,,后来自己主要精力放在H5+开发上, ...

  3. 微信遇到特殊服务器,解决微信网页授权,出现errcode:40163,errmsg:codebeenused,看似微信访问了2次这个回调接口的问题...

    先说说自己理解的微信机制: 微信内访问自己服务器的页面,如果访问出错,微信就会认为是微信自身的问题,那么他就会开启另外一个IP来访问这个页面(什么上海的IP,深圳的IP不等),再把访问结果发回用户端, ...

  4. 微信网页授权,获取微信code,获取access_tocken,获取用户信息

    微信开发中,经常有这样的需求:获得用户头像.绑定微信号给用户发信息.. 那么实现这些的前提就是授权! 1.配置安全回调域名: 在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的" ...

  5. ajax 微信code获取_ajax 实现微信网页授权登录的方法

    项目背景 因为项目采用前后端完全分离方案,所以,无法使用常规的微信授权登录作法,需要采用 ajax 实现微信授权登录. 需求分析 因为本人是一个phper ,所以,微信开发采用的是 EasyWeCha ...

  6. 微信网页开发教程 php,PHP实现微信网页授权开发教程,php授权教程_PHP教程

    PHP实现微信网页授权开发教程,php授权教程 微信网页授权是服务号才有的高级功能,开发者可以通过授权后获取用户的基本信息:在此之前,想要获取消息信息只能在用户和公众号交互时根据openid获取用户信 ...

  7. 微信wechat.class.php,laravel使用组件实现微信网页授权登入

    laravel框架中的实现简单实现微信网页授权登入 首先引入基于laravel的easywechat的组件,laravel版本5.8 $ cd laravel $ composer require & ...

  8. 微信开发---微信网页授权、JS-SDK和微信公众号的基本设置

    用了好几个小时的时间,整理了一下关于公众号的思维导图,由于CSDN不能上传相对应的文件,所以萍子一一的分解开的截图附上来,希望对大家有所帮助哦~ 因为是电脑设备自动截图,又鉴于内容比较多,可能不是太清 ...

  9. java : 实现微信网页授权,超详细!

    背景 使用微信公众号实现网页授权. 开始 1.微信网页授权的官方文档 微信网页授权 2.申请微信测试公众号 从红框进入申请页面. 填写必要的信息,注意上图红框部分的域名需要可以外网能够访问,微信需要发 ...

  10. PHP如何实现微信网页授权

    微信网页授权是服务号才有的高级功能,开发者可以通过授权后获取用户的基本信息:在此之前,想要获取消息信息只能在用户和公众号交互时根据openid获取用户信息:而微信网页授权可在不需要消息交互,也不需要关 ...

最新文章

  1. 判断是否过期的算法_铁观音多久过期,怎么判断铁观音是否过期?
  2. 枚举中关于toRaw()和fromRaw(3)编译出错
  3. HDU_oj_2021 发工资喽
  4. jQuery 通用表单方法
  5. python编程绘图库turtle如何安装_Python绘图库Turtle详细分析
  6. Linux Shell之一 Shell简介
  7. 郸城二高2021年高考成绩查询时间,河南高考最高分是谁,2021年河南高考状元名单分数学校...
  8. 在xcode6.1和ios10.10.1环境下实现app发布
  9. Enyim.Caching 客户端配置及示例
  10. Redis入门指南--五种类型及其基本指令
  11. 如何制作HTML网页设计【体育运动主题网站——中国篮球NBA】
  12. python必背100源代码-python 100例 (持续更新)
  13. 桌面计算机系统安装系统文件,电脑重装系统后还原桌面文件步骤
  14. ubuntu20.04显卡驱动3分钟安装方法
  15. 2021年十佳返利优惠券平台排名如下
  16. Emacs、cedet、ecb
  17. [战略]武科大IT交流群-群目标和具体措施-V1.0
  18. 桌面运维工程师的网站收藏夹
  19. HDFS Router-based Federation
  20. 64位系统使用Access 数据库文件遇到的错误和解决办法

热门文章

  1. 职场 | 如何说服上级?这里有三个故事
  2. linux 转换格式,linux下常见音频格式之间的转换
  3. paypal如何支付欧元_涨姿势!Paypal怎么用?
  4. 视频编解码发展历程(从AVC到HEVC再到VVC)(二)
  5. itunes一直显示正在验证iphone恢复_超全面iPhone实用技巧汇总,有用收藏
  6. 服务器迁移系统工具,win10如何用自带迁移工具迁移系统?_网站服务器运行维护,windows10,迁移系统...
  7. uva 11137 Ingenuous Cubrency(完全背包)
  8. Mac如何关闭开机启动项?
  9. 技术指南 | 理解零知识证明算法之Zk-stark
  10. ArduinoUNO实战-第十七章-火焰传感器