.NET微信公眾號(hào)開(kāi)發(fā)之創(chuàng)建自定義菜單
一.前言
開(kāi)發(fā)之前,我們需要閱讀官方的接口說(shuō)明文檔,不得不吐槽一下,微信的這個(gè)官方文檔真的很爛,但是,為了開(kāi)發(fā)我們需要的功能,我們也不得不去看這些文檔.
接口文檔地址:http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html
看了這些個(gè)文檔,基本意思明白了,就是我們把我們要?jiǎng)?chuàng)建的菜單創(chuàng)建好,post到微信的服務(wù)器上面,微信服務(wù)器然后給我們一些狀態(tài)碼,從而判斷我們的菜單是否創(chuàng)建成功,只是在發(fā)送json數(shù)據(jù)以前我們要做一些身份驗(yàn)證。
二.準(zhǔn)備工作
首先把我們要?jiǎng)?chuàng)建的菜單寫(xiě)在一個(gè)txt文本中:
{ "button":[ { "type":"view", "name":"付停車(chē)費(fèi)", "url":"http://www.baidu.com" },{ "name":"個(gè)人中心", "sub_button":[ { "type":"view", "name":"個(gè)人信息", "url":"http://www.baidu.com" }, { "type":"view", "name":"訂單查詢(xún)", "url":"http://www.baidu.com" }, { "type":"view", "name":"使用幫助", "url":"http://www.baidu.com" }, { "type":"view", "name":"下載APP", "url":"http://www.baidu.com" }] }] }
三.開(kāi)始編碼
首先我們創(chuàng)建一個(gè)一般處理程序createMenu.ashx.
public string access_token { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
FileStream fs1 = new FileStream(Server.MapPath(".") + "\\menu.txt", FileMode.Open);
StreamReader sr = new StreamReader(fs1, Encoding.GetEncoding("UTF-8"));
string menu = sr.ReadToEnd();
sr.Close();
fs1.Close();
var str = GetPage(" JObject jo = JObject.Parse(str);
access_token = jo["access_token"].ToString();
GetPage(" }
這里需要注意的是appid,secret這些參數(shù)需要換成我們自己的,這些參數(shù)我們可以放在配置文件中。也可以單獨(dú)的放在一個(gè)幫助類(lèi)里面。
同時(shí)在創(chuàng)建菜單的時(shí)候我們需要帶上我的access_token這個(gè)令牌來(lái)驗(yàn)證我們的身份,那么我們首先要做的就是獲取我們的這個(gè)令牌,那個(gè)這個(gè)令牌要如何獲取了,我們可以通過(guò)一個(gè)接口獲取,只需要傳遞我們的appid和secret這個(gè)兩個(gè)參數(shù)
{"access_token":"jVLAT9Rp9dNgxI4pb4RWlSx_9HJLXICmk_uWDlRtAug8wcaWhZZ10eqZCYRZrEwCIJf1-vBhS9YEX00Dj7q__lJCyTIWOxTruOd25opkf-0","expires_in":7200}
上面的GetPage方法的返回值。這樣我們就可以獲取我們的令牌了。
最后一步:帶上我們的令牌,post我們的json菜單數(shù)據(jù)就可以創(chuàng)建菜單了。
當(dāng)你看到如下代碼:
{"errcode":0,"errmsg":"ok"}
說(shuō)明你的菜單創(chuàng)建成功了。
四:GetPage
代碼如下:
public string GetPage(string posturl, string postData) { Stream outstream = null; Stream instream = null; StreamReader sr = null; HttpWebResponse response = null; HttpWebRequest request = null; Encoding encoding = Encoding.UTF8; byte[] data = encoding.GetBytes(postData); // 準(zhǔn)備請(qǐng)求... try { // 設(shè)置參數(shù) request = WebRequest.Create(posturl) as HttpWebRequest; CookieContainer cookieContainer = new CookieContainer(); request.CookieContainer = cookieContainer; request.AllowAutoRedirect = true; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = data.Length; outstream = request.GetRequestStream(); outstream.Write(data, 0, data.Length); outstream.Close(); //發(fā)送請(qǐng)求并獲取相應(yīng)回應(yīng)數(shù)據(jù) response = request.GetResponse() as HttpWebResponse; //直到request.GetResponse()程序才開(kāi)始向目標(biāo)網(wǎng)頁(yè)發(fā)送Post請(qǐng)求 instream = response.GetResponseStream(); sr = new StreamReader(instream, encoding); //返回結(jié)果網(wǎng)頁(yè)(html)代碼 string content = sr.ReadToEnd(); string err = string.Empty; Response.Write(content); return content; } catch (Exception ex) { string err = ex.Message; return string.Empty; } }
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡
- .NET微信公眾號(hào)開(kāi)發(fā)之查詢(xún)自定義菜單
- 微信公眾號(hào)支付(一)如何獲取用戶(hù)openId
- C#實(shí)現(xiàn)微信公眾號(hào)群發(fā)消息(解決一天只能發(fā)一次的限制)實(shí)例分享
- 微信支付PHP SDK之微信公眾號(hào)支付代碼詳解
- 微信公眾號(hào)開(kāi)發(fā)之微信公共平臺(tái)消息回復(fù)類(lèi)實(shí)例
- php實(shí)現(xiàn)微信公眾號(hào)主動(dòng)推送消息
- java微信公眾號(hào)開(kāi)發(fā)(搭建本地測(cè)試環(huán)境)
- java微信公眾號(hào)開(kāi)發(fā)第一步 公眾號(hào)接入和access_token管理
- C#微信公眾號(hào)開(kāi)發(fā)之接收事件推送與消息排重的方法
- 微信公眾號(hào)支付之坑:調(diào)用支付jsapi缺少參數(shù) timeStamp等錯(cuò)誤解決方法
- 微信公眾號(hào)開(kāi)發(fā) 自定義菜單跳轉(zhuǎn)頁(yè)面并獲取用戶(hù)信息實(shí)例詳解
相關(guān)文章
js實(shí)現(xiàn)九宮格圖片半透明漸顯特效的方法
這篇文章主要介紹了js實(shí)現(xiàn)九宮格圖片半透明漸顯特效的方法,涉及js操作css特效的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-02-02js實(shí)現(xiàn)簡(jiǎn)單的星級(jí)選擇器提交效果適用于評(píng)論等
星級(jí)選擇器在網(wǎng)上會(huì)搜到很多類(lèi)似的代碼,不過(guò)實(shí)現(xiàn)起來(lái)相對(duì)比較復(fù)雜,在本文將為大家介紹的是使用js簡(jiǎn)單的實(shí)現(xiàn)下,感興趣的朋友不要錯(cuò)過(guò)2013-10-10JavaScript+html實(shí)現(xiàn)前端頁(yè)面隨機(jī)二維碼驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了JavaScript+html實(shí)現(xiàn)前端頁(yè)面隨機(jī)二維碼驗(yàn)證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06基于JavaScript實(shí)現(xiàn)的插入排序算法分析
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)的插入排序算法,結(jié)合實(shí)例形式詳細(xì)分析了插入排序的原理、操作步驟及javascript相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2017-04-04jstree創(chuàng)建無(wú)限分級(jí)樹(shù)的方法【基于ajax動(dòng)態(tài)創(chuàng)建子節(jié)點(diǎn)】
這篇文章主要介紹了jstree創(chuàng)建無(wú)限分級(jí)樹(shù)的方法,結(jié)合實(shí)例形式分析了jstree基于ajax結(jié)合asp.net后臺(tái)動(dòng)態(tài)創(chuàng)建子節(jié)點(diǎn)實(shí)現(xiàn)無(wú)限分級(jí)樹(shù)效果的相關(guān)步驟與操作技巧,需要的朋友可以參考下2016-10-10解讀new?Object()和Object.create()的區(qū)別
這篇文章主要介紹了解讀new?Object()和Object.create()的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02JavaScript動(dòng)態(tài)創(chuàng)建link標(biāo)簽到head里的方法
這篇文章主要介紹了JavaScript動(dòng)態(tài)創(chuàng)建link標(biāo)簽到head里的方法,分別介紹了使用jQuery的方法、使用原生javascript方法與IE特有的createStyleSheet方法等,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12解決Webpack 熱部署檢測(cè)不到文件變化的問(wèn)題
下面小編就為大家分享一篇解決Webpack 熱部署檢測(cè)不到文件變化的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02JavaScript中利用構(gòu)造器函數(shù)模擬類(lèi)的方法
JavaScript中沒(méi)有類(lèi)的概念,所以其在對(duì)象創(chuàng)建方面與面向?qū)ο笳Z(yǔ)言有所不同。這篇文章主要介紹了JavaScript中利用構(gòu)造器函數(shù)模擬類(lèi)的方法,文中給出了詳細(xì)的示例代碼和介紹,需要的朋友可以參考下,下面一起看看吧。2017-02-02