咨询 请加 QQ:;QQ群:

在微信里面,非认证的公众号账号,只能通过在微信回复菜单单击等事件获取openid,但是认证的公众账号(之前认证的订阅号是不可以的,现在新开放了政府媒体机构的认证订阅号)可以直接在微信打开的链接中获取用户的基本信息包括openid。这里用一种比较简单的获取用户信息的网页授权的方式。注意:这种方式只可以获取关注用户的信息,非关注用户是不可以获取的

流程图

一、获取Code 

假设我们需要网页授权的页面的地址为redirect_uri

需要获取Code的话我们第一步是跳转到授权地址,我们第一步便是获取拼接授权地址 --采用snsapi_base方式

     /// <summary>
/// 对页面是否要用授权 用snsapi_base方式 获取Code Appid是微信应用id
/// </summary>
/// <returns></returns>
public string GetCodeUrl(string Appid, string redirect_uri)
{
return string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect", Appid, redirect_uri);
}

当在微信中打开如下地址的时候如果授权成功,会自动跳转到页面redirect_uri?code=CODE&state=STATE,这样我们就可以获取到Code了

二、用Code换取Openid

用get方法获取到json格式的数据,

{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
然后获取openid
     /// <summary>
/// 用Code换取Openid
/// </summary>
/// <param name="Code"></param>
/// <returns></returns>
public string CodeGetOpenid(string Code) {
string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", Appid, Appsecret, Code);
string ReText = WebRequestPostOrGet(url,"");//post/get方法获取信息
Dictionary<string, object> DicText = (Dictionary<string, object>)Jss.DeserializeObject(ReText);
if (!DicText.ContainsKey("openid"))
return "";
return DicText["openid"].ToString();
}

三、用openid获取用户基本信息

其中access_token 是微信凭证如何获取参照之前的博客http://www.cnblogs.com/net-xiejun/p/4422890.html

        /// <summary>
/// 用openid换取用户信息
/// </summary>
/// <param name="openid">微信标识id</param>
/// <returns></returns>
public Dictionary<string, object> GetUserInfo(string openid)
{
JavaScriptSerializer Jss = new JavaScriptSerializer();
string access_token = ApiCommon.getTokenSession(Appid,Appsecret);//获取access_token
string url = string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN", access_token, openid);
Dictionary<string, object> respDic = (Dictionary<string, object>)Jss.DeserializeObject(WebRequestPostOrGet(url, ""));
return respDic;
}

在页面对应的cs文件中的代码:

        OAuth2 OAuth2 = new OAuth2();
public ActionResult ApplicantActivety()
{
if (!string.IsNullOrEmpty(Request.QueryString["code"]))
{
Dictionary<string, object> DicJson = OAuth2.GetUserInfo(GetOpenidSession(Request.QueryString["code"].ToString()));
ViewData["nickname"] = DicJson["nickname"];
ViewData["headimgurl"] = DicJson["headimgurl"];
}
else {
string redirect_uri = "Http://"+Request.Url.Authority + Request.Url.PathAndQuery;
Response.Redirect(OAuth2.GetCodeUrl(redirect_uri));
}
return View();
}
//拉取缓存
private string GetOpenidSession(string Code)
{
if (Session["OpenidSession"] != null)
{
OAuth2.OpenidSession = Session["OpenidSession"].ToString();
}
else
{
OAuth2.OpenidSession = OAuth2.CodeGetOpenid(Code);
Session["OpenidSession"] = OAuth2.OpenidSession;
Session.Timeout = ;
}
return OAuth2.OpenidSession;
}

到此微信网页授权就开发完成了!

如有疑问咨询QQ:

本文版权归作者(谢俊)和博客园所有,欢迎转载,转载请标明出处。

原文地址:http://www.cnblogs.com/net-xiejun/

微信开发群

完整源码下载:https://github.com/xiejun-net/weixin

个人公众账号:

C#微信公众号开发之网页授权oauth2.0获取用户基本信息(一)的更多相关文章

  1. C#微信公众号开发-高级接口-之网页授权oauth2.0获取用户基本信息(二)

    C#微信公众号开发之网页授权oauth2.0获取用户基本信息(一) 中讲解了如果通过微信授权2.0snsapi_base获取已经关注用户的基本信息,然而很多情况下我们经常需要获取非关注用户的信息,方法 ...

  2. C#微信公众号开发--网页授权(oauth2.0)获取用户基本信息一

    前言 微信网页授权共分为两种方式:snsapi_base.snsapi_userinfo. snsapi_base需要关注公众号,获取用户信息时不弹出用户授权界面. snsapi_userinfo是在 ...

  3. C#微信公众号开发--网页授权(oauth2.0)获取用户基本信息二

    前言 这一篇实现snsapi_userinfo,写这篇时其实我是有疑惑的,因为我并没有调试成功,但是我反复检查程序和思路是没有问题的,因为我使用的测试公众号,群里一个伙计说他之前调试时用的也是测试公众 ...

  4. ASP.NET MVC4 微信公众号开发之网页授权(一):搭建基础环境

    首先你得注册并认证一个个人或企业的微信公众号===服务号从而确保获得以下接口权限: 然后打开公众号设置里的功能设置里找到业务域名和网页授权域名分别填上你的域名(注:已备案的域名),如下图所示: 到这里 ...

  5. ASP.NET MVC4 微信公众号开发之网页授权(二):通过公众号AppID(应用ID)和AppSecret(应用密钥)取得网页授权openid

    ASP.NET MVC4 微信公众号开发之网页授权(一):搭建基础环境 通过了上一篇文章我们已经搭建好了基础开发大环境,现在打开开发环境这里我用的是 vs2013,通过如下方式: 拼接请求链接重定向到 ...

  6. 微信公众号开发《一》OAuth2.0网页授权认证获取用户的详细信息,实现自动登陆

    原创声明:本文为本人原创作品,绝非他处转账,转载请联系博主 从接触公众号到现在,开发维护了2个公众号,开发过程中遇到很多问题,现在把部分模块功能在这备案一下,做个总结也希望能给其他人帮助 工欲善其事, ...

  7. 微信公众号开发之网页中及时获取当前用户Openid及注意事项

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 (四)微信公众号开发之网页授权获取用户基本信息 (五)微信公众号开发之网页中及 ...

  8. 微信公众平台开发(71)OAuth2.0网页授权

    微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使 ...

  9. 微信公众平台开发(71)OAuth2.0网页授权-摘抄

      微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友 ...

随机推荐

  1. Js拼Json对象

     我们通常会拼字符串,但是拼字符串的话,遇见占位符会出错.  下面分享一个拼js拼json对象的方法:          var jsonArr = [];                     $ ...

  2. visual studio code + Nodejs + Typescritpt + angularjs2 + bootstrap 环境搭建/Elementary os

    1.apt-get update 99% waiting for headers卡住了,fix如下 sudo apt-get clean cd /var/lib/apt sudo mv lists l ...

  3. SQLDMO知识总结

    SQLDMO(SQL Distributed Management Objects) 参考手册:http://technet.microsoft.com/en-us/library/aa312550( ...

  4. WORD基础快捷键

    选择 Alt+Shift+上下     移动整行 Ctrl+上             移动到行首 Ctrl+Shift+上下     选择到行首尾 shift+del         删除整段   ...

  5. NS_ENUM vs. NS_OPTIONS

    NS_ENUM用于定义普通枚举值,NS_OPTIONS用于定义位移相关操作的枚举值: typedef NS_ENUM(NSUInteger, EOCConnectionState) { EOCConn ...

  6. Python—模块

    一.模块 模块,是用一堆代码实现了某个功能的代码集合,模块分为三种:自定义模块(自己定义).内置模块(python自带).开源模块 导入模块 (1).导入一个py文件,解释器解释该py文件 (2).导 ...

  7. 一个解决chrome浏览器下input标签当autocomplete的时候背景变黄色同时input背景图片消失方案

    最近在改一个bug即如标题所讲的一样,chrome浏览器下当input标签开启autocomplete的时候input的背景颜色变黄同时在input的背景图片也被覆盖了.为此百度了好久发现网上说的使用 ...

  8. android user版本默认开启调试模式

    由于项目需要,需要发布版本默认开启调试模式,修改方式如下: 1.开启开发者模式 context.getSharedPreferences(DevelopmentSettings.PREF_FILE,C ...

  9. img的hover事件闪动

    今天给同学写一个相册照片鼠标浮动显示细节的效果,遇到了闪动的bug,也顺利解决,就写下来跟大家分享. 我使用的是'标签:hover + 标签'的形式,如果使用jquery的mouseover.mous ...

  10. noi 4977 怪盗基德的滑翔翼

    题目链接: http://noi.openjudge.cn/ch0206/4977/ LIS http://paste.ubuntu.com/23406594/