微信公衆帳戶的開發者模式(一) 部分細節access_token的獲取等

十四老久沒有寫博客了,中間經歷了,事業,感情的幾分波折。如今終於稍微緩過來一點。又是一次從頭開始,走在匆忙的路上。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();
    }
View Code


關於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;
        }
    }
View Code


關係圖我就不畫了,運行邏輯呢就是這樣:  微信用戶 <>     騰訊微信服務器   <> 個人程序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()
    {
        在此寫你的處理代碼
    }
View Code
相關文章
相關標籤/搜索