首先必定要熟讀,最起碼過一遍微信開發者文檔html
微信開發者文檔數據庫
文檔寫的很清楚 json
受權登陸四步走api
在正文開始前,我得講清楚一個事情微信
敲黑板,劃重點:微信一共有兩個 access_token微信開發
一個是7200就過時的,一個是登陸用的。這兩個有本質區別,受權登陸只會用到後者app
======================正文開始======================post
/// <summary> /// 微信登陸 /// </summary> /// <returns></returns> public ActionResult WechatLogin() { if (!string.IsNullOrEmpty(Request["code"])) { //根據appid,secret,code取到用戶的所有信息 Dictionary<string, object> dic = GetUserInfoByCode(AppId, AppSecret, Request["code"].ToString()); if (dic.ContainsKey("errcode")) { return Redirect("/WError/Index?Msg=" + dic["errmsg"].ToString()); } string openid = dic["openid"].ToString(); //根據微信惟一標識openid 去數據庫判斷是否存在 //1.不存在就新增 Model.TBase_UserInfo u = BLL.TBase_UserInfo.Instence.GetUserByOpenId(openid); if (u == null) { u = new Model.TBase_UserInfo(); u.Code = GetCode<Model.TBase_UserInfo>(); u.NickName = dic["nickname"].ToString(); u.HeadImage = dic["headimgurl"].ToString(); u.OpenId = openid; u.IsOrder = 0; u.Status = 1; u.State = 1; u.AddDate = DateTime.Now; int id = BLL.TBase_UserInfo.Instence.Add(u); u.ID = id; } Session[Esluo.Basic.Config.SESSION_KEY_FOR_USER] = u; return Redirect("/WHome/Index"); } else { string redirect_uri = HttpUtility.UrlEncode("http://" + Request.Url.Authority + Request.Url.PathAndQuery); return Redirect(string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope={2}&state=STATE#wechat_redirect", AppId, redirect_uri, "snsapi_userinfo")); } }
/// <summary> /// 得到Code /// </summary> /// <typeparam name="T">表</typeparam> /// <returns></returns> protected long GetCode<T>() { Type type = typeof(T); return BLL.TSYS_Code.Instence.GetCode(type.Name); } /// <summary> ///用code換取獲取用戶信息(包括非關注用戶的)(此access_token是網頁受權的和普通無關) /// </summary> /// <param name="Appid"></param> /// <param name="Appsecret"></param> /// <param name="Code">回調頁面帶的code參數</param> /// <returns>獲取用戶信息(json格式)</returns> public Dictionary<string, object> GetUserInfoByCode(string Appid, string Appsecret, string Code) { JavaScriptSerializer Jss = new JavaScriptSerializer(); 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 = WebRequestPostOrGet(url, "");//post/get方法獲取信息 Dictionary<string, object> DicText = (Dictionary<string, object>)Jss.DeserializeObject(ReText); if (!DicText.ContainsKey("openid")) { return DicText; } else { Dictionary<string, object> respDic = (Dictionary<string, object>)Jss.DeserializeObject(WebRequestPostOrGet("https://api.weixin.qq.com/sns/userinfo?access_token=" + DicText["access_token"] + "&openid=" + DicText["openid"] + "&lang=zh_CN", "")); return respDic; } } #region Post/Get提交調用抓取 /// <summary> /// Post/get 提交調用抓取 /// </summary> /// <param name="url">提交地址</param> /// <param name="param">參數</param> /// <returns>string</returns> 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);//HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url + (url.IndexOf("?") > -1 ? "" : "?") + param); req.Method = "Post"; req.Timeout = 120 * 1000; req.ContentType = "application/x-www-form-urlencoded;"; req.ContentLength = bt.Length; using (Stream reqStream = req.GetRequestStream())//using 使用能夠釋放using段內的內存 { 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;//url錯誤時候回報錯 } } #endregion Post/Get提交調用抓取
沒了ui
沒錯,就是這麼簡單,只有這麼點內容就已經完成了整個微信受權登陸的事情url
---------------------------------------------------------------------------------------------------------
轉載請記得說明做者和出處哦-.-
做者:KingDuDu
原文出處:http://www.cnblogs.com/kingdudu/p/8795928.html
---------------------------------------------------------------------------------------------------------