1、首先在某微信平台下配置OAuth2.0授权回调页面:

2、通过appid构造url获取微信回传code值(appid可在微信平台下找到)

1)、微信不弹出授权页面url:

A、code回传到页面wxProcess2.aspx,不带参数

[csharp] view plaincopy
  1. Response.Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=http://localhost:8888/wxProcess2.aspx&response_type=code&scope=snsapi_base&state=1#wechat_redirect");

B、code回传到页面wxProcess2.aspx,带参数reurl,即wxProcess2.aspx获得code的同时,也能获取reurl的值,具体如下:

[csharp] view plaincopy
  1. Response.Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=http://localhost:8888/wxProcess2.aspx?reurl=" + reurl + "&response_type=code&scope=snsapi_base&state=1#wechat_redirect");

2)、微信弹出授权页面url:需要用户授权,才能获取code及后面需要获取的用户信息

[csharp] view plaincopy
  1. Response.Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=http://localhost:8888/wxProcess2.aspx?reurl=" + reurl + "&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect");

说明:微信是否弹出授权页面url的区别只在一个参数scope,不弹出微信授权页面:scope=snsapi_base,弹出微信授权页面:scope=snsapi_userinfo。

微信授权页面如下:

3、通过appid、secret、code构造url,获取微信用户的openid和access token。appid、secret可在微信平台下找到,code已在上面方法中获取并回传。具体访问url:

[csharp] view plaincopy
  1. https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appid + "&secret=" + appsecret + "&code=" + Code + "&grant_type=authorization_code

4、通过openid、access token获取用户信息,具体访问url:

[csharp] view plaincopy
  1. https://api.weixin.qq.com/sns/userinfo?access_token=" + REFRESH_TOKEN + "&openid=" + OPENID

说明:主要通过访问微信的3个url地址并回传数据,获取微信用户基本信息

=================================================================================================================================

具体代码:

1、获取微信code处理页面:wxProcess.aspx

[csharp] view plaincopy
  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. if (!IsPostBack)
  4. {
  5. string reurl = "";
  6. //传递参数,获取用户信息后,可跳转到自己定义的页面,想怎么处理就怎么处理
  7. if (Request.QueryString["reurl"] != null && Request.QueryString["reurl"] != "")
  8. {
  9. reurl = Request.QueryString["reurl"].ToString();
  10. }
  11. else
  12. {
  13. reurl = "http://www.csdn.net";
  14. }
  15. string code = "";
  16. //弹出授权页面(如在不弹出授权页面基础下未获得openid,则弹出授权页面,提示用户授权)
  17. if (Request.QueryString["auth"] != null && Request.QueryString["auth"] != "" && Request.QueryString["auth"] == "1")
  18. {
  19. Response.Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=http://localhost:8888/wxProcess2.aspx?reurl=" + reurl + "&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect");
  20. }
  21. else
  22. {
  23. //不弹出授权页面
  24. Response.Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=http://localhost:8888/wxProcess2.aspx?reurl=" + reurl + "&response_type=code&scope=snsapi_base&state=1#wechat_redirect");            }
  25. }
  26. }

2、获取微信code值回传到自己的页面wxProcess2.aspx:

[csharp] view plaincopy
  1. public string reurl = "";
  2. protected void Page_Load(object sender, EventArgs e)
  3. {
  4. if (!IsPostBack)
  5. {
  6. //获取从wxProcess.aspx传递过来的跳转地址reurl
  7. if (Request.QueryString["reurl"] != null && Request.QueryString["reurl"] != "")
  8. {
  9. reurl = Request.QueryString["reurl"].ToString();
  10. }
  11. string code = "";
  12. if (Request.QueryString["code"] != null && Request.QueryString["code"] != "")
  13. {
  14. //获取微信回传的code
  15. code = Request.QueryString["code"].ToString();
  16. OAuth_Token Model = Get_token(code);  //获取token
  17. OAuthUser OAuthUser_Model = Get_UserInfo(Model.access_token, Model.openid );
  18. if(OAuthUser_Model.openid!=null && OAuthUser_Model.openid !="")  //已获取得openid及其他信息
  19. {
  20. //在页面上输出用户信息
  21. Response.Write("用户OPENID:" + OAuthUser_Model.openid + "<br>用户昵称:" + OAuthUser_Model.nickname + "<br>性别:" + OAuthUser_Model.sex + "<br>所在省:" + OAuthUser_Model.province + "<br>所在市:" + OAuthUser_Model.city + "<br>所在国家:" + OAuthUser_Model.country + "<br>头像地址:" + OAuthUser_Model.headimgurl + "<br>用户特权信息:" + OAuthUser_Model.privilege);
  22. //或跳转到自己的页面,想怎么处理就怎么处理
  23. Response.Redirect(reurl);
  24. }
  25. else  //未获得openid,回到wxProcess.aspx,访问弹出微信授权页面
  26. {
  27. Response.Redirect("wxProcess.aspx?auth=1");
  28. }
  29. }
  30. }
  31. }
  32. #region 属性
  33. public string appid = "wx6669e231bffa123f";  //公众微信平台下可以找到
  34. public string appsecret = "9d693f7a81236c123464281115p78445";  //公众微信平台下可以找到
  35. #endregion
  36. //根据appid,secret,code获取微信openid、access token信息
  37. protected OAuth_Token Get_token(string Code)
  38. {
  39. //获取微信回传的openid、access token
  40. string Str = GetJson("https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appid + "&secret=" + appsecret + "&code=" + Code + "&grant_type=authorization_code");
  41. //微信回传的数据为Json格式,将Json格式转化成对象
  42. OAuth_Token Oauth_Token_Model = JsonHelper.ParseFromJson<OAuth_Token>(Str);
  43. return Oauth_Token_Model;
  44. }
  45. //刷新Token(好像这个刷新Token没有实际作用)
  46. protected OAuth_Token refresh_token(string REFRESH_TOKEN)
  47. {
  48. string Str = GetJson("https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=" + appid + "&grant_type=refresh_token&refresh_token=" + REFRESH_TOKEN);
  49. OAuth_Token Oauth_Token_Model = JsonHelper.ParseFromJson<OAuth_Token>(Str);
  50. return Oauth_Token_Model;
  51. }
  52. //根据openid,access token获得用户信息
  53. protected OAuthUser Get_UserInfo(string REFRESH_TOKEN, string OPENID)
  54. {
  55. string Str = GetJson("https://api.weixin.qq.com/sns/userinfo?access_token=" + REFRESH_TOKEN + "&openid=" + OPENID);
  56. OAuthUser OAuthUser_Model = JsonHelper.ParseFromJson<OAuthUser>(Str);
  57. return OAuthUser_Model;
  58. }
  59. //访问微信url并返回微信信息
  60. protected string GetJson(string url)
  61. {
  62. WebClient wc = new WebClient();
  63. wc.Credentials = CredentialCache.DefaultCredentials;
  64. wc.Encoding = Encoding.UTF8;
  65. string returnText = wc.DownloadString(url);
  66. if (returnText.Contains("errcode"))
  67. {
  68. //可能发生错误
  69. }
  70. return returnText;
  71. }
  72. /// <summary>
  73. /// token类
  74. /// </summary>
  75. public class OAuth_Token
  76. {
  77. public OAuth_Token()
  78. {
  79. //
  80. //TODO: 在此处添加构造函数逻辑
  81. //
  82. }
  83. //access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
  84. //expires_in access_token接口调用凭证超时时间,单位(秒)
  85. //refresh_token 用户刷新access_token
  86. //openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
  87. //scope 用户授权的作用域,使用逗号(,)分隔
  88. public string _access_token;
  89. public string _expires_in;
  90. public string _refresh_token;
  91. public string _openid;
  92. public string _scope;
  93. public string access_token
  94. {
  95. set { _access_token = value; }
  96. get { return _access_token; }
  97. }
  98. public string expires_in
  99. {
  100. set { _expires_in = value; }
  101. get { return _expires_in; }
  102. }
  103. public string refresh_token
  104. {
  105. set { _refresh_token = value; }
  106. get { return _refresh_token; }
  107. }
  108. public string openid
  109. {
  110. set { _openid = value; }
  111. get { return _openid; }
  112. }
  113. public string scope
  114. {
  115. set { _scope = value; }
  116. get { return _scope; }
  117. }
  118. }
  119. /// <summary>
  120. /// 用户信息类
  121. /// </summary>
  122. public class OAuthUser
  123. {
  124. public OAuthUser()
  125. { }
  126. #region 数据库字段
  127. private string _openID;
  128. private string _searchText;
  129. private string _nickname;
  130. private string _sex;
  131. private string _province;
  132. private string _city;
  133. private string _country;
  134. private string _headimgUrl;
  135. private string _privilege;
  136. #endregion
  137. #region 字段属性
  138. /// <summary>
  139. /// 用户的唯一标识
  140. /// </summary>
  141. public string openid
  142. {
  143. set { _openID = value; }
  144. get { return _openID; }
  145. }
  146. /// <summary>
  147. ///
  148. /// </summary>
  149. public string SearchText
  150. {
  151. set { _searchText = value; }
  152. get { return _searchText; }
  153. }
  154. /// <summary>
  155. /// 用户昵称
  156. /// </summary>
  157. public string nickname
  158. {
  159. set { _nickname = value; }
  160. get { return _nickname; }
  161. }
  162. /// <summary>
  163. /// 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
  164. /// </summary>
  165. public string sex
  166. {
  167. set { _sex = value; }
  168. get { return _sex; }
  169. }
  170. /// <summary>
  171. /// 用户个人资料填写的省份
  172. /// </summary>
  173. public string province
  174. {
  175. set { _province = value; }
  176. get { return _province; }
  177. }
  178. /// <summary>
  179. /// 普通用户个人资料填写的城市
  180. /// </summary>
  181. public string city
  182. {
  183. set { _city = value; }
  184. get { return _city; }
  185. }
  186. /// <summary>
  187. /// 国家,如中国为CN
  188. /// </summary>
  189. public string country
  190. {
  191. set { _country = value; }
  192. get { return _country; }
  193. }
  194. /// <summary>
  195. /// 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
  196. /// </summary>
  197. public string headimgurl
  198. {
  199. set { _headimgUrl = value; }
  200. get { return _headimgUrl; }
  201. }
  202. /// <summary>
  203. /// 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)其实这个格式称不上JSON,只是个单纯数组
  204. /// </summary>
  205. public string privilege
  206. {
  207. set { _privilege = value; }
  208. get { return _privilege; }
  209. }
  210. #endregion
  211. }
  212. /// <summary>
  213. /// 将Json格式数据转化成对象
  214. /// </summary>
  215. public class JsonHelper
  216. {
  217. /// <summary>
  218. /// 生成Json格式
  219. /// </summary>
  220. /// <typeparam name="T"></typeparam>
  221. /// <param name="obj"></param>
  222. /// <returns></returns>
  223. public static string GetJson<T>(T obj)
  224. {
  225. DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
  226. using (MemoryStream stream = new MemoryStream())
  227. {
  228. json.WriteObject(stream, obj);
  229. string szJson = Encoding.UTF8.GetString(stream.ToArray()); return szJson;
  230. }
  231. }
  232. /// <summary>
  233. /// 获取Json的Model
  234. /// </summary>
  235. /// <typeparam name="T"></typeparam>
  236. /// <param name="szJson"></param>
  237. /// <returns></returns>
  238. public static T ParseFromJson<T>(string szJson)
  239. {
  240. T obj = Activator.CreateInstance<T>();
  241. using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
  242. {
  243. DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
  244. return (T)serializer.ReadObject(ms);
  245. }
  246. }
  247. }

输出微信用户信息:

微信公众平台开发—利用OAuth2.0获取微信用户基本信息相关推荐

  1. php 自定义菜单 openid,微信公众平台开发(99) 自定义菜单获取OpenID

    关键字 微信公众平台 自定义菜单 OpenID 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/weixin-menu-get-openid.html 在这篇 ...

  2. 微信公众平台开发教程(一) 微信公众账号注册流程

    微信公众平台开发教程(一) 微信公众账号注册流程 具体的操作步骤 1.注册公众账号 注册地址:http://mp.weixin.qq.com/ 1)首先需要邮箱注册: 2)邮箱激活.邮箱将会收到激活邮 ...

  3. 微信公众平台开发教程(九)微信公众平台通用开发框架

    微信公众平台开发教程(九)微信公众平台通用开发框架 一.思考 开发了几个微信项目,一直在思考: 如何将微信相关的处理与业务系统联系在一起? 如何做到彼此分离,且易于扩展? 能否开发一套独立的微信服务框 ...

  4. 微信公众平台开发教程第2篇-----微信开发者接入

    原文地址为: 微信公众平台开发教程第2篇-----微信开发者接入 最近几天在群里看到没有接触过开发的朋友也有在玩微信的公众平台,微信用户到目前已经达到3个亿了吧!!  我不知道伙伴们是因为什么而接触微 ...

  5. 微信公众平台开发(一)——概述微信消息处理

    目录 相关文档和链接 微信公众平台概述 公众号基本类型和区别 微信公众平台的基本功能 准备工作 1. 搭建内⽹穿透环境 2. 验证服务器url 微信消息处理 1. 接收用户消息 接收消息说明 接收消息 ...

  6. java微信开发平台_Java微信公众平台开发(1) 接入微信公众平台

    前面几篇文章一直都在说微信公众平台的开发准备工作,那么从这篇开始我们就将正式的进入JAVA微信公众平台开发的整个流程,那么这篇我们开始聊聊如何将我们的服务端和微信公众平台对接! (一)接入流程解析 通 ...

  7. 利用oauth2.0获取微信用户基本信息 java_Magicodes.WeiChat——使用OAuth 2.0获取微信用户信息...

    使用Magicodes.WeiChat,可以很方便的获取到微信用户的信息.在使用OAuth 2.0之前,你先需要做以下操作: 1)在开发者中心修改[网页授权获取用户基本信息],在弹出的界面输入自己的根 ...

  8. Java微信公众平台开发之OAuth2.0网页授权

    根据官方文档点击查看在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的"开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息"的配置选项中,修 ...

  9. 微信公众平台开发教程(十一)微信企业号上线

    原文地址:http://www.cnblogs.com/yank/p/3989255.html 什么是企业号? 企业号是微信为企业客户提供的移动应用入口 关注更安全 只有企业通讯录的成员才能关注企业号 ...

最新文章

  1. flutter 移动通知_Flutter移动电商实战 --(24)Provide状态管理基础
  2. 自训练 + 预训练 = 更好的自然语言理解模型
  3. 应用程序自动更新组件GeneralUpdate3.2.1发布
  4. laravel构造器的CURD
  5. 【数字逻辑设计】判断二进制加法溢出的电路设计
  6. 20180601 -1
  7. 简单的jq动态修改checkbox的checked值
  8. html 转换 swf文件怎么打开,修改网页中的FlashSWF文件的方法
  9. python3 flask 使用Mysql数据库
  10. java计算机毕业设计南京新东方学校家校通系统源码+程序+lw文档+mysql数据库
  11. linux fstab错误无法启动,Linux 系统 fstab错误导致系统无法启动的修复
  12. 阿里云飞天计划体验-阿里云开发者社区
  13. 计算长方体体积(3分)
  14. 共享3d打印机ppt分享
  15. 斐波那契回调线怎么画_知行交易学院-新手教学-斐波那契回调线的正确画法(二)...
  16. 常见拉丁文读法,肯定用得着~
  17. 苹果app开发流程详解​
  18. opengl编程指南第8版 环境搭建及原理
  19. 16进制数据相加,计算校验和
  20. MySQL 语句中执行优先级——and比or高

热门文章

  1. OpenCV创建校准图案calibration pattern
  2. OpenCV 霍夫圆变换Hough Circle Transform
  3. OpenGL camera相机的实例
  4. C语言实现段树segment tree(附完整源码)
  5. C++class类(I)
  6. QT的QAlphaCoverage类的使用
  7. 用python做加法_Python不用加减乘除做加法
  8. 根据名字预测性别——朴树贝叶斯分类器
  9. 架构之路之spring+springmvc+maven+mongodb的搭建(转载:http://blog.csdn.net/tomcat_2014/article/details/55100130)
  10. 通过已有SQL语句,生成数据库模型PDM