700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > asp.net mvc C# 微信公众号-服务号开发 (用户网页授权获取用户昵称头像信息)...

asp.net mvc C# 微信公众号-服务号开发 (用户网页授权获取用户昵称头像信息)...

时间:2022-01-27 23:41:47

相关推荐

asp.net mvc C# 微信公众号-服务号开发 (用户网页授权获取用户昵称头像信息)...

参考文档:https://mp./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/// </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 = monApi.GetMenuFromJsonResult(resultFull, new ButtonGroup()).menu;result = monApi.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./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./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:

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./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/微信:74299 昵称:同心同德)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。