用.Net開發微信的時候第一步就是獲取微信的網頁授權,獲取openid。
自己做個總結,以后也好用,這里只提供了獲取openid的接口,后續程序有待開發
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Net; using System.Web.Script.Serialization; namespace WechatHelper { /// <summary> /// 在網站下創建WeChat文件夾,將微信頁面放在WeChat文件夾下 /// 調用GetOpenID()方法。 /// </summary> public class WeChatHelper { public static string appId = "在微信公共平台中拿"; public static string secret = "在微信公共平台中拿"; public static string code = ""; /// <summary> /// 獲取openID /// </summary> /// <param name="type">回調頁面的絕對路徑</param> public static void GetOpenID(string type) { if ((HttpContext.Current.Request.Cookies["openid"]) == null) { System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; Dictionary<string, object> dict = new Dictionary<string, object>(); string code = GetCode(type); //獲取code AccessToken(code); //獲取accessToken HttpContext.Current.Response.Redirect("/WeChat/" + type + ".aspx"); } } /// <summary> /// 獲取code代碼 /// </summary> /// <returns></returns> public static string GetCode(string TypeName) { if (HttpContext.Current.Request.QueryString["Code"] != null) //判斷code是否存在 { if (HttpContext.Current.Request.Cookies["Code"] == null) //判斷是否是第二次進入 { SetCookie("code", HttpContext.Current.Request.QueryString["Code"], 365); //寫code 保存到cookies code = HttpContext.Current.Request.QueryString["Code"]; } else { delCookies("code"); //刪除cookies CodeURL(TypeName); //code重新跳轉URL } } else { CodeURL(TypeName); //code跳轉URL } return code; } /// <summary> /// 獲取AccessToken /// </summary> /// <returns></returns> public static string AccessToken(string code) { Dictionary<string, string> obj = new Dictionary<string, string>(); var client = new System.Net.WebClient(); var serializer = 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, secret, code); client.Encoding = System.Text.Encoding.UTF8; string dataaccess = ""; try { dataaccess = client.DownloadString(url); } catch (Exception e) { //存log方法 } //獲取字典 obj = serializer.Deserialize<Dictionary<string, string>>(dataaccess); string accessToken = ""; if (obj.TryGetValue("access_token", out accessToken)) //判斷access_Token是否存在 { SetCookie("openid", obj["openid"], 365); } else //access_Token 失效時重新發送。 { //存log方法 } return accessToken; } /// <summary> /// 設置cookies /// </summary> /// <param name="name"></param> /// <param name="value"></param> /// <param name="time"></param> public static void SetCookie(string name, string value, int time) { HttpCookie cookies = new HttpCookie(name); cookies.Name = name; cookies.Value = value; cookies.Expires = DateTime.Now.AddDays(time); HttpContext.Current.Response.Cookies.Add(cookies); } /// <summary> /// 跳轉codeURL /// </summary> /// <param name="TypeName"></param> public static void CodeURL(string TypeName) { string url = ""; string locationhref = "http://網站域名/WeChat/"+TypeName+".aspx"; url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect", appId, locationhref); HttpContext.Current.Response.Redirect(url); } /// <summary> /// 刪除cookies /// </summary> /// <param name="name"></param> public static void delCookies(string name) { foreach (string cookiename in HttpContext.Current.Request.Cookies.AllKeys) { HttpCookie cookies = HttpContext.Current.Request.Cookies[name]; if (cookies != null) { cookies.Expires = DateTime.Today.AddDays(-1); HttpContext.Current.Response.Cookies.Add(cookies); HttpContext.Current.Request.Cookies.Remove(name); } } } } }