C#開發(fā)微信公眾平臺_第1頁
C#開發(fā)微信公眾平臺_第2頁
C#開發(fā)微信公眾平臺_第3頁
C#開發(fā)微信公眾平臺_第4頁
C#開發(fā)微信公眾平臺_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C#開發(fā)微信公眾平臺-就這么簡單服務號和訂閱號URL配置創(chuàng)建菜單查詢、刪除菜單接受消息發(fā)送消息(圖文、菜單事件響應)示例Demo下載后記最近公司在做微信開發(fā),其實就是接口開發(fā),網上找了很多資料,當然園友也寫了很多教程,但都是理論說了一大堆,實用指導或代碼很少。如果你自己仔細研究下,其實就那么點東西,C#實現起來也很簡單,原本不想寫這篇文章的,但是本人當時摸索走了很多彎路,這邊總結下,希望初次接觸微信公眾平臺的朋友別像當時的我一樣。自己動手,豐衣足食。服務號和訂閱號服務號是公司申請的微信公共賬號,訂閱號是個人申請的,我個人也申請了一個,不過沒怎么用。服務號1個月(30天)內僅可以發(fā)送1條群發(fā)消息。發(fā)給訂閱用戶(粉絲)的消息,會顯示在對方的聊天列表中。在發(fā)送消息給用戶時,用戶將收到即時的消息提醒。服務號會在訂閱用戶(粉絲)的通訊錄中??缮暾堊远x菜單。訂閱號每天(24小時內)可以發(fā)送1條群發(fā)消息。發(fā)給訂閱用戶(粉絲)的消息,將會顯示在對方的訂閱號文件夾中。在發(fā)送消息給訂閱用戶(粉絲)時,訂閱用戶不會收到即時消息提醒。在訂閱用戶(粉絲)的通訊錄中,訂閱號將被放入訂閱號文件夾中。訂閱號不支持申請自定義菜單。URL配置啟用開發(fā)模式需要先成為開發(fā)者,而且編輯模式和開發(fā)模式只能選擇一個,進入微信公眾平臺-開發(fā)模式,如下:啟用開發(fā)模式需要先成為開發(fā)者,而且編輯模式和開發(fā)模式只能選擇一個,進入微信公眾平臺-開發(fā)模式,如下:需要填寫url和token,當時本人填寫這個的時候花了好久,我本以為填寫個服務器的url就可以了(80端口),但是不行,主要是沒有仔細的閱讀提示信息,所以總是提示第二步:驗證URL有效性開發(fā)者提交信息啟「微信』瞬器椿發(fā)送GET請求到填寫的URL上「GET請求攜帶四個參數描述signature微伺簽名rsignature結合了開發(fā)者填寫的請求中的timestamp#數、nonce#^,time-stamp時間戳nonce亡匚hostr隨機字符串開發(fā)者通過檢驗寸請求進行校驗[下面有校驗方式)*若確認此次GFT請求來自微涪服務器”?原樣返回Mhost「碁內容則接入生效r成丸開發(fā)者成功f吾則接入失敗"從上面可以看出,點擊提交后微信會向我們填寫的服務器發(fā)送幾個參數,然后需要原樣返回出來,所以在提交url的時候,先在服務器創(chuàng)建接口測試返回echostr參數內容。代碼:viewsourceprint?01.1 //成為開發(fā)者url測試,返回echoStr02.2 publicvoidInterfaceTest()03.3 {04.4 stringtoken="填寫的token";05.5 if(string.IsNullOrEmpty(token))return;06.6 {return;07.708.8}09.9stringechoString=Context.Current.Request.QueryString["echoStr"];stringsignature=Context.Current.Request.QueryString["signature"];stringtimestamp=Context.Current.Request.QueryString["timestamp"];stringnonce=Context.Current.Request.QueryString["nonce"];14.14if(!string.IsNullOrEmpty(echoString)){Context.Current.Response.Write(echoString);Context.Current.Response.End();}}在一般處理程序ashx的ProcessRequest的方法內調用上面的方法,url填寫的就是這個ashx的服務器地址,token是一個服務器標示,可以隨便輸入,代碼中的token要和申請?zhí)顚懙囊恢拢蔀殚_發(fā)者才能做開發(fā)。創(chuàng)建菜單我們添加一些微信服務號,聊天窗口下面有些菜單,這個可以在編輯模式簡單配置,也可以在開發(fā)模式代碼配置。微信公眾平臺開發(fā)者文檔::〃/wiki/index.php?title=自定義菜單創(chuàng)建接口,可以看到創(chuàng)建菜單的一些要點,下面的使用網頁調試工具調試該接口,只是調試接口是否可用,并不是直接創(chuàng)建菜單的,菜單分為兩種:click:用戶點擊click類型按鈕后,微信服務器會通過消息接口推送消息類型為event的結構給開發(fā)者(參考消息接口指南),并且?guī)习粹o中開發(fā)者填寫的key值,開發(fā)者可以通過自定義的key值與用戶進行交互。view:用戶點擊view類型按鈕后,微信客戶端將會打開開發(fā)者在按鈕中填寫的url值(即網頁鏈接),達到打開網頁的目的,建議與網頁授權獲取用戶基本信息接口結合,獲得用戶的登入個人信息。click菜單需要填一個key,這個是在我們菜單點擊事件的時候會用到,view只是一個菜單超鏈接。菜單數據是json格式,官網是php示例,其實C#實現起來也很簡單,就是post發(fā)送一個json數據,示例代碼:01.1publicpartialclasscreateMenu:System.Web.UI.Page02.2{03.3 protectedvoidPage_Load(objectsender,EventArgse)04.4 {05.5 FileStreamfs1=newFileStream(Server.MapPath(".")+"\\menu.txt",FileMode.Open);06.6 StreamReader sr = newStreamReader(fs1,Encoding.GetEncoding("GBK"));07.7 stringmenu = sr.ReadToEnd();08.8 sr.Close();09.9 fs1.Close();GetPage("s://api.weixin.<;a class="keylink" href="://./qq/"target="_blank">qq</a>.com/cgi-bin/menu/create?access_token=access_token",menu);}publicstringGetPage(stringposturl, stringpostData){Streamoutstream=null;Streaminstream=null;StreamReadersr=null;WebResponseresponse=null;WebRequestrequest=null;Encodingencoding=Encoding.UTF8;byte[]data=encoding.GetBytes(postData);//準備請求...try{//設置參數request=WebRequest.Create(posturl)asWebRequest;CookieContainercookieContainer=newCookieContainer();request.CookieContainer=cookieContainer;request.AllowAutoRedirect=true;request.Method="POST";request.ContentType="application/x--form-urlencoded";request.ContentLength=data.Length;outstream=request.GetRequestStream();outstream.Write(data,0,data.Length);outstream.Close();//發(fā)送請求并獲取相應回應數據response=request.GetResponse()asWebResponse;〃直到request.GetResponse()程序才開始向目標網頁發(fā)送Post請求instream=response.GetResponseStream();sr=newStreamReader(instream,encoding);〃返回結果網頁(html)代碼stringcontent=sr.ReadToEnd();stringerr=string.Empty;43.43Response.Write(content);44.44returncontent;45.45}46.46catch(Exceptionex)47.47{48.48stringerr=ex.Message;49.49returnstring.Empty;50.50}51.51}52.52}menu.text里面的內容就是json示例菜單,大家可以從示例復制下來,按照你的需要修改一些就行了。關于access_token,其實就是一個請求標示,獲取方式:s:///cgi-bin/token?grant_type=client_credential&appid=appid&secret=secretappid和secret是開發(fā)者標示,在你的信息里面可以看到,通過這個鏈接返回一個json數據,就可以得到access_token值。需要注意的是:access_token有一定的時效性,失效的話就需要重新獲取下,這個在本機就可以創(chuàng)建,不需要上傳到服務器,創(chuàng)建菜單正確,返回{"errcode":0,"errmsg":"ok"}提示信息。這邊就不截圖了,大家試下就可以看到效果,一般創(chuàng)建菜單是一到兩分鐘生效,實在不行就重新關注下。查詢、刪除菜單查詢和刪除菜單也很簡單,只不過是get請求,不需要傳數據,看下示例代碼:01.1publicpartialclassselectMenu:System.Web.UI.Page02.2{03.3protectedvoidPage_Load(objectsender,EventArgse)TOC\o"1-5"\h\z04.4 {05.5 GetPage("s:///cgi-bin/menu/get?access_token=access_token");06.6 //GetPage("s:///cgi-bin/menu/delete?access_token=access_token");07.7 }08.8 publicstringGetPage(stringposturl)09.9 {Streaminstream=null;StreamReadersr=null;WebResponseresponse=null;WebRequestrequest=null;Encodingencoding=Encoding.UTF8;//準備請求...try{//設置參數request=WebRequest.Create(posturl)asWebRequest;CookieContainercookieContainer=newCookieContainer();request.CookieContainer=cookieContainer;request.AllowAutoRedirect=true;request.Method="GET";request.ContentType="application/x--form-urlencoded";//發(fā)送請求并獲取相應回應數據response=request.GetResponse()asWebResponse;〃直到request.GetResponse()程序才開始向目標網頁發(fā)送Post請求instream=response.GetResponseStream();sr=newStreamReader(instream, encoding);〃返回結果網頁(html)代碼stringcontent=sr.ReadToEnd();stringerr=string.Empty;Response.Write(content);returncontent;TOC\o"1-5"\h\z}catch(Exceptionex){stringerr=ex.Message;returnstring.Empty;}}}access_token獲取方式上面已經講過了,查詢菜單返回的是json數據,其實就是我們創(chuàng)建菜單的menu.txt里面的內容。刪除成功返回信息提示:{"errcode":0,"errmsg":"ok"},這個也只要在本地運行就可以了。接受消息微信公眾平臺開發(fā)者文檔::〃/wiki/index.php?title^收普通消息,我們使用微信就是要對用戶發(fā)送的信息進行處理,這邊以接受普通消息為例,語音、圖片消息等,舉一反三可得。從文檔上可以看出接受消息獲得的是一個xml格式文件,當時有點犯傻的是,我要在哪邊進行接受消息啊?還郁悶了半天,其實就是你一開始填寫的url,是不是很汗顏啊,哈哈。<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1348831860</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[thisisatest]]></Content><MsgId>1234567890123456</MsgId></xml>我們在ashx添加下面代碼:01.1 publicvoidProcessRequest(Contextparam_context)TOC\o"1-5"\h\z02.2 {03.3 stringpostString=string.Empty;04.4 if(Context.Current.Request.Method.ToUpper()=="POST")05.5 {06.6 using(Streamstream=Context.Current.Request.InputStream)07.7 {08.8Byte[]postBytes=newByte[stream.Length];09.9stream.Read(postBytes,0,(Int32)stream.Length);postString=Encoding.UTF8.GetString(postBytes);Handle(postString);}}}15.15///<summary>17.17 ///處理信息并應答///</summary>privatevoidHandle(stringpostStr){messageHelphelp=newmessageHelp();stringresponseContent=help.ReturnMessage(postStr);23.23Context.Current.Response.ContentEncoding=Encoding.UTF8;Context.Current.Response.Write(responseContent);}messageHelp是消息處理幫助類,這邊提供下部分代碼,完整的可以下載來,獲取的postString是xml,格式如上,我們這邊只需要轉換成XmlDocument進行解析就行了:01.1 //接受文本消息02.2 publicstringTextHandle(XmlDocumentxmldoc)03.3 {04.4 stringresponseContent="";05.5 XmlNodeToUserName=xmldoc.SelectSingleNode("/xml/ToUserName");06.6 XmlNodeFromUserName=xmldoc.SelectSingleNode("/xml/FromUserName");07.7 XmlNodeContent=xmldoc.SelectSingleNode("/xml/Content");08.8 if(Content!=null)09.9 {responseContent=string.Format(ReplyType.Message_Text,FromUserName.InnerText,ToUserName.InnerText,DateTime.Now.Ticks,"歡迎使用微信公共賬號,您輸入的內容為:"+Content.lnnerText+"\r\n<ahref=\":〃.\"點擊進入</a>");}returnresponseContent;}///<summary>///普通文本消息///</summary>publicstaticstringMessage_Text{get{return@"<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[{3}]]></Content></xml>";}}

上面的代碼就是接受消息,并做一些處理操作,返回消息。發(fā)送消息(圖文、菜單事件響應)這邊發(fā)送消息我分為三種:普通消息、圖文消息和菜單事件響應。普通消息其實上面說接受消息的時候講到了,完整的代碼下邊下載來看。我們先看下圖文消息和菜單事件響應,微信公眾平臺開發(fā)者文檔::〃/wiki/index.php?title=回復圖文消息#.E5.9B.9E.E5.A4.8D.E5.9B.BE.E6.96.87.E6.B6.88.E6.81.AF,xml格式為:01.1<xml>02.2<ToUserName><![CDATA[toUser]]></ToUserName>03.3<FromUserName><![CDATA[fromUser]]></FromUserName>04.4<CreateTime>12345678</CreateTime>05.5<MsgType><![CDATA[news]]></MsgType>06.6<ArticleCount>2</ArticleCount>07.7<Articles>08.8<item>09.9<Title><![CDATA[title1]]></Title><Description><![CDATA[description1]]></Description><PicUrl><![CDATA[picurl]]></PicUrl><Url><![CDATA[url]]></Url></item><item><Title><![CDATA[title]]></Title><Description><![CDATA[description]]></Description><PicUrl><![CDATA[picurl]]></PicUrl><Url><![CDATA[url]]></Url></item></Articles></xml>圖文消息分為兩種,我們先看下效果,找的圓通速遞的微信服務號做示例:IS通邊謹88Q中爭EJf臨圓通連說IS通邊謹88Q中爭EJf臨圓通連說訂野詩理VIstiB理我藍iifl戟冬葫件攔要H杵 技掘奇杵 在F噩労剛開始做的時候,我以為這兩種應該不是用的同一個接口,但是在文檔中找了半天也沒有找到除這個之外的,就試了下兩個圖文消息,發(fā)現就是這個接口發(fā)送的,如果多個的話,item中的Description會失效,只會顯示Title,大家試下就知道了,示例代碼:viewsourceprint?01.1 //事件02.2 publicstringEventHandle(XmlDocumentxmldoc)03.3 {04.4 stringresponseContent="";05.5 XmlNodeEvent=xmldoc.SelectSingleNode("/xml/Event");06.6 XmlNodeEventKey=xmldoc.SelectSingleNode("/xml/EventKey");07.7 XmlNodeToUserName=xmldoc.SelectSingleNode("/xml/ToUserName");08.8 XmlNodeFromUserName=xmldoc.SelectSingleNode("/xml/FromUserName");09.9 if(Event!=null)10.10{//菜單單擊事件if(Event.InnerText.Equals("CLICK")){if(EventKey.InnerText.Equals("click_one"))//click_one{responseContent=string.Format(ReplyType.Message_Text,responseContent=string.Format(ReplyType.Message_Text,17.1718.1819.1920.2021.2122.2223.2324.2425.2526.2627.2728.2829.2930.3031.3132.3233.3334.3435.3536.3637.3738.3839.3940.4041.4142.4243.4344.4445.4546.4647.4748.4849.4950.5051.5152.5253.5354.5455.5556.5657.5758.5859.5960.6061.6162.6263.6364.6465.6566.6667.6768.6869.6970.7071.7172.7273.7374.7475.7576.7677.7778.7879.7980.8081.8182.8283.83FromUserName.InnerText,ToUserName.InnerText,DateTime.Now.Ticks,"你點擊的是click_one");}elseif(EventKey.InnerText.Equals("click_two"))//click_two{responseContent=string.Format(ReplyType.Message_News_Main,FromUserName.InnerText,ToUserName.InnerText,DateTime.Now.Ticks,"2",string.Format(ReplyType.Message_News_ltem,‘我要寄件"://./orderPlace.jpg","://./")+string.Format(ReplyType.Message_News_ltem,"訂單管理","","://./orderManage.jpg","://./"));}elseif(EventKey.lnnerText.Equals("click_three"))//click_three{responseContent=string.Format(ReplyType.Message_News_Main,FromUserName.lnnerText,ToUserName.lnnerText,Dat

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論