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(); } } }