不想廢話,直接寫了!因?yàn)槭橇艚o自己做隨筆的,所以大神們看到別噴……
1.必須有微信公眾賬號(hào)
2.你也可以申請(qǐng)測(cè)試微信號(hào),鏈接給你 ??http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
然后,建立mvc,你只需要點(diǎn)幾下vs就幫你搞定了。這不廢話
接著,要?jiǎng)?chuàng)建一個(gè)一般處理程序,隨便起個(gè)名字,測(cè)試通過(guò)才是重點(diǎn),抓緊時(shí)間……
///?<summary> ????????///?驗(yàn)證微信簽名???????? ????????///?</summary> ????????///?<returns></returns> ????????///?*?將token、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序???????? ????????///?*?將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行sha1加密???????? ????????///?*?開發(fā)者獲得加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請(qǐng)求來(lái)源于微信。 ????????private?bool?CheckSignature() ????????{????????????var?token?=?"token";? ????????????var?signature?=?HttpContext.Current.Request.QueryString["signature"];????????????var?timestamp?=?HttpContext.Current.Request.QueryString["timestamp"];????????????var?nonce?=?HttpContext.Current.Request.QueryString["nonce"];????????????var?echostr?=?HttpContext.Current.Request.QueryString["echostr"];????????????string[]?ArrTmp?=?{?token,?timestamp,?nonce?}; ????????????Array.Sort(ArrTmp);?????//字典排序 ????????????var?tmpStr?=?string.Join("",?ArrTmp); ????????????tmpStr?=?FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr,?"SHA1");//加密方式????????????if?(tmpStr.ToLower()?==?signature) ????????????{????????????????return?true; ????????????}????????????return?false; ????????}
這代碼相當(dāng)于是跟微信公眾號(hào)中【開發(fā)】--》【基本配置】里面你所寫的Token 一個(gè)一對(duì)一令牌通信握手,只要互相通了,那么你就算是搞定了!
搞定是后話,還有工作沒(méi)做完,擦,,接著寫!
怎么配置,這是問(wèn)題,哎只能用花生殼給測(cè)試先,至少要知道玩了半天是不是通的!
看下圖:左邊花生殼配置-----右邊iis網(wǎng)站發(fā)布綁定
?
?
看到這圖,你也明白下一步怎么玩了吧。本地iis配上了域名。這簡(jiǎn)直屌爆了…………
下面。我們加上代碼。設(shè)置發(fā)送和自動(dòng)回復(fù)測(cè)試,看看能不能玩
?#region?接收消息????????///?<summary> ????????///?接收微信發(fā)送的XML消息并且解析????????///?</summary> ????????private?void?ReceiveXml() ????????{????????????var?requestStream?=?HttpContext.Current.Request.InputStream;????????????var?requestByte?=?new?byte[requestStream.Length]; ????????????requestStream.Read(requestByte,?0,?(int)requestStream.Length);????????????var?requestStr?=?Encoding.UTF8.GetString(requestByte);????????????if?(!string.IsNullOrEmpty(requestStr)) ????????????{????????????????//封裝請(qǐng)求類 ????????????????var?requestDocXml?=?new?XmlDocument(); ????????????????requestDocXml.LoadXml(requestStr);????????????????var?rootElement?=?requestDocXml.DocumentElement;????????????????if?(rootElement?==?null)?return;????????????????var?wxXmlModel?=?new?WxXmlModel ????????????????{ ????????????????????ToUserName?=?rootElement.SelectSingleNode("ToUserName").InnerText, ????????????????????FromUserName?=?rootElement.SelectSingleNode("FromUserName").InnerText, ????????????????????CreateTime?=?rootElement.SelectSingleNode("CreateTime").InnerText, ????????????????????MsgType?=?rootElement.SelectSingleNode("MsgType").InnerText ????????????????};????????????????switch?(wxXmlModel.MsgType) ????????????????{????????????????????case?"text"://文本 ????????????????????????wxXmlModel.Content?=?rootElement.SelectSingleNode("Content").InnerText;????????????????????????break;????????????????????case?"image"://圖片 ????????????????????????wxXmlModel.PicUrl?=?rootElement.SelectSingleNode("PicUrl").InnerText;????????????????????????break;????????????????????case?"event"://事件 ????????????????????????wxXmlModel.Event?=?rootElement.SelectSingleNode("Event").InnerText;????????????????????????if?(wxXmlModel.Event?!=?"TEMPLATESENDJOBFINISH")//關(guān)注類型????????????????????????{ ????????????????????????????wxXmlModel.EventKey?=?rootElement.SelectSingleNode("EventKey").InnerText; ????????????????????????}????????????????????????break;????????????????????default:????????????????????????break; ????????????????} ????????????????ResponseXML(wxXmlModel);//回復(fù)消息????????????} ????????}????????#endregion ????????#region?回復(fù)消息????????private?void?ResponseXML(WxXmlModel?WxXmlModel) ????????{????????????var?QrCodeApi?=?new?QrCodeApi();????????????var?XML?=?"";????????????switch?(WxXmlModel.MsgType) ????????????{????????????????case?"text"://文本回復(fù) ????????????????????XML?=?ResponseMessage.GetText(WxXmlModel.FromUserName,?WxXmlModel.ToUserName,?WxXmlModel.Content);????????????????????break;????????????????case?"event":????????????????????switch?(WxXmlModel.Event) ????????????????????{????????????????????????case?"subscribe":????????????????????????????if?(string.IsNullOrEmpty(WxXmlModel.EventKey)) ????????????????????????????{ ????????????????????????????????XML?=?ResponseMessage.GetText(WxXmlModel.FromUserName,?WxXmlModel.ToUserName,?"關(guān)注成功"); ????????????????????????????}????????????????????????????else ????????????????????????????{ ????????????????????????????????XML?=?ResponseMessage.SubScanQrcode(WxXmlModel.FromUserName,?WxXmlModel.ToUserName,?WxXmlModel.EventKey);//掃描帶參數(shù)二維碼先關(guān)注后推送事件????????????????????????????}????????????????????????????break;????????????????????????case?"SCAN": ????????????????????????????XML?=?ResponseMessage.ScanQrcode(WxXmlModel.FromUserName,?WxXmlModel.ToUserName,?WxXmlModel.EventKey);//掃描帶參數(shù)二維碼已關(guān)注?直接推送事件 ????????????????????????????break; ????????????????????}????????????????????break;????????????????default://默認(rèn)回復(fù) ????????????????????break; ????????????} ????????????HttpContext.Current.Response.Write(XML); ????????????HttpContext.Current.Response.End(); ????????}????????#endregion
上面一個(gè)發(fā)送,一個(gè)接收,還是在WhApi.ashx處理程序文件里面。我就想說(shuō)清楚,呵呵!
因?yàn)槟愀娖脚_(tái)握手成功了,你肯定要發(fā)點(diǎn)東西過(guò)去試試對(duì)吧~~
下圖是一個(gè)接收方法和一個(gè)自動(dòng)匹配回復(fù)文件的關(guān)聯(lián),別急下面我會(huì)上傳這個(gè)文件!
?
?還缺一個(gè)配置,就是vs要設(shè)置【調(diào)試】----【附加到進(jìn)程】,只需要把下面【顯示所有用戶進(jìn)程】一項(xiàng)打勾,你就能找到w3wp.exe 如果有多個(gè)這樣的進(jìn)程,那你還是要確認(rèn)【用戶名】那一列,選中跟你程序池名稱一樣的就ok,點(diǎn)附加,確定附加!
接下來(lái)。好玩了…………………………………………………………
微信掃一掃那個(gè)測(cè)試公眾號(hào),發(fā)一條自定義消息,看看有什么回復(fù),上面的繁瑣配置,可以加斷點(diǎn)調(diào)試的,不然搞那么多也沒(méi)意義是吧,看看發(fā)送和接收跟你自己設(shè)定的吻合,那就ok了。
就這樣…………寫完了。
更多C#實(shí)現(xiàn)微信開發(fā)前奏?相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)