這裏的前提是你已經成功配置了公衆號的服務器接口信息,即微信公衆號的開發之 服務器配置(一)所說的內容,微信服務器和公衆號之間的溝通都通過這個地址,有且只有一個。
/// <summary>
/// 微信推送地址
/// </summary>
/// <returns></returns>
public string go()
{
string xml = "error";
if (Request.QueryString["echostr"] != null)
{
//signature 驗證服務器地址的有效性
string signature = Request.QueryString["signature"].ToString();
string timestamp = Request.QueryString["timestamp"].ToString();
string nonce = Request.QueryString["nonce"].ToString();
string echostr = Request.QueryString["echostr"].ToString();
xml = renzhen(signature, timestamp, nonce, echostr);
}
else
{
//推送消息和事件
xml = ProcessRequest(HttpContext);
}
return xml;
}
/// <summary>
/// 回覆
/// </summary>
/// <param name="param_context"></param>
/// <returns></returns>
private string ProcessRequest(HttpContextBase param_context)
{
string postString = string.Empty;
if (HttpContext.Request.HttpMethod.ToUpper() == "POST")
{
using (Stream stream = HttpContext.Request.InputStream)
{
Byte[] postBytes = new Byte[stream.Length];
stream.Read(postBytes, 0, (Int32)stream.Length);
postString = Encoding.UTF8.GetString(postBytes);
return Responsexml(postString);
}
}
return "error";
}
/// <summary>
/// 處理信息並應答
/// </summary>
private string Responsexml(string postStr)
{
XmlDocument xml = new XmlDocument();
xml.LoadXml(postStr);
string responseContent = "";
//開發者id
XmlNode APPName = xml.SelectSingleNode("/xml/ToUserName");
//用戶id
XmlNode UserName = xml.SelectSingleNode("/xml/FromUserName");
//內容
XmlNode Content = xml.SelectSingleNode("/xml/Content");
//消息類型
XmlNode MsgType = xml.SelectSingleNode("/xml/MsgType");
//事件類型
XmlNode Event = xml.SelectSingleNode("/xml/Event");
//菜單key
XmlNode EventKey = xml.SelectSingleNode("/xml/EventKey");
//回覆的內容
string text = "";
try
{
switch (MsgType.InnerText)
{
//事件
case "event":
switch (Event.InnerText)
{
//關注
case "subscribe":
text = "歡迎關注";
break;
//case "unsubscribe":
// text = "歡迎您下次關注";
// break;
case "CLICK":
switch (EventKey.InnerText)
{
case "one":
text = "你點擊的是菜單一";
break;
case "two":
text = "你點擊的是菜單二";
break;
case "three":
text = "你點擊的是菜單三";
break;
default:
text = "";
break;
}
break;
default:
break;
}
break;
case "text":
text = Content.InnerText;
break;
}
responseContent = string.Format(Message_Text,
UserName.InnerText,
APPName.InnerText,
DateTime.Now.Ticks,
text);
return responseContent;
}
catch (Exception x)
{
return string.Format(Message_Text,
UserName.InnerText,
APPName.InnerText,
DateTime.Now.Ticks,
x.Message);
}
}
/// <summary>
/// 回覆普通文本消息
/// </summary>
private string Message_Text
{
get
{
return @"<xml>
<ToUserName><![CDATA[{0}]]></ToUserName>
<FromUserName><![CDATA[{1}]]></FromUserName>
<CreateTime>{2}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{3}]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
}
}
這裏實現的功能是當用戶發送文本消息時,回覆一樣的消息,當用戶點擊自定義菜單時則回覆對應的菜單消息,這裏只針對文本消息,其他將出錯。
微信提示公衆號暫時無法提供服務。
出現這個錯誤的原因:
你沒有實現相對應的功能。
你的代碼出錯拋異常了,這個得好好檢查。
另外最簡單的可能就是你的服務器關機,微信訪問不到了。
目前這個星期就只學到了這麼多,還挺好玩的呢。