乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      .net開發(fā)微信公眾平臺(tái)

       Augest_Rush 2014-04-17

      一、說明:公眾平臺(tái)信息接口為開發(fā)者提供了一種新的消息處理方式,只有申請成為開發(fā)者后,你才能使用公眾平臺(tái)的開發(fā)功能,在這里你需要填寫一個(gè)URL和一個(gè)Token,這兩項(xiàng)信息也需要你擁有自己的服務(wù)器(外網(wǎng)服務(wù)器)資源,其中的Token可由開發(fā)者任意填寫,URL即是接口配置信息的鏈接地址,在本文中我采用的是創(chuàng)建一個(gè)簡易網(wǎng)站的方式,在其中的一個(gè)頁面的后臺(tái)程序中配置相關(guān)的接口信息,然后發(fā)布到外網(wǎng)服務(wù)器上,最后可以訪問到這個(gè)頁面的鏈接地址即是這里應(yīng)該填寫的URL。

      .net開發(fā)微信公眾平臺(tái) - 盛情淵 - 南宮云遙的博客

      二、接口配置過程:

      1.網(wǎng)址接入-校驗(yàn)簽名:

          const string Token = "aka";//定義一個(gè)局部變量不可以被修改,這里定義的變量要與接口配置信息中填寫的Token一致
          protected void Page_Load(object sender, EventArgs e)
          {
              string postStr = "";
              Valid();//校驗(yàn)簽名,當(dāng)填入的信息提交之后頁面有提示“你已成功成為公眾平臺(tái)開發(fā)者,可以使用公眾平臺(tái)的開發(fā)功能”這個(gè)的時(shí)候,接下來你就需要注釋掉這個(gè)校驗(yàn)的方法,使得后面的消息回復(fù)得以正常運(yùn)作
              if (Request.HttpMethod.ToLower() == "post")//當(dāng)普通微信用戶向公眾賬號(hào)發(fā)消息時(shí),微信服務(wù)器將POST該消息到填寫的URL上
              {
                  postStr = PostInput();
                  if (string.IsNullOrEmpty(postStr) == false)
                  {
                      //WriteLog(postStr,Server);//計(jì)入日記
                      ResponseMsg(postStr);
                  }
              }
          }
          private void Valid()
          {
              string echoStr = Request.QueryString["echoStr"].ToString();
              if (CheckSignature())
              {
                  if (!string.IsNullOrEmpty(echoStr))
                  {
                      Response.Write(echoStr);
                      Response.End();
                  }
              }
          }

      .net開發(fā)微信公眾平臺(tái) - 盛情淵 - 南宮云遙的博客


          /// <summary>
          /// 驗(yàn)證微信簽名
          /// </summary>
          /// <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");//對該字符串進(jìn)行sha1加密
              tmpStr = tmpStr.ToLower();//對字符串中的字母部分進(jìn)行小寫轉(zhuǎn)換,非字母字符不作處理
              //WriteLog(tmpStr, Server);//計(jì)入日志
              if (tmpStr == signature)//開發(fā)者獲得加密后的字符串可與signature對比,標(biāo)識(shí)該請求來源于微信。開發(fā)者通過檢驗(yàn)signature對請求進(jìn)行校驗(yàn),若確認(rèn)此次GET請求來自微信服務(wù)器,請?jiān)瓨臃祷豦chostr參數(shù)內(nèi)容,則接入生效,否則接入失敗
              {
                  return true;
              }
              else
                  return false;
          }

          /// <summary>
          /// 獲取post返回來的數(shù)據(jù)
          /// </summary>
          /// <returns></returns>
          private string PostInput()
          {
              Stream s = System.Web.HttpContext.Current.Request.InputStream;
              byte[] b = new byte[s.Length];
              s.Read(b, 0, (int)s.Length);
              return Encoding.UTF8.GetString(b);
          }

      /// <summary>
          ///返回微信信息結(jié)果
          /// </summary>
          /// <param name="weixinXML"></param>
          private void ResponseMsg(string weixinXML)
          {
              try
              {
                  XmlDocument doc = new XmlDocument();
                  doc.LoadXml(weixinXML);//讀取XML字符串
                  XmlElement rootElement = doc.DocumentElement;

                  XmlNode MsgType = rootElement.SelectSingleNode("MsgType");//獲取字符串中的消息類型

                  string resxml = "";
                  if (MsgType.InnerText == "text")//如果消息類型為文本消息
                  {
                      var model = new
                      {
                          ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText,
                          FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText,
                          CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText,
                          MsgType = MsgType.InnerText,
                          Content = rootElement.SelectSingleNode("Content").InnerText,
                          MsgId = rootElement.SelectSingleNode("MsgId").InnerText
                      };
                      resxml += "<xml><ToUserName><![CDATA[" + model.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + model.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime>";
                      if (!string.IsNullOrEmpty(model.Content))//如果接收到消息
                      {
                          if (model.Content.Contains(" 你好") || model.Content.Contains(" 好") || model.Content.Contains("hi") || model.Content.Contains("hello"))// 你好
                          {
                              resxml += "<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[你好,有事請留言,偶會(huì)及時(shí)回復(fù)你的。]]></Content><FuncFlag>0</FuncFlag></xml>";
                          }

                       }

                       else//沒有接收到消息
                      {
                          resxml += "<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[親,感謝您對我的關(guān)注,有事請留言。]]></Content><FuncFlag>0</FuncFlag></xml>";
                      }

                      Response.Write(resxml);
                  }
                  if (MsgType.InnerText == "image")//如果消息類型為圖片消息
                  {
                      var model = new
                      {
                          ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText,
                          FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText,
                          CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText,
                          MsgType = MsgType.InnerText,
                          PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText,
                          MsgId = rootElement.SelectSingleNode("MsgId").InnerText
                      };
                      resxml += "<xml><ToUserName><![CDATA[" + model.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + model.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>1</ArticleCount><Articles><item><Title><![CDATA[歡迎您的光臨!]]></Title><Description><![CDATA[非常感謝您的關(guān)注!]]></Description><PicUrl><![CDATA[http://...jpg]]></PicUrl><Url><![CDATA[http://www.baidu.com/]]></Url></item></Articles><FuncFlag>0</FuncFlag></xml>";
                      Response.Write(resxml);
                  }
                  else//如果是其余的消息類型
                  {
                      var model = new
                      {
                          ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText,
                          FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText,
                          CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText,
                      };
                      resxml += "<xml><ToUserName><![CDATA[" + model.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + model.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[親,感謝您對我的關(guān)注,有事請留言,我會(huì)及時(shí)回復(fù)你的哦。]]></Content><FuncFlag>0</FuncFlag></xml>";
                      Response.Write(resxml);
                  }
              }
              catch (Exception ex)
              {
                  throw ex;
              }
              Response.End();

          }
          /// <summary>
          /// datetime轉(zhuǎn)換成unixtime
          /// </summary>
          /// <param name="time"></param>
          /// <returns></returns>
          private int ConvertDateTimeInt(System.DateTime time)
          {
              System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
              return (int)(time - startTime).TotalSeconds;
          }
          /// <summary>
          /// 寫日志(用于跟蹤),可以將想打印出的內(nèi)容計(jì)入一個(gè)文本文件里面,便于測試
          /// </summary>
          public static void WriteLog(string strMemo, HttpServerUtility server)
          {
              string filename = server.MapPath("/logs/log.txt");//在網(wǎng)站項(xiàng)目中建立一個(gè)文件夾命名logs(然后在文件夾中隨便建立一個(gè)web頁面文件,避免網(wǎng)站在發(fā)布到服務(wù)器之后看不到預(yù)定文件)
              if (!Directory.Exists(server.MapPath("//logs//")))
                  Directory.CreateDirectory("//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();
              }
          }

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請遵守用戶 評(píng)論公約

        類似文章 更多