asp.net mvc C# 微信公众号-服务号开发 (用户网页授权获取用户昵称头像信息)...
参考文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432
一、安装Senparc.Weixin NuGet包。
二、添加引用
using Senparc.CO2NET.Extensions;using Senparc.Weixin.MP.Entities.Request;
三、微信公众号-开发-基本配置
Global.asax全局配置 Application_Start
//微信配置开始var isGLobalDebug = true;//设置全局 Debug 状态var senparcSetting = SenparcSetting.BuildFromWebConfig(isGLobalDebug);var register = RegisterService.Start(senparcSetting).UseSenparcGlobal();//CO2NET全局注册,必须!var isWeixinDebug = true;//设置微信 Debug 状态var senparcWeixinSetting = SenparcWeixinSetting.BuildFromWebConfig(isWeixinDebug);register.UseSenparcWeixin(senparcWeixinSetting, senparcSetting);微信全局注册,必须!//注册公众号AccessTokenContainer.Register(System.Configuration.ConfigurationManager.AppSettings["WeixinAppId"],System.Configuration.ConfigurationManager.AppSettings["WeixinAppSecret"],"公众号");//注册小程序(完美兼容)AccessTokenContainer.Register(System.Configuration.ConfigurationManager.AppSettings["WxOpenAppId"],System.Configuration.ConfigurationManager.AppSettings["WxOpenAppSecret"],"小程序");//微信配置结束
/// <summary>/// 微信后台验证地址(使用Get),微信后台的“接口配置信息”的Url填写如:http://sdk.weixin.senparc.com/weixin/// </summary>[HttpGet][ActionName("Index")]public ActionResult Get(PostModel postModel, string echostr){if (CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token)){return Content(echostr); //返回随机字符串则表示验证通过}else{return Content("failed:" + postModel.Signature + "," + MP.CheckSignature.GetSignature(postModel.Timestamp, postModel.Nonce, Token) + "。" +"如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。");}}
四、获取公众号相关信息
public static readonly string Token = WebConfigurationManager.AppSettings["WeixinToken"];//与微信公众账号后台的Token设置保持一致,区分大小写。
public static readonly string EncodingAESKey = WebConfigurationManager.AppSettings["WeixinEncodingAESKey"];//与微信公众账号后台的EncodingAESKey设置保持一致,区分大小写。
public static readonly string AppId = WebConfigurationManager.AppSettings["WeixinAppId"];//与微信公众账号后台的AppId设置保持一致,区分大小写。
public static readonly string WeixinAppSecret = WebConfigurationManager.AppSettings["WeixinAppSecret"];
五、获取token
public string GetAccessToken()
{return Senparc.Weixin.MP.Containers.AccessTokenContainer.GetAccessToken(AppId);
}
六、自定义创建菜单
利用json更新菜单
[HttpPost]
public string CreateMenuFromJson(string token, string fullJson)
{//TODO:根据"conditionalmenu"判断自定义菜单var apiName = "使用JSON更新";try{GetMenuResultFull resultFull = Newtonsoft.Json.JsonConvert.DeserializeObject<GetMenuResultFull>(fullJson);//重新整理按钮信息WxJsonResult result = null;IButtonGroupBase buttonGroup = null;buttonGroup = CommonAPIs.CommonApi.GetMenuFromJsonResult(resultFull, new ButtonGroup()).menu;result = CommonAPIs.CommonApi.CreateMenu(token, buttonGroup);var json = new{Success = result.errmsg == "ok",Message = "菜单更新成功。" + apiName};//return Json(json);return "菜单更新成功。" + apiName;}catch (Exception ex){var json = new { Success = false, Message = string.Format("更新失败:{0}。{1}", ex.Message, apiName) };//return Json(json);return string.Format("更新失败:{0}。{1}", ex.Message, apiName);}}
json格式实例(一级菜单最多三个,二级菜单最多五个)
{"menu": {"button": [ {"name": "一级菜单","sub_button": [{"type": "view","name": "二级菜单","url": ""} ]}]}
}
读取json
public string GetMenuJson()
{StreamReader sr = new StreamReader(System.Web.HttpRuntime.AppDomainAppPath + "\\menu.json", Encoding.Default);string line;string jsonobj = "";while ((line = sr.ReadLine()) != null){jsonobj = jsonobj + line.ToString();}return jsonobj;
}
创建菜单
public ActionResult CreateMenu(){string MenuJson = GetMenuJson();string token = GetAccessToken();return Content(CreateMenuFromJson(token, MenuJson));
}
七、调用授权页面获取用户微信code
urlpath:回调url,此url对应域名需要配置在微信公众号-接口权限-网页服务-网页授权-网页授权获取用户基本信息
public void GetWeixinCode(string urlpath)
{string state = Guid.NewGuid().ToString("N");string url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userinfo&state=" + state + "#wechat_redirect", AppId, urlpath);Response.Redirect(url);
}
八、根据code获取用户openid
post访问地址
public static string WebRequestPostOrGet(string sUrl, string sParam){byte[] bt = System.Text.Encoding.UTF8.GetBytes(sParam);Uri uriurl = new Uri(sUrl);HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(uriurl);req.Method = "Post";req.Timeout = 120 * 1000;req.ContentType = "application/x-www-form-urlencoded;";req.ContentLength = bt.Length;using (Stream reqStream = req.GetRequestStream()){reqStream.Write(bt, 0, bt.Length);reqStream.Flush();}try{using (WebResponse res = req.GetResponse()){Stream resStream = res.GetResponseStream();StreamReader resStreamReader = new StreamReader(resStream, System.Text.Encoding.UTF8);string resLine;System.Text.StringBuilder resStringBuilder = new System.Text.StringBuilder();while ((resLine = resStreamReader.ReadLine()) != null){resStringBuilder.Append(resLine + System.Environment.NewLine);}resStream.Close();resStreamReader.Close();return resStringBuilder.ToString();}}catch (Exception ex){return ex.Message;}}
根据code获取openid
/// <summary>/// 根据code获取用户openid/// </summary>/// <param name="Code"></param>/// <param name="access_token"></param>/// <returns></returns>public string GetOpenidByCode(string Code, out string access_token){string url = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", AppId, WeixinAppSecret, Code);string ReText = WebRequestPostOrGet(url, "");//post/get方法获取信息 Newtonsoft.Json.Linq.JObject DicText = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(ReText);access_token = "";if (DicText.ContainsKey("access_token"))access_token = DicText["access_token"].ToString();if (!DicText.ContainsKey("openid"))return "";return DicText["openid"].ToString();}
九、根据openid获取用户信息
WXModel:
参数 | 描述 |
---|---|
openid | 用户的唯一标识 |
nickname | 用户昵称 |
sex | 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知 |
province | 用户个人资料填写的省份 |
city | 普通用户个人资料填写的城市 |
country | 国家,如中国为CN |
headimgurl | 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。 |
privilege | 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom) |
unionid | 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。 |
public class WXModel{public string openid { get; set; }public string nickname { get; set; }public int sex { get; set; }public string province { get; set; }public string city { get; set; }public string country { get; set; }public string headimgurl { get; set; }}
获取用户信息
public WXModel GetUserInfoByCode(string code){string access_token = "";string openid = GetOpenidByCode(code, out access_token);string userinfo = WebRequestPostOrGet("https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid + "&lang=zh_CN", "");WXModel model = Newtonsoft.Json.JsonConvert.DeserializeObject<WXModel>(userinfo);return model;
}
十、微网站公用获取用户信息方法
public WXModel GetUser(string urlpath){WXModel model = null;var code = Request.Params["code"];urlpath = urlpath.UrlEncode();if (code == null || code == ""){GetWeixinCode(urlpath);}else{model = GetUserInfoByCode(code);}return model;}
十一、需要获取用户的地方
string urlpath = Request.Url.AbsoluteUri;
tb_user user = GetUser(urlpath);
注:以上代码属个人整理,用于交流学习,非原创。如涉及侵权,请联系我,我立即处理。(QQ/微信:742010299 昵称:同心同德)
转载于:https://www.cnblogs.com/tongxintongde/p/9672853.html
asp.net mvc C# 微信公众号-服务号开发 (用户网页授权获取用户昵称头像信息)...相关推荐
- 微信公众号开发系列-网页授权获取用户基本信息
OAuth2.0网页授权这个也是在做微信公众平台用到最多的,可以利用授权接口对自己平台内用户进行绑定,实现用户扫描码和微信分享.微信签到.微信商城购物等: 1.高级接口OAuth2.0网页授权设置 a ...
- Java微信公众号开发之网页授权获取用户基本信息
本篇博客讲解的网页授权只需要前端传递一个backUrl(回调地址) 到后台接口,后台接口会完成整个授权流程,无需前端做更多工作: 一. 前言 微信公众号开发,需要用到网页授权获取用户信息,通过OAut ...
- 微信开发之网页授权获取用户基本信息
微信官方文档:网页授权获取用户基本信息 具体而言,网页授权流程分为四步: 1.引导用户进入授权页面同意授权,获取code https://open.weixin.qq.com/connect/oaut ...
- 微信开发_网页授权获取用户的基本信息
如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于OAuth2.0的说明 官方网站:http://oauth.net/ http:/ ...
- 微信公众平台-服务号:网页授权域名 设置
微信公众平台-服务号的网页授权域名 设置 设置与开发->公众号设置->功能设置->网页授权域名 一:下载认证文件,放置服务器中 二:设置服务器中的 Https中的nginx服务 ng ...
- 微信公众平台服务号如何申请
现在微信公众平台分为两种类型的号,服务号与订阅号.服务号现在使用者越来越多,而且开发功能很齐全.所以申请服务号使用最方便.下面我就来分享一下如何申请微信公众平台服务号. 工具/原料 电脑.微信公众平台 ...
- 微信公众平台--服务号/订阅号--网页授权获取用户基本信息
参考链接:https://www.cnblogs.com/admol/articles/4286487.html 注: 1.此为网页授权获取用户基本信息,必须为服务号,订阅号是没有权限通过网页授权来获 ...
- 微信公众号开发之微信网页授权获取用户个人信息
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一丶概述 微信网页授权 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑 ...
- Java微信公众平台开发之OAuth2.0网页授权
根据官方文档点击查看在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的"开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息"的配置选项中,修 ...
最新文章
- 过程即奖励(The Journey is the Reward)
- java的语法树,JAVA语言语法树.doc
- PC微信逆向:分析@群成员call
- Redis中的执行命令的过程
- 设备服务器停止运行吗,服务器已停止响应是怎么回事
- 为什么volatile不能保证原子性而Atomic可以?
- IOS-网络(文件上传)
- 微信支付宝关闭三星Galaxy指纹支付;乐视网回应贾跃亭破产;Chrome 78发布|极客头条...
- 机器学习-西瓜书、南瓜书第三章
- 利用Python实现一个感知机学习算法
- 负载均衡实现 --- LVS的介绍、调度算法、NAT模式的搭建
- 机器学习与深度学习资料整理
- java servlet的包下载_javax.servlet jar包下载_javax.servlet jar包官方下载-太平洋下载中心...
- 国家社科基金项目清单、申报书填写指南和课题申报书模板
- 《码出高效:Java 开发手册》“码” 出高效的同时编写出高质量的代“码”。
- Vue实战项目开发--首页开发
- shaderlab 中 use pass、grab pass的用法
- PostgreSQL逻辑订阅
- 跟我一起写 Makefile
- unreal world 皮革_Unreal World猎鹿记