using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Configuration; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using Newtonsoft.Json; using Newtonsoft.Json.Linq;namespace Web { public partial class Test : System.Web.UI.Page { //用户id public string openid = ""; //公众号信息部分 public string appid = ConfigurationManager.AppSettings["AppId"]; public string appsecret = ConfigurationManager.AppSettings["AppSecret"]; public string redirect_uri = HttpUtility.UrlEncode("需返回的URL"); #region 显示页面 public string accesstoken; public string nickname; public string sex; public string headimgurl; public string province; public string country; public string language; public string city; public string privilege = ""; public string errorMsg = ""; public string errorUrl = ""; #endregion protected void Page_Load(object sender, EventArgs e) { // 微信官方文档 // https://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html // /* *微信认证获取openid部分: *临时认证code */ string code = Request["code"]; if (string.IsNullOrEmpty(code)) { //判断session不存在 if (Session["openid"] == null) { //认证第一步:重定向跳转至认证网址 // 1.snsapi_base 不弹出授权页面,直接跳转,只能获取用户openid string urlbase = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state=123#wechat_redirect", appid, redirect_uri); // 2.snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息) string usrinfo = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect", appid, redirect_uri); Response.Redirect(urlbase); } //判断session存在 else { //跳转到前端页面.aspx Response.Redirect(Request.Url.ToString()); } return; } //第三步 获得openid 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 result = HttpHelper.GetResponse(url); Log.Instance.SaveLog(result); JObject outputObj = JObject.Parse(result); if (outputObj["errmsg"] != null) { errorMsg = outputObj["errmsg"].ToString(); errorUrl = url; return; } accesstoken = outputObj["access_token"].ToString(); openid = outputObj["openid"].ToString(); GetUserInfo(openid);//通过基础接口获取数据, 不弹出授权页面 GetUserInfo(accesstoken, openid);//通过授权页面获取信息, 会弹出确认页面,需要第一步传入userinfo } /// <summary> /// 通过基础接口获取用户信息 /// </summary> public void GetUserInfo( string openid ) { //第一步 获取基础支持access_token string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, appsecret); string result = HttpHelper.GetResponse(url); Log.Instance.SaveLog(result); JObject outputObj = JObject.Parse(result); if (outputObj["errmsg"] != null) { errorMsg = outputObj["errmsg"].ToString(); errorUrl = url; return; } string token = outputObj["access_token"].ToString(); //第二步 获取用户基本信息 url = string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}", token, openid); result = HttpHelper.GetResponse(url); Log.Instance.SaveLog(result); outputObj = JObject.Parse(result); if (outputObj["errmsg"] != null) { errorMsg = outputObj["errmsg"].ToString(); errorUrl = url; return; } //以下是第四步获得的信息: nickname = outputObj["nickname"].ToString(); //昵称 sex = outputObj["sex"].ToString()=="1"?"男":"女"; //性别什么的 headimgurl = outputObj["headimgurl"].ToString(); //头像url province = outputObj["province"].ToString(); country = outputObj["country"].ToString(); ; language = outputObj["language"].ToString(); ; city = outputObj["city"].ToString(); ; //将获得的用户信息填入到session中 Session["openid"] = outputObj["openid"]; } /// <summary> /// 通过网页授权方式获取用户信息 /// </summary> public void GetUserInfo(string token, string openid) { //微信认证部分:第四步 获得更多信息 string url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", accesstoken, openid); string result = HttpHelper.GetResponse(url); Log.Instance.SaveLog(result); JObject outputObj = JObject.Parse(result);//将json转为数组 if (outputObj["errmsg"] != null) { errorMsg = outputObj["errmsg"].ToString(); errorUrl = url; return; } //以下是第四步获得的信息: nickname = outputObj["nickname"].ToString(); //昵称 sex = outputObj["sex"].ToString(); //性别什么的 headimgurl = outputObj["headimgurl"].ToString(); //头像url province = outputObj["province"].ToString(); ; country = outputObj["country"].ToString(); ; language = outputObj["language"].ToString(); ; city = outputObj["city"].ToString(); ; //将获得的用户信息填入到session中 Session["openid"] = outputObj["openid"]; //转向回入口 //OpenAccess(); } } }