开源源码下载,请参照csdn下载:  http://download.csdn.net/detail/kingmax54212008/9453082

最近做了一个公司的微信的公众号,对微信的流程清楚了不少,这里记录下,算不上多高深的,只希望能帮助到一部分人吧。

 

闲话少说,开始:

首先大家要看下微信的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 类:

View Code
WeiXinAccessTokenModel类:
View Code
WeiXinErrorMsg类:
View Code
WeiXinUserInfoResult类:
View Code
WeiXinUser 类 :
View Code
所有的页面,都会继承BasePage页面,这样方便处理,继承这个页面的其他页面就不需要考虑认证的问题了。
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失败");                }            }        }    }}

开源源码下载,请参照csdn下载:  http://download.csdn.net/detail/kingmax54212008/9453082

微信开发笔记——微信网页登录授权,获取用户信息相关推荐

  1. 小程序登录授权获取用户信息

    一  登录 时序图如下: wx.login() 获取js_code 示例代码: App({ onLaunch: function() { wx.login({ success: function(re ...

  2. 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现)

    微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 文章目录 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 准备工作 开发思路 具体代 ...

  3. 连小白都能看懂的微信开发之 微信自定义菜单 + 获取网页授权 + 获取用户信息

    微信自定义菜单+获取网页授权+获取用户信息 今天项目需要一个需求,就是添加一个菜单接口,并且还可以获取用于的信息,从而根据用户的信息去做一些业务的查询.通过百度和自己查看文档大致的解决办法如下: 注意 ...

  4. PHP 微信网页授权获取用户信息

    最近用到过微信用户授权获取用户信息的功能,在这里记录一下. 因为用户授权要用到认证过的服务号才有权限,而线上正在使用公众号,而开发就有些不方便了,这里可以申请一个微信公众测试号. 1.申请一个微信公众 ...

  5. 微信公众号开发之授权获取用户信息

    微信开发交流群:148540125 系列文章参考地址 极速开发微信公众号 欢迎留言.转发.打赏 项目源码参考地址 点我点我--欢迎Start 前几篇文章已讲完如何导入项目,如何启动配置项目,如何成为开 ...

  6. Spring Boot 微信-网页授权获取用户信息

    微信-验证服务器有效性 微信-网页授权获取用户信息 网页授权获取用户信息步骤 第一步:用户同意授权,获取code 第二步:通过code换取网页授权access_token 第三步:拉取用户信息(需sc ...

  7. laravel-admin微信网页授权获取用户信息过程

    最近在重构我们平台得前端页面以及逻辑,再此记录一下微信网页版授权获取用户资料得过程 第一步,安装 composer require "overtrue/laravel-wechat:~3.0 ...

  8. php把微信一键登录,PHP微信第三方实现一键登录及获取用户信息的方法(实例详解)...

    这篇文章主要介绍了PHP版微信第三方实现一键登录及获取用户信息的方法,较为详细的分析了微信第三方登陆的相关注意事项与实现技巧,需要的朋友可以参考下 注意,要使用微信在第三方网页登录是需要"服 ...

  9. 微信h5静默、非静默授权获取用户openId的方法和步骤

    微信h5静默.非静默授权获取用户openId的方法和步骤: 一.openId是什么? openId是用户在当前公众号下的唯一标识('身份证'),就是说通过这个openId,就能区分在这个公众号下具体是 ...

  10. vue h5微信公众号授权获取用户信息

    vue h5微信公众号授权获取用户信息 1.申请测试账号 https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 2.修改网页授权 ...

最新文章

  1. Ubuntu使用——23(dock的美化)
  2. UVa 1368 - DNA Consensus String
  3. 【坐在马桶上看算法】算法10:二叉树
  4. php 字符串与数字相加,注意!PHP中字符串与数字的比较
  5. ASP.NET MVC Global.cs - 应用程序事件
  6. [React] 尚硅谷 -- 学习笔记(二)
  7. 江苏大学计算机学院宋美如,姜震-江苏大学计算机科学与通信工程学院
  8. 【转】Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)
  9. Java 8:一文掌握 Lambda 表达式 | CSDN 博文精选
  10. python---之阿partial
  11. PyTorch(总)---PyTorch遇到令人迷人的BUG与记录
  12. 考虑云计算来降成本:良药或毒药?
  13. Hierarchical Prosody Modeling for Non-Autoregressive Speech Synthesis
  14. 基于Echarts的数据可视化大屏系统设计分享
  15. HashMap源码分析与实现
  16. Aras Innovator: 自定义TOC目录,Form的基本过程
  17. 计算机体系结构 第一章 计算机系统结构的基础知识(2)
  18. 记一次逗逼的codecraft算法大赛的参赛经历
  19. 通过ahocorasick快速构建一棵actree(AC自动机)
  20. Android面试之计算机网络基础

热门文章

  1. 基于代理的西亚城市动态模拟:难民的影响
  2. 「Photoshop2021入门教程」新功能——快速操作
  3. VAX v10.9.2062.0-52pj vDie 分析 【转载请注明出处】
  4. 推荐好用的数据库软件sql studio
  5. 年薪 170 万阿里 P8 程序员征婚上热搜,程序员婚恋观大曝光!
  6. android设置页面转场特效
  7. 使用Linux版印象笔记nixnote2
  8. html简单边框制作--特效文字制作及代码,HTML音画介绍之一--基本原理和边框的制作...
  9. 共享流量包FAQ集锦
  10. React---基础2(List/Key、表单(ref、event)、状态提升(共享组件)、组件占位符)