public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string postString = string.Empty;
if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
{
using (Stream stream = HttpContext.Current.Request.InputStream)
{
Byte[] postBytes = new Byte[stream.Length];
stream.Read(postBytes, 0, (Int32)stream.Length);
postString = Encoding.UTF8.GetString(postBytes);
}
if (!string.IsNullOrEmpty(postString))
{
ResponseXML(postString);//返回給微信用戶信息
}
///加載自定義菜單
string postData = "{" + "\r\n";
postData += "\"button\":[ " + "\r\n";
postData += "{ " + "\r\n";
postData += "\"name\":\"簡單查\"," + "\r\n";
postData += "\"sub_button\":[" + "\r\n";
postData += "{ " + "\r\n";
postData += " \"type\":\"click\"," + "\r\n";
postData += " \"name\":\"我的薪資\", " + "\r\n";
postData += " \"key\":\"mypay\"" + "\r\n";
postData += "}," + "\r\n";
postData += "{ " + "\r\n";
postData += " \"type\":\"click\"," + "\r\n";
postData += " \"name\":\"天氣預(yù)報\", " + "\r\n";
postData += " \"key\":\"tianqiyubao\"" + "\r\n";
postData += "}," + "\r\n";
postData += "{ " + "\r\n";
postData += " \"type\":\"view\"," + "\r\n";
postData += " \"name\":\"火車票查詢\", " + "\r\n";
postData += " \"url\":\"http://www.deqiaohr.com.cn/*******.aspx\"" + "\r\n";
postData += "}," + "\r\n";
postData += "{ " + "\r\n";
postData += " \"type\":\"click\"," + "\r\n";
postData += " \"name\":\"開心一刻\", " + "\r\n";
postData += " \"key\":\"kaixinyixiao\"" + "\r\n";
postData += " }]" + "\r\n";
postData += "}," + "\r\n";
postData += "{" + "\r\n";
postData += "\"name\":\"會員管理\", " + "\r\n";
postData += "\"sub_button\":[" + "\r\n";
postData += "{ " + "\r\n";
postData += " \"type\":\"view\"," + "\r\n";
postData += " \"name\":\"會員注冊\", " + "\r\n";
postData += " \"url\":\"http://www.deqiaohr.com.cn/****.aspx\"" + "\r\n";
postData += "}," + "\r\n";
postData += "{ " + "\r\n";
postData += " \"type\":\"view\"," + "\r\n";
postData += " \"name\":\"重置密碼\", " + "\r\n";
postData += " \"url\":\"http://www.deqiaohr.com.cn/****.aspx\"" + "\r\n";
postData += "}," + "\r\n";
postData += "{ " + "\r\n";
postData += " \"type\":\"click\"," + "\r\n";
postData += " \"name\":\"修改資料\", " + "\r\n";
postData += " \"key\":\"updateMessage\"" + "\r\n";
postData += "}," + "\r\n";
postData += "{ " + "\r\n";
postData += " \"type\":\"click\"," + "\r\n";
postData += " \"name\":\"我的提問\", " + "\r\n";
postData += " \"key\":\"mywen\"" + "\r\n";
postData += "}," + "\r\n";
postData += "{ " + "\r\n";
postData += " \"type\":\"click\"," + "\r\n";
postData += " \"name\":\"聯(lián)系客服\", " + "\r\n";
postData += " \"key\":\"PhoneSerices\"" + "\r\n";
postData += " }]" + "\r\n";
postData += "}," + "\r\n";
postData += "{" + "\r\n";
postData += "\"name\":\"活動通知\"," + "\r\n";
postData += "\"sub_button\":[" + "\r\n";
postData += "{ " + "\r\n";
postData += " \"type\":\"click\"," + "\r\n";
postData += " \"name\":\"近期活動\", " + "\r\n";
postData += " \"key\":\"yuangonghuodong\"" + "\r\n";
postData += "}," + "\r\n";
postData += "{ " + "\r\n";
postData += " \"type\":\"click\"," + "\r\n";
postData += " \"name\":\"近期通知\", " + "\r\n";
postData += " \"key\":\"yuangongtongzhi\"" + "\r\n";
postData += "}," + "\r\n";
postData += "{ " + "\r\n";
postData += " \"type\":\"click\"," + "\r\n";
postData += " \"name\":\"有問必答\", " + "\r\n";
postData += " \"key\":\"youwenbida\"" + "\r\n";
postData += " }]" + "\r\n";
postData += "}]" + "\r\n";
postData += "}" + "\r\n";
//自定義菜單token的獲取 是用 下面的兩個參數(shù) 獲取的 不能直接用 公眾平臺的token
string to = GetAccessToken();
//本人不喜歡 后臺 json的操作 直接截取就可以了 得到的就是 token 或者 自己 獲取 json的token
to = to.Substring(17, to.Length - 37);
//加載菜單
string i = GetPage("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + to, postData);
}
else
{
Auth(); //微信接入的測試
}
}
/// summary>
/// 獲取通行證
/// /summary>
/// returns>/returns>
private string GetAccessToken()
{
string url_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credentialappid=********secret=*********";
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url_token);
myRequest.Method = "GET";
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string content = reader.ReadToEnd();
reader.Close();
return content;
}
/// summary>
/// 加載菜單項
/// /summary>
/// param name="p">/param>
/// param name="postData">/param>
/// returns>/returns>
private string GetPage(string p, 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)備請求...
try
{
// 設(shè)置參數(shù)
request = WebRequest.Create(p) 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ā)送請求并獲取相應(yīng)回應(yīng)數(shù)據(jù)
response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才開始向目標(biāo)網(wǎng)頁發(fā)送Post請求
instream = response.GetResponseStream();
sr = new StreamReader(instream, encoding);
//返回結(jié)果網(wǎng)頁(html)代碼
string content = sr.ReadToEnd();
string err = string.Empty;
return content;
}
catch (Exception ex)
{
string err = ex.Message;
return string.Empty;
}
}
/// summary>
/// 獲取參數(shù)進(jìn)行認(rèn)證
/// /summary>
private void Auth()
{
string token = "*****";//你申請的時候填寫的Token
string echoString = HttpContext.Current.Request.QueryString["echoStr"];
string signature = HttpContext.Current.Request.QueryString["signature"];
string timestamp = HttpContext.Current.Request.QueryString["timestamp"];
string nonce = HttpContext.Current.Request.QueryString["nonce"];
if (CheckSignature(token, signature, timestamp, nonce))
{
if (!string.IsNullOrEmpty(echoString))
{
HttpContext.Current.Response.Write(echoString);
HttpContext.Current.Response.End();
}
}
}
/// summary>
/// 對微信傳入?yún)?shù)進(jìn)行封裝到數(shù)組,拼接字符串,進(jìn)行加密操作
/// /summary>
/// param name="token">/param>
/// param name="signature">/param>
/// param name="timestamp">/param>
/// param name="nonce">/param>
/// returns>/returns>
private bool CheckSignature(string token, string signature, string timestamp, string nonce)
{
string[] ArrTmp = { token, timestamp, nonce };//將參數(shù)放進(jìn)數(shù)組
Array.Sort(ArrTmp);//對數(shù)組進(jìn)行排序
string tmpStr = string.Join("", ArrTmp);//將數(shù)組進(jìn)行拼接
///對拼接后的字符串進(jìn)行加密操作
tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
//轉(zhuǎn)換成小寫形式
tmpStr = tmpStr.ToLower();
//比對成功返回
if (tmpStr == signature)
{
return true;
}
else
{
return false;
}
}
以上就是關(guān)于asp.net微信開發(fā)的第一篇,針對開發(fā)者接入進(jìn)行學(xué)習(xí),之后會有更新更多關(guān)于asp.net微信開發(fā)的文章,希望大家持續(xù)關(guān)注。