十四老久沒有寫博客了,中間經歷了,事業,感情的幾分波折。如今終於稍微緩過來一點。又是一次從頭開始,走在匆忙的路上。html
好了煽情完了,直接上代碼了。web
基礎就不說了我用的是vs2005開發的,部署在iis6.0上,微信號爲:ruyishh。目前只是簡單的功能。服務器
/// <summary> /// 獲取access_token /// </summary> /// <returns></returns> public static string GetAccessToken() { WebClient webClient = new WebClient(); Byte[] bytes = webClient.DownloadData(string.Format("{0}&appid={1}&secret={2}", m_AcessTokenUrl, m_appid, m_secret)); string result = Encoding.GetEncoding("utf-8").GetString(bytes); //JObject jObj = JObject.Parse(result); //JToken token = jObj["access_token"]; //return token.ToString().Substring(1, token.ToString().Length - 2); string []temp = result.Split(','); string[] tp = temp[0].Split(':'); return tp[1].ToString().Replace('"',' ').Trim().ToString(); }
關於access_token呢 我理解就至關於一個全局session吧,每次獲取一個,上一個就會過時失效,開發文檔上說的有效期爲30天吧。至於access_token的做用呢,能夠用來建立自定義菜單。微信
#region //建立自定義菜單 注意Json格式問題 private void CreateWxMenu() { string weixin1 = ""; weixin1 += "{\n"; weixin1 += "\"button\":[\n"; weixin1 += "{\n"; // weixin1 += "\"type\":\"click\",\n"; //第一個菜單 weixin1 += "\"name\":\"故障維修\",\n"; weixin1 += "\"sub_button\":[\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"寬帶故障\",\n"; weixin1 += "\"key\":\"V1001_REPAIRBAND\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"固話故障\",\n"; weixin1 += "\"key\":\"V1001_REPAIRPHONE\"\n"; weixin1 += "}]\n"; weixin1 += "},\n"; //第二個菜單 weixin1 += "{\n"; //weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"查詢服務\",\n"; weixin1 += "\"sub_button\":[\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"話費餘額\",\n"; weixin1 += "\"key\":\"V1002_TELQUERY\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"流量查詢\",\n"; weixin1 += "\"key\":\"V1002_FLOWQUERY\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"積分查詢\",\n"; weixin1 += "\"key\":\"V1002_TOTALQUERY\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"帳單查詢\",\n"; weixin1 += "\"key\":\"V1002_LISTQUERY\"\n"; weixin1 += "}]\n"; weixin1 += "},\n"; //第三個菜單 weixin1 += "{\n"; weixin1 += "\"name\":\"套餐服務\",\n"; weixin1 += "\"sub_button\":[\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"最新業務\",\n"; weixin1 += "\"key\":\"V1003_NEWS\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"流量套餐\",\n"; weixin1 += "\"key\":\"V1003_SETMEAL\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"短信套餐\",\n"; weixin1 += "\"key\":\"V1003_MESSAGE\"\n"; weixin1 += "}]\n"; weixin1 += "}\n"; weixin1 += "}]\n"; weixin1 += "}\n"; PostMenuData( postUrl+GetAccessToken(),weixin1 ); } private void PostMenuData(string url, string postData) { Stream outstream = null; Stream instream = null; StreamReader sr = null; HttpWebResponse response = null; HttpWebRequest request = null; Encoding encoding = Encoding.UTF8; byte[] data = encoding.GetBytes(postData); // 準備請求... try { // 設置參數 request = WebRequest.Create(url) as HttpWebRequest; CookieContainer cookieContainer = new CookieContainer(); request.CookieContainer = cookieContainer; request.AllowAutoRedirect = true; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = data.Length; outstream = request.GetRequestStream(); outstream.Write(data, 0, data.Length); outstream.Close(); //發送請求並獲取相應迴應數據 response = request.GetResponse() as HttpWebResponse; //直到request.GetResponse()程序纔開始向目標網頁發送Post請求 instream = response.GetResponseStream(); sr = new StreamReader(instream, encoding); //返回結果網頁(html)代碼 string content = sr.ReadToEnd(); string err = string.Empty; // return content; } catch (Exception ex) { string err = ex.Message; //return string.Empty; } }
關係圖我就不畫了,運行邏輯呢就是這樣: 微信用戶 <> 騰訊微信服務器 <> 個人程序cookie
對於處理程序代碼以下:session
protected void Page_Load(object sender, EventArgs e) { if (Request.HttpMethod.ToLower() == "post") { Stream s = System.Web.HttpContext.Current.Request.InputStream; byte[] b = new byte[s.Length]; s.Read(b, 0, (int)s.Length); postStr = Encoding.UTF8.GetString(b); if (!string.IsNullOrEmpty(postStr)) { ResponseMsg(); //對微信服務器psot形式發來的消息進行處理 } } else { string echoStr = System.Web.HttpContext.Current.Request.QueryString["echoStr"]; if (CheckSignature()) { if( !string.IsNullOrEmpty( echoStr ) ) System.Web.HttpContext.Current.Response.Write(echoStr); //返回原值表示校驗成功 System.Web.HttpContext.Current.Response.End(); } } } //返回微信信息 private void ResponseMsg() { 在此寫你的處理代碼 }