一、获取Code 

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

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

  1. public partial class WebAuth : System.Web.UI.Page
  2. {
  3. string Appid = "XXXXXXXXXXXXXXXXXX";
  4. string redirect_uri = "http://www.xxxxx.com/wx/GetUserInfor.aspx";
  5. protected void Page_Load(object sender, EventArgs e)
  6. {
  7.  
  8. string url = GetCodeUrl(Appid, redirect_uri);
  9. Response.Redirect(url);
  10. }
  11.  
  12. /// <summary>
  13. /// 对页面是否要用授权 用snsapi_base方式 获取Code Appid是微信应用id
  14. /// </summary>
  15. /// <returns></returns>
  16. public string GetCodeUrl(string Appid, string redirect_uri)
  17. {
  18. 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);
  19. }
  20.  
  21. }

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

二、用Code换取Openid、再用Openid获取用户的基本信息

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

  1. {
  2. "access_token":"ACCESS_TOKEN",
  3. "expires_in":7200,
  4. "refresh_token":"REFRESH_TOKEN",
  5. "openid":"OPENID",
  6. "scope":"SCOPE",
  7. "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
  8. }
  1. public partial class GetUserInfor : System.Web.UI.Page
  2. {
  3. string Appid = "wxceefad22b094e8a9";
  4. string Appsecret = "935c3d938aa26fa4f627b4926afd4b16";
  5. protected void Page_Load(object sender, EventArgs e)
  6. {
  7. string code = Request["code"];
  8. string openid = CodeGetOpenid(code);
  9. Dictionary<string, object> userInfor = GetUserInfo(openid);
  10. Response.Write(userInfor["nickname"]);
  11. }
  12.  
  13. /// <summary>
  14. /// 用Code换取Openid
  15. /// </summary>
  16. /// <param name="Code"></param>
  17. /// <returns></returns>
  18. public string CodeGetOpenid(string Code)
  19. {
  20. 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);
  21. string ReText = WebRequestHelper.WebRequestPostOrGet(url, "");//post/get方法获取信息
  22.  
  23. JavaScriptSerializer Jss = new JavaScriptSerializer();
  24. Dictionary<string, object> DicText = (Dictionary<string, object>)Jss.DeserializeObject(ReText);
  25. if (!DicText.ContainsKey("openid"))
  26. return "";
  27. return DicText["openid"].ToString();
  28. }
  29.  
  30. /// <summary>
  31. /// 用openid换取用户信息
  32. /// </summary>
  33. /// <param name="openid">微信标识id</param>
  34. /// <returns></returns>
  35. public Dictionary<string, object> GetUserInfo(string openid)
  36. {
  37. JavaScriptSerializer Jss = new JavaScriptSerializer();
  38. string access_token = AccessToken.GetAccessToken();//获取access_token
  39. string url = string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN", access_token, openid);
  40. Dictionary<string, object> respDic = (Dictionary<string, object>)Jss.DeserializeObject(WebRequestHelper.WebRequestPostOrGet(url, ""));
  41. return respDic;
  42.  
  43. //{"subscribe":1,"openid":"oOPoPs_d7K8mVLX6--WPMSbaNl5o","nickname":"SKY","sex":1,"language":"zh_CN","city":"武汉","province":"湖北","country":"中国","headimgurl":"http:\/\/wx.qlogo.cn\/mmopen\/icayX4JkqCu1d3esVCQ8rSfXlgibQLKaD3z73qhbPln3ZhMh5oNw5243vpoVZFXDKMhTqxQ76OzY934nlm3iaulq60058VmEV5v\/0","subscribe_time":1495188935,"remark":"","groupid":0,"tagid_list":[]}
  44.  
  45. }
  46. }

WebRequestHelper.WebRequestPostOrGet 方法如下:

  1. public class WebRequestHelper
  2. {
  3. public static string WebRequestPostOrGet(string posturl, string postData)
  4. {
  5. Stream outstream = null;
  6. Stream instream = null;
  7. StreamReader sr = null;
  8. HttpWebResponse response = null;
  9. HttpWebRequest request = null;
  10. Encoding encoding = Encoding.UTF8;
  11.  
  12. byte[] data = encoding.GetBytes(postData);
  13. // 准备请求...
  14. try
  15. {
  16. // 设置参数
  17. request = WebRequest.Create(posturl) as HttpWebRequest;
  18. CookieContainer cookieContainer = new CookieContainer();
  19. request.CookieContainer = cookieContainer;
  20. request.AllowAutoRedirect = true;
  21. request.Method = "POST";
  22. request.ContentType = "application/x-www-form-urlencoded";
  23. request.ContentLength = data.Length;
  24. outstream = request.GetRequestStream();
  25. outstream.Write(data, , data.Length);
  26. outstream.Close();
  27. //发送请求并获取相应回应数据
  28. response = request.GetResponse() as HttpWebResponse;
  29. //直到request.GetResponse()程序才开始向目标网页发送Post请求
  30. instream = response.GetResponseStream();
  31. sr = new StreamReader(instream, encoding);
  32. //返回结果网页(html)代码
  33. string content = sr.ReadToEnd();
  34. return content;
  35. }
  36. catch (Exception ex)
  37. {
  38. string err = ex.Message;
  39. return string.Format("{\"errcode\":-2,\"errmsg\":\"{0}\"}", err);
  40. }
  41. }
  42. }

说明:以上代码本人也是在网上搜索根本别人的代码综合参考改写而来。

如需要获取“未关注公众号的用户信息”,这个本人项目中还没有遇到,仅提供参考链接:http://www.cnblogs.com/net-xiejun/p/4632711.html

C#获取用户基本信息一(关注了公众号的用户)的更多相关文章

  1. 【微信公众号】验证用户OpenID是否关注某个公众号

    1.获取OpenID #region 获取微信支付的OpenId /// <summary> /// 获取微信支付的OpenId /// </summary> /// < ...

  2. 微信网页授权+获取用户基本信息+强制关注+JSSDK分享参数

    网页授权+获取用户基本信息+强制关注+JSSDK分享参数 //支付宝红包口令列表 public function view(){ $openid = ""; Vendor('Wei ...

  3. 用户关注微信公众号后,获取该用户的openID存数据库失败

    关注微信公众号后将关注人的openID存入数据库失败,而openID换成字符串写死却可以存入数据库: $wxid=$postObj->FromUserName; $data['wx_openid ...

  4. Java获取微信公众号新增用户事件

    一.新建项目工程 新建一个spring项目 填写 Group 和 Artifact 信息 这步可以直接跳过,后面再按需导入 选择工程地址 二.配置 pom.xml <dependencies&g ...

  5. 微信小程序与微信公众号同一用户登录问题

    微信小程序与微信公众号同一用户登录问题 最近在做微信小程序与微信公众号登录合并的接口.整理相关资料以及个人认识的心得写了这篇文章与大家一起分享. 首先,简单说下我遇到的问题是我们的程序调用微信小程序得 ...

  6. PHP判断是否关注微信公众号

    PHP判断是否关注微信公众号 1 服务号直接请求这个接口https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839 su ...

  7. 微信公众号通过用户授权获取用户基本信息java版

    公司需要开发一个微信公众号,要求用户通过公众号登录公司网站时候自动获取用户的基本信息,在网上查资料发现大部分都是直接copy微信公众平台的开发文档,感觉还是介绍的不是太小白,所以为了方便大家也为了自己 ...

  8. ASP.NET Core2实现静默获取微信公众号的用户OpenId

    最近在做个微信公众号的项目,需要将入口放置在公众号二级菜单内,通过点击该菜单链接后进入到该项目中去,进入到项目后程序会自动通过微信公众号的API完成用户的OpenId获取.需求很简单,实现起来也不复杂 ...

  9. js 微信公众号网页用户授权,获取微信code,access_tocken,用户信息

    第一次做微信网页授权,过程有点艰难,主要是不知道redirect_uri的地址要怎么写,刚开始我以为就是授权结束后要跳转到的首页地址,于是写成了uri = 'http://18i194c049.ias ...

随机推荐

  1. python基础知识-7-内存、深浅、文件操作

    python其他知识目录 1.一些对内存深入理解的案例 以下列举列表,列表/字典/集合这些可变类型都是一样的原理 变量是个地址,指向存储数据的内存空间的地址,它的实质就相当于c语言里的指针.变量和数据 ...

  2. resx文件引用

    应用场景: 自己在编写双语界面的时候,用到两种语言表. 引用如下: LocRM = new ResourceManager("TMI_E.words_" + lang.ToLowe ...

  3. 团队Alpha冲刺(十)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  4. Windows Forms编程实战学习:第三章 菜单

    第三章 菜单 1,控件和容器 所有的Windows Forms控件都是从System.Windows.Forms.Control类继承的,相关类的层次结构如下图所示: MarshalByRefObje ...

  5. VC++中使用用户自定义消息及自定制窗口技巧

    Windows 应用程序所要做的每项工作几乎都是基于消息处理的, Windows 系统消息分为常用 Windows 消息,控件通知消息和命令.然而,有时我们需要定义自己的消息来通知程序什么事情发生了, ...

  6. Mac下使用svn命令

    Mac系统自带svn命令,能够很方便的同步更新代码,使用方法: 1.导入项目svn import /Users/username/Desktop/Project1 svn://192.168.1.12 ...

  7. TP中系统跳转方法

    系统跳转方法 在ThinkPHP中系统有2个跳转方法,分别是成功跳转和失败跳转: 成功: $this -> success(跳转提示,跳转地址,等待时间); 失败: $this -> er ...

  8. 从装饰者模式的理解说JAVA的IO包

    1. 装饰者模式的详解 装饰者模式动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性 的替代方案. 装饰者模式设计类之间的关系: 其 中Component是一个超类,ConcreteC ...

  9. ETL工具之Kettle的简单使用一(不同数据库之间的数据抽取-转换-加载)

    ETL工具之Kettle将一个数据库中的数据提取到另外一个数据库中: 1.打开ETL文件夹,双击Spoon.bat启动Kettle 2.资源库选择,诺无则选择取消 3.选择关闭 4.新建一个转换 5. ...

  10. spring 整合 struts2 + Hibernate application配置文件(基于注解)

    下面是 application.xml 文件. <?xml version="1.0" encoding="UTF-8"?> <beans x ...