主頁 > 知識(shí)庫 > .net開發(fā)微信公眾平臺(tái)實(shí)例教程

.net開發(fā)微信公眾平臺(tái)實(shí)例教程

熱門標(biāo)簽:百度地圖怎樣做地圖標(biāo)注 浦發(fā)電話機(jī)器人提醒還款 400電話如何申請取消 電銷語音機(jī)器人型號(hào)參數(shù) 柳州電銷機(jī)器人公司 征途美甲店地圖標(biāo)注 騰訊地圖標(biāo)注手機(jī) 太原400電話上門辦理 昆明語音電銷機(jī)器人價(jià)格

本文實(shí)例講述了.net開發(fā)微信公眾平臺(tái)的方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:

一、說明:

公眾平臺(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。

二、接口配置過程:

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

復(fù)制代碼 代碼如下:
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();
            }
        }
}

復(fù)制代碼 代碼如下:
/// 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");//對(duì)該字符串進(jìn)行sha1加密
        tmpStr = tmpStr.ToLower();//對(duì)字符串中的字母部分進(jìn)行小寫轉(zhuǎn)換,非字母字符不作處理
        //WriteLog(tmpStr, Server);//計(jì)入日志
        if (tmpStr == signature)//開發(fā)者獲得加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請求來源于微信。開發(fā)者通過檢驗(yàn)signature對(duì)請求進(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[親,感謝您對(duì)我的關(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[親,感謝您對(duì)我的關(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("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();
        }
}

希望本文所述對(duì)大家的.net程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • 微信小程序 獲取微信OpenId詳解及實(shí)例代碼
  • MVC微信網(wǎng)頁授權(quán)獲取用戶OpenId
  • PHP通過微信跳轉(zhuǎn)的Code參數(shù)獲取用戶的openid(關(guān)鍵代碼)
  • 微信公眾號(hào)支付(一)如何獲取用戶openId
  • 微信公眾平臺(tái)實(shí)現(xiàn)獲取用戶OpenID的方法
  • .net實(shí)現(xiàn)微信公眾賬號(hào)接口開發(fā)實(shí)例代碼
  • asp.net微信開發(fā)(永久素材管理)
  • asp.net開發(fā)微信公眾平臺(tái)之獲取用戶消息并處理
  • asp.net微信開發(fā)(開發(fā)者接入)
  • .NET微信公眾號(hào)獲取OpenID和用戶信息

標(biāo)簽:新疆 白山 陽泉 張家界 蘭州 江蘇 天門 德陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《.net開發(fā)微信公眾平臺(tái)實(shí)例教程》,本文關(guān)鍵詞  .net,開發(fā),微信,公眾,平臺(tái),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《.net開發(fā)微信公眾平臺(tái)實(shí)例教程》相關(guān)的同類信息!
  • 本頁收集關(guān)于.net開發(fā)微信公眾平臺(tái)實(shí)例教程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章