咨询 请加 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. php组成数组

    每次向数据库取5条数据,不足5条就不显示 $z = (int)(count($data) / 5);for ($ii = 1; $ii <= $z; $ii++) { foreach ($dat ...

  2. 各大Oj平台介绍 刷题平台

    https://leetcode.com/ http://www.cnblogs.com/lzmfywz/archive/2012/02/07/2342010.html 1.题库与网站资源题库-在线提 ...

  3. 【转】PowerShell入门(七):管道——在命令行上编程

    转至:http://www.cnblogs.com/ceachy/archive/2013/02/22/PowerShell_Pipeline.html 管道对于Shell来说是个化腐朽为神奇的东西, ...

  4. swift中editingStyleForRowAtIndexPath的写法

    效果图: 首先要实现这句tableView.setEditing(true, animated: true)才能弹出左侧的小圆圈 然而在oc中tableview删除的写法百度一下很常见但是swift中 ...

  5. jQuery全选/反选checkbox

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 数据库设计 Assignment 02

    需求 1.0 请你试分析一下老师(教职工号,老师姓名,年龄),学生(学号,姓名,年龄),课程(课程号,课程名称,开课时间,上课地点)之间的关系, 注:多个老师可以同时教一门课 尝试画出该模型的E-R图 ...

  7. [问题2014S09] 解答

    [问题2014S09]  解答 充分性:  先证明对 Jordan 块 \(J_r(1)\) 以及任意的正整数 \(m\), 均有 \(J_r(1)^m\) 相似于 \(J_r(1)\). 设 \(N ...

  8. Swift高级语法学习总结

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如 ...

  9. linux权限,所有者、所在组、其他组(其他人员),chmod,chown

    用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念 - 所有者 - 所在组 - 其它组 - 改变用户所在的组 所有者 一般为文件的创建 ...

  10. XDocument 获取包括第一行的声明(版本、编码)的所有节点

    XDocument保存为xml文件的方法如下: XDocument doc = new XDocument( new XDeclaration("1.0","UTF-8& ...