您的位置:首页 > 编程语言 > ASP

微信公众平台接口,asp.net实现

2014-02-25 15:57 351 查看
protected void Page_Load(object sender, EventArgs e)

{

wxmessage wx = GetWxMessage();

string res = "";

//新用户添加

if (!string.IsNullOrEmpty(wx.EventName) && wx.EventName.Trim() == "subscribe")

{

string content = "";

content = "/:rose欢迎关注52冷笑话/:rose\n看笑话请直接回复“x”\n无聊时候还可以找我聊聊天哦!";

res = sendTextMessage(wx, content);

}

else

{

bool sendJoke = false;

//看笑话

List<string> xhList = new List<string>() { "x", "笑话", "笑話" };

foreach (string item in xhList)

{

if (wx.Content.Trim().ToLower().Contains(item))

{

sendJoke = true;

break;

}

}

if (sendJoke)

{

JokeDemo joke = GetJoke(wx.FromUserName);

if (string.IsNullOrEmpty(joke.Img))

{

string title = string.Format("编号{0}:{1}\n-----------------\n", joke.ID, joke.Title);

string content = joke.Content;

if (content.Length > 300)

{

content = GetSubString(content, 300) + "\n-----------------\n点击连接阅读全文:URL"

}

res = sendTextMessage(wx, title + content);

}

else

{

res = sendPictureMessage(wx, joke);

}

}

//智能学聊天

if (res == "" && Regex.IsMatch(wx.Content, "问(:|:)(.+?)答(:|:)(.+?)", RegexOptions.IgnoreCase))

{

string content = "";

string key = Regex.Match(wx.Content, "问(:|:)(.+?)答(:|:)(.+?)", RegexOptions.IgnoreCase).Groups[2].Value.Trim();

int startIndex = wx.Content.IndexOf("答:") + 2;

if (startIndex < 3)

{

startIndex = wx.Content.IndexOf("答:") + 2;

}

string rep = wx.Content.Substring(startIndex, wx.Content.Length - startIndex).Trim();

// Regex.Match(wx.Content, "问(:|:)(.+?)答(:|:)(.+?)", RegexOptions.IgnoreCase).Groups[4].Value;

if ((new ChatBLL()).isExists(key))

{

content = "/::)O啦!学会啦\n不信你问问!";

}

else

{

if ((new ChatBLL()).Add(key, rep) > 0)

{

content = "好啦,这个问题我学会啦!\n你现在提问我吧!/::P";

}

else

{

content = "糟糕了,系统出了点儿小意外!\n麻烦你再试一次!";

}

}

res = sendTextMessage(wx, content);

}

//未知情况

if (res == "")

{

string content = (new ChatBLL()).GetReplyByKey(wx.Content.Trim());

if (content == "")

{

content = "/:,@-D啊哦,你在说什么?\n你可以按照下面的格式告诉我:\n问:你说的话 答:你想让我说什么\n看笑话请直接回复“x”!";

}

res = sendTextMessage(wx, content);

}

}

Response.Write(res);

}

/// <summary>

/// 发送文字消息

/// </summary>

/// <param name="wx">获取的收发者信息</param>

/// <param name="content">笑话内容</param>

/// <returns></returns>

private string sendTextMessage(wxmessage wx, string content)

{

string res = string.Format("<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>{2}</CreateTime><MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[{3}]]></Content> <FuncFlag>0</FuncFlag></xml> ",

wx.FromUserName, wx.ToUserName, DateTime.Now, 内容);

return res;

}

/// <summary>

/// 发送图文消息

/// </summary>

/// <param name="wx">获取的收发者信息</param>

/// <param name="joke">笑话信息</param>

/// <returns></returns>

private string sendPictureMessage(wxmessage wx, JokeDemo joke)

{

StringBuilder sb = new StringBuilder();

sb.AppendFormat("<xml><ToUserName><![CDATA[{0}]]></ToUserName>", wx.FromUserName);

sb.AppendFormat("<FromUserName><![CDATA[{0}]]></FromUserName>", wx.ToUserName);

sb.AppendFormat("<CreateTime>{0}</CreateTime>", DateTime.Now);

sb.AppendFormat("<MsgType><![CDATA[news]]></MsgType><Content><![CDATA[]]></Content>");

sb.AppendFormat("<ArticleCount>1</ArticleCount>");

sb.AppendFormat("<Articles><item>");

sb.AppendFormat("<Title><![CDATA[{0}]]></Title>", 标题);

sb.AppendFormat("<Description><![CDATA[{0}]]></Description>", 说明文字);

sb.AppendFormat("<PicUrl><![CDATA[{0}]]></PicUrl>", 图片地址);

sb.AppendFormat("<Url><![CDATA[{0}]]></Url>", 连接地址);

sb.AppendFormat("</item></Articles><FuncFlag>0</FuncFlag></xml>");

return sb.ToString();

}

/// <summary>

/// 获取请求过来的微信信息

/// </summary>

/// <returns></returns>

private wxmessage GetWxMessage()

{

wxmessage wx = new wxmessage();

StreamReader str = new StreamReader(Request.InputStream, System.Text.Encoding.UTF8);

XmlDocument xml = new XmlDocument();

xml.Load(str);

wx.ToUserName = xml.SelectSingleNode("xml").SelectSingleNode("ToUserName").InnerText;

wx.FromUserName = xml.SelectSingleNode("xml").SelectSingleNode("FromUserName").InnerText;

wx.MsgType = xml.SelectSingleNode("xml").SelectSingleNode("MsgType").InnerText;

if (wx.MsgType.Trim() == "text")

{

wx.Content = xml.SelectSingleNode("xml").SelectSingleNode("Content").InnerText;

}

if (wx.MsgType.Trim() == "event")

{

wx.EventName = xml.SelectSingleNode("xml").SelectSingleNode("Event").InnerText;

}

return wx;

}

/// <summary>

/// 微信认证

/// </summary>

private void RenZheng()

{

#region 微信认证

//string res = "";

//string token = "52lxh";

//string signature = Request["signature"];

//string timestamp = Request["timestamp"];

//string nonce = Request["nonce"];

//string echostr = Request["echostr"];

//if (string.IsNullOrEmpty(token) || string.IsNullOrEmpty(signature) || string.IsNullOrEmpty(timestamp) || string.IsNullOrEmpty(nonce) || string.IsNullOrEmpty(echostr))

//{

// using (StreamWriter sw = new StreamWriter(Server.MapPath("wx.txt")))

// {

// sw.Write("参数错误" + Request.Url);

// }

//}

//else

//{

// ArrayList arr = new ArrayList() { token, timestamp, nonce };

// arr.Sort();

// string signature1 = GetSHA1(arr[0].ToString() + arr[1].ToString() + arr[2].ToString());

// if (signature == signature1.ToLower())

// {

// res = echostr;

// }

// else

// {

// res = "error";

// }

// Response.Write(res);

//}

#endregion

}

/// <summary>

/// 加密字符串

/// </summary>

/// <param name="password"></param>

/// <returns></returns>

private string GetSHA1(string password)

{

string shh1string = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password, "SHA1");

return shh1string;

}

/// <summary>

/// 截取字符串

/// </summary>

/// <param name="content"></param>

/// <param name="length"></param>

/// <returns></returns>

private string GetSubString(string content, int length)

{

if (content.Length >= length)

{

return content.Substring(0, length);

}

else

{

return content;

}

}

//自定义一个微信消息实体类

class wxmessage

{

public string FromUserName { get; set; }

public string ToUserName { get; set; }

public string MsgType { get; set; }

public string EventName { get; set; }

public string Content { get; set; }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: