微信公眾平臺(tái)開發(fā)之認(rèn)證“成為開發(fā)者”.Net代碼解析

字號(hào):


    .Net 實(shí)現(xiàn)微信公共服務(wù)平臺(tái)開發(fā)的認(rèn)證,認(rèn)證成為開發(fā)者,具體內(nèi)容如下
    這些代碼也就開始認(rèn)證的時(shí)候用一次,以后就不用了:
    const string Token = "XXXXX";//你的token 
    protected void Page_Load(object sender, EventArgs e) 
    { 
      string postStr = ""; 
      if (Request.HttpMethod.ToLower() == "post") 
      { 
        System.IO.Stream s = System.Web.HttpContext.Current.Request.InputStream; 
        byte[] b = new byte[s.Length]; 
        s.Read(b, 0, (int)s.Length); 
        postStr = System.Text.Encoding.UTF8.GetString(b); 
        if (!string.IsNullOrEmpty(postStr)) 
        { 
          //ResponseMsg(postStr); 
          Response.Write(ResponseMsg(postStr)); 
          Response.End(); 
        } 
       //WriteLog("postStr:" + postStr); 
      } 
      else
      { 
        Valid(); 
      } 
    }    
    /// <summary> 
    /// 驗(yàn)證微信簽名 
    /// </summary> 
    /// * 將token、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序 
    /// * 將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行sha1加密 
    /// * 開發(fā)者獲得加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請(qǐng)求來(lái)源于微信。 
    /// <returns></returns> 
    private bool CheckSignature() 
    { 
      string signature = Request.QueryString["signature"].ToString(); 
      string timestamp = Request.QueryString["timestamp"].ToString(); 
      string nonce = Request.QueryString["nonce"].ToString(); 
      string[] ArrTmp = { Token, timestamp, nonce }; 
      Array.Sort(ArrTmp);   //字典排序 
      string tmpStr = string.Join("", ArrTmp); 
      tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1"); 
      tmpStr = tmpStr.ToLower(); 
      if (tmpStr == signature) 
      { 
        return true; 
      } 
      else
      { 
        return false; 
      } 
    } 
    .private void Valid() 
    { 
      string echoStr = Request.QueryString["echoStr"].ToString(); 
      if (CheckSignature()) 
      { 
        if (!string.IsNullOrEmpty(echoStr)) 
        { 
          Response.Write(echoStr); 
          Response.End(); 
        } 
      } 
    }    
    /// <summary> 
    /// 寫日志(用于跟蹤) 
    /// </summary> 
    private void WriteLog(string strMemo) 
    { 
      string filename = Server.MapPath("/logs/log.txt"); 
      if (!Directory.Exists(Server.MapPath("http://logs//"))) 
        Directory.CreateDirectory("http://logs//"); 
      StreamWriter sr = null; 
      try
      { 
        if (!File.Exists(filename)) 
        { 
          sr = File.CreateText(filename); 
        } 
        else
        { 
          sr = File.AppendText(filename); 
        } 
        sr.WriteLine(strMemo); 
      } 
      catch
      { 
      } 
      finally
      { 
        if (sr != null) 
          sr.Close(); 
      } 
    }
    以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助