微信开发笔记——微信网页登录授权,获取用户信息
最近做了一个公司的微信的公众号,对微信的流程清楚了不少,这里记录下,算不上多高深的,只希望能帮助到一部分人吧。
闲话少说,开始:
首先大家要看下微信的API文档。
微信网页授权,获取用户的微信官方API文档地址:
http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
三次握手
微信认证流程(我自己简称三次握手):
1、用户同意授权,获取code
2、通过code换取网页授权access_token,用户openId等信息
3、通过access_token和用户的openId获取该用户的用户信息
思路:
经过研究,我这边的思路是:让所有页面都继承同一个页面,在这个页面里做微信登录授权处理,
因为第一步必须要经过微信的登录授权,不能网页后端请求,所以先要经过用户同意,通过页面网页请求组装的微信请求链接。请求该链接,
获取code后,后端模拟请求。获取用户信息。
微信三次握手的方法(代码)
public class WeiXinOAuth{ /// <summary> /// 获取微信Code /// </summary> /// <param name="appId"></param> /// <param name="appSecret"></param> /// <param name="redirectUrl"></param> public string GetWeiXinCode(string appId,string appSecret,string redirectUrl) { Random r = new Random(); //微信登录授权 //string url = "https://open.weixin.qq.com/connect/qrconnect?appid=" + appId + "&redirect_uri=" + redirectUrl +"&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect"; //微信OpenId授权 //string url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appId + "&redirect_uri=" + redirectUrl +"&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect"; //微信用户信息授权 string url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appId + "&redirect_uri=" + redirectUrl + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"; return url; } /// <summary> /// 通过code获取access_token /// </summary> /// <param name="appId"></param> /// <param name="appSecret"></param> /// <param name="code"></param> /// <returns></returns> public Model.WeiXinAccessTokenResult GetWeiXinAccessToken(string appId,string appSecret,string code) { string url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+appId+"&secret="+appSecret+ "&code="+ code + "&grant_type=authorization_code"; string jsonStr = Tools.GetHttpRequest(url); Model.WeiXinAccessTokenResult result = new Model.WeiXinAccessTokenResult(); if (jsonStr.Contains("errcode")) { Model.WeiXinErrorMsg errorResult = new Model.WeiXinErrorMsg(); errorResult=JsonHelper.ParseFromJson<Model.WeiXinErrorMsg>(jsonStr); result.ErrorResult = errorResult; result.Result = false; } else { Model.WeiXinAccessTokenModel model = new Model.WeiXinAccessTokenModel(); model = JsonHelper.ParseFromJson<Model.WeiXinAccessTokenModel>(jsonStr); result.SuccessResult = model; result.Result = true; } return result; } /// <summary> /// 拉取用户信息 /// </summary> /// <param name="accessToken"></param> /// <param name="openId"></param> /// <returns></returns> public Model.WeiXinUserInfoResult GetWeiXinUserInfo(string accessToken,string openId) { string url = "https://api.weixin.qq.com/sns/userinfo?access_token="+accessToken+"&openid="+openId+"&lang=zh_CN"; string jsonStr = Tools.GetHttpRequest(url); Model.WeiXinUserInfoResult result = new Model.WeiXinUserInfoResult(); if(jsonStr.Contains("errcode")) { Model.WeiXinErrorMsg errorResult = new Model.WeiXinErrorMsg(); errorResult = JsonHelper.ParseFromJson<Model.WeiXinErrorMsg>(jsonStr); result.ErrorMsg = errorResult; result.Result = false; } else { Model.WeiXinUserInfo userInfo = new Model.WeiXinUserInfo(); userInfo = JsonHelper.ParseFromJson<Model.WeiXinUserInfo>(jsonStr); result.UserInfo = userInfo; result.Result = true; } return result; }}
所需要的对应实体类
WeiXinAccessTokenResult 类:
public partial class BasePage : System.Web.UI.Page{ public BasePage() { this.Page.Load += new EventHandler(Page_Load); this.Page.Unload += new EventHandler(Page_UnLoad); } protected void Page_Load(object sender, EventArgs e) { DoWith(); } protected void Page_UnLoad(object sender, EventArgs e) { } private void DoWith() { //用户尚未登录 if (BLL.UserInfoManager.Instance().GetUserId() <= 0) { //获取appId,appSecret的配置信息 string appId = System.Configuration.ConfigurationSettings.AppSettings["appid"]; string appSecret = System.Configuration.ConfigurationSettings.AppSettings["secret"]; Core.WeiXinOAuth weixinOAuth = new WeiXinOAuth(); //微信第一次握手后得到的code 和state string _code = Cmn.Request.Get("code"); string _state = Cmn.Request.Get("state"); if (_code == "" || _code == "authdeny") { if (_code == "") { //发起授权(第一次微信握手) string _authUrl = weixinOAuth.GetWeiXinCode(appId, appSecret, HttpContext.Current.Server.UrlEncode(HttpContext.Current.Request.Url.ToString())); HttpContext.Current.Response.Redirect(_authUrl, true); } else { // 用户取消授权 HttpContext.Current.Response.Redirect("~/Error.html", true); } } else { //获取微信的Access_Token(第二次微信握手) Core.Model.WeiXinAccessTokenResult modelResult = weixinOAuth.GetWeiXinAccessToken(appId, appSecret, _code); //获取微信的用户信息(第三次微信握手) Core.Model.WeiXinUserInfoResult _userInfo = weixinOAuth.GetWeiXinUserInfo(modelResult.SuccessResult.access_token,modelResult.SuccessResult.openid); //用户信息(判断是否已经获取到用户的微信用户信息) if (_userInfo.Result && _userInfo.UserInfo.openid != "") { //保存获取到的用户微信用户信息,并保存到数据库中 } else { GameTradingByPublic.ExceptionLog.writeFile(2, "获取用户OpenId失败"); } } } }}
微信开发笔记——微信网页登录授权,获取用户信息相关推荐
- 小程序登录授权获取用户信息
一 登录 时序图如下: wx.login() 获取js_code 示例代码: App({ onLaunch: function() { wx.login({ success: function(re ...
- 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现)
微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 文章目录 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 准备工作 开发思路 具体代 ...
- 连小白都能看懂的微信开发之 微信自定义菜单 + 获取网页授权 + 获取用户信息
微信自定义菜单+获取网页授权+获取用户信息 今天项目需要一个需求,就是添加一个菜单接口,并且还可以获取用于的信息,从而根据用户的信息去做一些业务的查询.通过百度和自己查看文档大致的解决办法如下: 注意 ...
- PHP 微信网页授权获取用户信息
最近用到过微信用户授权获取用户信息的功能,在这里记录一下. 因为用户授权要用到认证过的服务号才有权限,而线上正在使用公众号,而开发就有些不方便了,这里可以申请一个微信公众测试号. 1.申请一个微信公众 ...
- 微信公众号开发之授权获取用户信息
微信开发交流群:148540125 系列文章参考地址 极速开发微信公众号 欢迎留言.转发.打赏 项目源码参考地址 点我点我--欢迎Start 前几篇文章已讲完如何导入项目,如何启动配置项目,如何成为开 ...
- Spring Boot 微信-网页授权获取用户信息
微信-验证服务器有效性 微信-网页授权获取用户信息 网页授权获取用户信息步骤 第一步:用户同意授权,获取code 第二步:通过code换取网页授权access_token 第三步:拉取用户信息(需sc ...
- laravel-admin微信网页授权获取用户信息过程
最近在重构我们平台得前端页面以及逻辑,再此记录一下微信网页版授权获取用户资料得过程 第一步,安装 composer require "overtrue/laravel-wechat:~3.0 ...
- php把微信一键登录,PHP微信第三方实现一键登录及获取用户信息的方法(实例详解)...
这篇文章主要介绍了PHP版微信第三方实现一键登录及获取用户信息的方法,较为详细的分析了微信第三方登陆的相关注意事项与实现技巧,需要的朋友可以参考下 注意,要使用微信在第三方网页登录是需要"服 ...
- 微信h5静默、非静默授权获取用户openId的方法和步骤
微信h5静默.非静默授权获取用户openId的方法和步骤: 一.openId是什么? openId是用户在当前公众号下的唯一标识('身份证'),就是说通过这个openId,就能区分在这个公众号下具体是 ...
- vue h5微信公众号授权获取用户信息
vue h5微信公众号授权获取用户信息 1.申请测试账号 https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 2.修改网页授权 ...
最新文章
- Ubuntu使用——23(dock的美化)
- UVa 1368 - DNA Consensus String
- 【坐在马桶上看算法】算法10:二叉树
- php 字符串与数字相加,注意!PHP中字符串与数字的比较
- ASP.NET MVC Global.cs - 应用程序事件
- [React] 尚硅谷 -- 学习笔记(二)
- 江苏大学计算机学院宋美如,姜震-江苏大学计算机科学与通信工程学院
- 【转】Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)
- Java 8:一文掌握 Lambda 表达式 | CSDN 博文精选
- python---之阿partial
- PyTorch(总)---PyTorch遇到令人迷人的BUG与记录
- 考虑云计算来降成本:良药或毒药?
- Hierarchical Prosody Modeling for Non-Autoregressive Speech Synthesis
- 基于Echarts的数据可视化大屏系统设计分享
- HashMap源码分析与实现
- Aras Innovator: 自定义TOC目录,Form的基本过程
- 计算机体系结构 第一章 计算机系统结构的基础知识(2)
- 记一次逗逼的codecraft算法大赛的参赛经历
- 通过ahocorasick快速构建一棵actree(AC自动机)
- Android面试之计算机网络基础
热门文章
- 基于代理的西亚城市动态模拟:难民的影响
- 「Photoshop2021入门教程」新功能——快速操作
- VAX v10.9.2062.0-52pj vDie 分析 【转载请注明出处】
- 推荐好用的数据库软件sql studio
- 年薪 170 万阿里 P8 程序员征婚上热搜,程序员婚恋观大曝光!
- android设置页面转场特效
- 使用Linux版印象笔记nixnote2
- html简单边框制作--特效文字制作及代码,HTML音画介绍之一--基本原理和边框的制作...
- 共享流量包FAQ集锦
- React---基础2(List/Key、表单(ref、event)、状态提升(共享组件)、组件占位符)