C#获取用户基本信息一(关注了公众号的用户)
一、获取Code
假设我们需要网页授权的页面的地址为redirect_uri
需要获取Code的话我们第一步是跳转到授权地址,我们第一步便是获取拼接授权地址 --采用snsapi_base方式
- public partial class WebAuth : System.Web.UI.Page
- {
- string Appid = "XXXXXXXXXXXXXXXXXX";
- string redirect_uri = "http://www.xxxxx.com/wx/GetUserInfor.aspx";
- protected void Page_Load(object sender, EventArgs e)
- {
- string url = GetCodeUrl(Appid, redirect_uri);
- Response.Redirect(url);
- }
- /// <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、再用Openid获取用户的基本信息
用get方法获取到json格式的数据,
- {
- "access_token":"ACCESS_TOKEN",
- "expires_in":7200,
- "refresh_token":"REFRESH_TOKEN",
- "openid":"OPENID",
- "scope":"SCOPE",
- "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
- }
- public partial class GetUserInfor : System.Web.UI.Page
- {
- string Appid = "wxceefad22b094e8a9";
- string Appsecret = "935c3d938aa26fa4f627b4926afd4b16";
- protected void Page_Load(object sender, EventArgs e)
- {
- string code = Request["code"];
- string openid = CodeGetOpenid(code);
- Dictionary<string, object> userInfor = GetUserInfo(openid);
- Response.Write(userInfor["nickname"]);
- }
- /// <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 = WebRequestHelper.WebRequestPostOrGet(url, "");//post/get方法获取信息
- JavaScriptSerializer Jss = new JavaScriptSerializer();
- Dictionary<string, object> DicText = (Dictionary<string, object>)Jss.DeserializeObject(ReText);
- if (!DicText.ContainsKey("openid"))
- return "";
- return DicText["openid"].ToString();
- }
- /// <summary>
- /// 用openid换取用户信息
- /// </summary>
- /// <param name="openid">微信标识id</param>
- /// <returns></returns>
- public Dictionary<string, object> GetUserInfo(string openid)
- {
- JavaScriptSerializer Jss = new JavaScriptSerializer();
- string access_token = AccessToken.GetAccessToken();//获取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(WebRequestHelper.WebRequestPostOrGet(url, ""));
- return respDic;
- //{"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":[]}
- }
- }
WebRequestHelper.WebRequestPostOrGet 方法如下:
- public class WebRequestHelper
- {
- public static string WebRequestPostOrGet(string posturl, string postData)
- {
- Stream outstream = null;
- Stream instream = null;
- StreamReader sr = null;
- HttpWebResponse response = null;
- HttpWebRequest request = null;
- Encoding encoding = Encoding.UTF8;
- byte[] data = encoding.GetBytes(postData);
- // 准备请求...
- try
- {
- // 设置参数
- request = WebRequest.Create(posturl) as HttpWebRequest;
- CookieContainer cookieContainer = new CookieContainer();
- request.CookieContainer = cookieContainer;
- request.AllowAutoRedirect = true;
- request.Method = "POST";
- request.ContentType = "application/x-www-form-urlencoded";
- request.ContentLength = data.Length;
- outstream = request.GetRequestStream();
- outstream.Write(data, , data.Length);
- outstream.Close();
- //发送请求并获取相应回应数据
- response = request.GetResponse() as HttpWebResponse;
- //直到request.GetResponse()程序才开始向目标网页发送Post请求
- instream = response.GetResponseStream();
- sr = new StreamReader(instream, encoding);
- //返回结果网页(html)代码
- string content = sr.ReadToEnd();
- return content;
- }
- catch (Exception ex)
- {
- string err = ex.Message;
- return string.Format("{\"errcode\":-2,\"errmsg\":\"{0}\"}", err);
- }
- }
- }
说明:以上代码本人也是在网上搜索根本别人的代码综合参考改写而来。
如需要获取“未关注公众号的用户信息”,这个本人项目中还没有遇到,仅提供参考链接:http://www.cnblogs.com/net-xiejun/p/4632711.html
C#获取用户基本信息一(关注了公众号的用户)的更多相关文章
- 【微信公众号】验证用户OpenID是否关注某个公众号
1.获取OpenID #region 获取微信支付的OpenId /// <summary> /// 获取微信支付的OpenId /// </summary> /// < ...
- 微信网页授权+获取用户基本信息+强制关注+JSSDK分享参数
网页授权+获取用户基本信息+强制关注+JSSDK分享参数 //支付宝红包口令列表 public function view(){ $openid = ""; Vendor('Wei ...
- 用户关注微信公众号后,获取该用户的openID存数据库失败
关注微信公众号后将关注人的openID存入数据库失败,而openID换成字符串写死却可以存入数据库: $wxid=$postObj->FromUserName; $data['wx_openid ...
- Java获取微信公众号新增用户事件
一.新建项目工程 新建一个spring项目 填写 Group 和 Artifact 信息 这步可以直接跳过,后面再按需导入 选择工程地址 二.配置 pom.xml <dependencies&g ...
- 微信小程序与微信公众号同一用户登录问题
微信小程序与微信公众号同一用户登录问题 最近在做微信小程序与微信公众号登录合并的接口.整理相关资料以及个人认识的心得写了这篇文章与大家一起分享. 首先,简单说下我遇到的问题是我们的程序调用微信小程序得 ...
- PHP判断是否关注微信公众号
PHP判断是否关注微信公众号 1 服务号直接请求这个接口https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839 su ...
- 微信公众号通过用户授权获取用户基本信息java版
公司需要开发一个微信公众号,要求用户通过公众号登录公司网站时候自动获取用户的基本信息,在网上查资料发现大部分都是直接copy微信公众平台的开发文档,感觉还是介绍的不是太小白,所以为了方便大家也为了自己 ...
- ASP.NET Core2实现静默获取微信公众号的用户OpenId
最近在做个微信公众号的项目,需要将入口放置在公众号二级菜单内,通过点击该菜单链接后进入到该项目中去,进入到项目后程序会自动通过微信公众号的API完成用户的OpenId获取.需求很简单,实现起来也不复杂 ...
- js 微信公众号网页用户授权,获取微信code,access_tocken,用户信息
第一次做微信网页授权,过程有点艰难,主要是不知道redirect_uri的地址要怎么写,刚开始我以为就是授权结束后要跳转到的首页地址,于是写成了uri = 'http://18i194c049.ias ...
随机推荐
- python基础知识-7-内存、深浅、文件操作
python其他知识目录 1.一些对内存深入理解的案例 以下列举列表,列表/字典/集合这些可变类型都是一样的原理 变量是个地址,指向存储数据的内存空间的地址,它的实质就相当于c语言里的指针.变量和数据 ...
- resx文件引用
应用场景: 自己在编写双语界面的时候,用到两种语言表. 引用如下: LocRM = new ResourceManager("TMI_E.words_" + lang.ToLowe ...
- 团队Alpha冲刺(十)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- Windows Forms编程实战学习:第三章 菜单
第三章 菜单 1,控件和容器 所有的Windows Forms控件都是从System.Windows.Forms.Control类继承的,相关类的层次结构如下图所示: MarshalByRefObje ...
- VC++中使用用户自定义消息及自定制窗口技巧
Windows 应用程序所要做的每项工作几乎都是基于消息处理的, Windows 系统消息分为常用 Windows 消息,控件通知消息和命令.然而,有时我们需要定义自己的消息来通知程序什么事情发生了, ...
- Mac下使用svn命令
Mac系统自带svn命令,能够很方便的同步更新代码,使用方法: 1.导入项目svn import /Users/username/Desktop/Project1 svn://192.168.1.12 ...
- TP中系统跳转方法
系统跳转方法 在ThinkPHP中系统有2个跳转方法,分别是成功跳转和失败跳转: 成功: $this -> success(跳转提示,跳转地址,等待时间); 失败: $this -> er ...
- 从装饰者模式的理解说JAVA的IO包
1. 装饰者模式的详解 装饰者模式动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性 的替代方案. 装饰者模式设计类之间的关系: 其 中Component是一个超类,ConcreteC ...
- ETL工具之Kettle的简单使用一(不同数据库之间的数据抽取-转换-加载)
ETL工具之Kettle将一个数据库中的数据提取到另外一个数据库中: 1.打开ETL文件夹,双击Spoon.bat启动Kettle 2.资源库选择,诺无则选择取消 3.选择关闭 4.新建一个转换 5. ...
- spring 整合 struts2 + Hibernate application配置文件(基于注解)
下面是 application.xml 文件. <?xml version="1.0" encoding="UTF-8"?> <beans x ...