【第二十一篇】C# MVC 微信受權登陸 OAuth2.0受權登陸

首先必定要熟讀,最起碼過一遍微信開發者文檔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

---------------------------------------------------------------------------------------------------------

相關文章
相關標籤/搜索