這篇文章主要分享.net開發(fā)微信公眾平臺實(shí)例的教程,對微信公眾平臺開發(fā)的原理與相應(yīng)的.net實(shí)現(xiàn)方法都做了較為詳細(xì)的講述,非常實(shí)用,需要的朋友可以參考下
本文實(shí)例講述了.net開發(fā)微信公眾平臺的方法。分享給大家供大家參考。具體實(shí)作方法如下:
一、說明:
公眾平臺資訊介面為開發(fā)者提供了一種新的訊息處理方式,只有申請成為開發(fā)者後,你才能使用公眾平臺的開發(fā)功能,在這裡你需要填寫一個(gè)URL和一個(gè)Token,這兩個(gè)資訊也需要你擁有自己的伺服器(外網(wǎng)伺服器)資源,其中的Token可由開發(fā)者任意填寫,URL即是介面配置資訊的連結(jié)位址,在本文中我採用的是創(chuàng)建一個(gè)簡易網(wǎng)站的方式,在其中的一個(gè)頁面的後臺程式中配置相關(guān)的介面信息,然後發(fā)佈到外網(wǎng)伺服器上,最後可以訪問到這個(gè)頁面的連結(jié)地址即是這裡應(yīng)該填寫的URL。
二、介面設(shè)定程序:
#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)填入的信息提交之后頁面有提示“你已成功成為公眾平臺開發(fā)者,可以使用公眾平臺的開發(fā)功能”這個(gè)的時(shí)候,接下來你就需要注釋掉這個(gè)校驗(yàn)的方法,使得后面的消息回復(fù)得以正常運(yùn)作 if (Request.HttpMethod.ToLower() == "post")//當(dāng)普通微信用戶向公眾賬號發(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(); } } }
程式碼如下:
/// <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)識該請求來源于微信。開發(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://miracleart.cn/]]></PicUrl><Url><![CDATA[http://miracleart.cn/]]></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(); } }
以上是分享.net開發(fā)微信公眾平臺實(shí)例的教程的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP是一種開源的腳本語言,廣泛應(yīng)用於網(wǎng)頁開發(fā)和伺服器端編程,尤其在微信開發(fā)中得到了廣泛的應(yīng)用。如今,越來越多的企業(yè)和開發(fā)者開始使用PHP進(jìn)行微信開發(fā),因?yàn)樗蔀榱苏嬲囊讓W(xué)易用的開發(fā)語言。在微信開發(fā)中,訊息的加密和解密是一個(gè)非常重要的問題,因?yàn)樗鼈兩婕百Y料的安全性。對於沒有加密和解密方式的消息,駭客可以輕鬆取得其中的數(shù)據(jù),對用戶造成威脅

在微信公眾號開發(fā)中,投票功能經(jīng)常被運(yùn)用。投票功能是讓使用者快速參與互動(dòng)的好方式,也是舉辦活動(dòng)和調(diào)查意見的重要工具。本文將為您介紹如何使用PHP實(shí)作微信投票功能。在取得微信公眾號授權(quán)首先,你需要取得微信公眾號的授權(quán)。在微信公眾平臺上,你需要設(shè)定微信公眾號碼的api地址、官方帳號和公眾號碼對應(yīng)的token。在我們使用PHP語言開發(fā)的過程中,我們需要使用微信官方提供的PH

隨著微信的普及,越來越多的企業(yè)開始將其作為行銷工具。而微信群發(fā)功能,則是企業(yè)進(jìn)行微信行銷的重要手段之一。但是,如果只依靠手動(dòng)發(fā)送,對於行銷人員來說是一件極為費(fèi)時(shí)費(fèi)力的工作。所以,開發(fā)一款微信群發(fā)工具就顯得格外重要。本文將介紹如何使用PHP開發(fā)微信群發(fā)工具。一、準(zhǔn)備工作開發(fā)微信群發(fā)工具,我們需要掌握以下幾個(gè)技術(shù)點(diǎn):PHP基礎(chǔ)知識微信公眾平臺開發(fā)開發(fā)工具:Sub

微信是目前全球用戶規(guī)模最大的社群平臺之一,隨著行動(dòng)網(wǎng)路的普及,越來越多的企業(yè)開始意識到微信行銷的重要性。在進(jìn)行微信行銷時(shí),客服服務(wù)是至關(guān)重要的一環(huán)。為了更好地管理客服聊天窗口,我們可以藉助PHP語言進(jìn)行微信開發(fā)。一、PHP微信開發(fā)簡介PHP是一種開源的伺服器端腳本語言,廣泛用於Web開發(fā)領(lǐng)域。結(jié)合微信公眾平臺提供的開發(fā)接口,我們可以使用PHP語言進(jìn)行微信

在微信公眾號開發(fā)中,使用者標(biāo)籤管理是一個(gè)非常重要的功能,可以讓開發(fā)者更了解和管理自己的使用者。本篇文章將介紹如何使用PHP實(shí)作微信使用者標(biāo)籤管理功能。一、取得微信用戶openid在使用微信用戶標(biāo)籤管理功能之前,我們首先需要取得用戶的openid。在微信公眾號開發(fā)中,透過使用者授權(quán)的方式取得openid是比較常見的做法。在使用者授權(quán)完成後,我們可以透過以下程式碼取得用

隨著微信成為了人們生活中越來越重要的通訊工具,其敏捷的訊息傳遞功能迅速受到廣大企業(yè)和個(gè)人的青睞。對企業(yè)而言,將微信發(fā)展為一個(gè)行銷平臺已經(jīng)成為趨勢,而微信開發(fā)的重要性也逐漸凸顯。在其中,群發(fā)功能更是被廣泛使用,那麼,作為PHP程式設(shè)計(jì)師,如何實(shí)現(xiàn)群發(fā)訊息發(fā)送記錄呢?以下將為大家簡單介紹一下。 1.了解微信公眾號相關(guān)開發(fā)知識在了解如何實(shí)現(xiàn)群發(fā)訊息發(fā)送記錄之前,我

如何使用PHP實(shí)現(xiàn)微信公眾號開發(fā)微信公眾號已經(jīng)成為了許多企業(yè)推廣和互動(dòng)的重要管道,而PHP作為常用的Web語言,也可以用來進(jìn)行微信公眾號的開發(fā)。本文將介紹使用PHP實(shí)現(xiàn)微信公眾號開發(fā)的具體步驟。第一步:取得微信公眾號的開發(fā)者帳號在開始微信公眾號開發(fā)之前,需要先去申請一個(gè)微信公眾號的開發(fā)者帳號。具體的註冊流程可參考微信公眾平臺的官方網(wǎng)

隨著網(wǎng)路和行動(dòng)智慧型裝置的發(fā)展,微信成為了社交和行銷領(lǐng)域不可或缺的一部分。在這個(gè)越來越數(shù)位化的時(shí)代,如何使用PHP進(jìn)行微信開發(fā)已經(jīng)成為了許多開發(fā)者的關(guān)注點(diǎn)。本文主要介紹如何使用PHP進(jìn)行微信發(fā)展的相關(guān)知識點(diǎn),以及其中的一些技巧和注意事項(xiàng)。一、開發(fā)環(huán)境準(zhǔn)備在進(jìn)行微信開發(fā)之前,首先需要準(zhǔn)備好對應(yīng)的開發(fā)環(huán)境。具體來說,需要安裝PHP的運(yùn)作環(huán)境,以及微信公眾平臺提
