到开发者中心 开启服务器配置 这里写一个服务器url 这样写:
using System;
using System.IO;
using System.Data;
using System.Text;
using System.Security;
using System.Diagnostics;
using System.Security.Cryptography;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Cn.Com.Shijinet.Kunlun.Log; //日志
using System.Xml;
using ShandsWeixin.business;
using System.Threading;
namespace ShandsWeixin
{
public partial class MessageReceiver : System.Web.UI.Page
{
Logger logger = Logger.GetLogger(typeof(MessageReceiver));
protected void Page_Load(object sender, EventArgs e)
{
logger.Debug("start:" + DateTime.Now.ToString()+":" + DateTime.Now.Millisecond.ToString());
logger.Debug("querystring:" + Request.Url);
string signature = Request.QueryString["signature"];
if (signature != null && signature != "")
{
string timestamp = Request.QueryString["timestamp"];
string nonce = Request.QueryString["nonce"];
string echostr = Request.QueryString["echostr"];
string token = ""; //Token
//token = System.Configuration.ConfigurationManager.AppSettings["token"];
//token = "75a2f055b55357917a23fc42273ba5e1";
string sha1Str = SHA1Encrypt(nonce + timestamp + token);
if (string.Compare(nonce, timestamp) > 0)
{
sha1Str = SHA1Encrypt(timestamp + nonce + token);
}
if (signature == null)
{
signature = "";
}
//Thread.Sleep(800);
if (signature.ToLower() == sha1Str)
{
Response.Clear();
Response.Write(echostr);
}
logger.Debug("signature:" + signature);
logger.Debug("timestamp:" + timestamp);
logger.Debug("nonce:" + nonce);
logger.Debug("echostr:" + echostr);
logger.Debug("sha1Str:" + sha1Str);
}
//这个方法用来定义菜单或者自动回复
if (Request.RequestType == "POST")
{
StreamReader reader = new StreamReader(Request.InputStream);
String xmlData = reader.ReadToEnd();
logger.Debug("xmlData:" + xmlData);
XmlDocument msgXml = new XmlDocument();
msgXml.LoadXml(xmlData);
MessageProcess msgProcess = new MessageProcess();
string returnMsg = msgProcess.ProcessMessage(msgXml);
Response.Clear();
Response.Write(returnMsg);
logger.Debug("returnMsg:" + returnMsg);
return;
}
logger.Debug("end:" + DateTime.Now.ToString() + ":" + DateTime.Now.Millisecond.ToString());
}
public string SHA1Encrypt(string strIn)
{
byte[] tempByte = null;
SHA1 sha1 = new SHA1CryptoServiceProvider();
tempByte = sha1.ComputeHash(Encoding.UTF8.GetBytes(strIn));
string strOut = "";
strOut = BitConverter.ToString(tempByte).Replace("-", "");
return strOut.ToLower();
}
}
}
然后写这个代码用来处理微信的消息类型
using System;
using System.Collections.Generic;
using System.Web;
using System.Xml;
using System.Text;
using ShandsWeixin.model;
using Cn.Com.Shijinet.Kunlun.Log;
namespace ShandsWeixin.business
{
public class MessageProcess
{
Logger logger = Logger.GetLogger(typeof(MessageProcess));
public string ProcessMessage(XmlDocument xmlData)
{
//转换xml消息为对象
ReceiveMessage recMsg = ConvertReceiveMessage(xmlData);
recMsg.SourceType = "weixin";
//获取回复消息
object replyMsg = GetReplyContentByMessage(recMsg);
//转换回复消息为XML
return ConvertReplyMessage(replyMsg);
}
public object GetReplyContentByMessage(ReceiveMessage recMessage)
{
logger.Debug(recMessage.MsgType);
switch (recMessage.MsgType)
{
case "event":
switch (recMessage.Event)
{
//订阅关注
case "subscribe":
return MessageContent.getSubscribeMessage(recMessage);
//取消关注
case "unsubscribe":
return null;
//点击事件
case "CLICK":
return MessageContent.getClickMessage(recMessage);
}
break;
case "text":
//根据发送内容获取回复内容
return MessageContent.getMessageBySendMsg(recMessage);
default:
return MessageContent.getDefaultMessage(recMessage);
}
return null;
}
///
/// 转换接收到的XML为接收消息对象
///
///
///
public ReceiveMessage ConvertReceiveMessage(XmlDocument xmlData)
{
ReceiveMessage recMsg = new ReceiveMessage();
recMsg.FromUserName = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/FromUserName").InnerText);
recMsg.ToUserName = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/ToUserName").InnerText);
recMsg.MsgType = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/MsgType").InnerText);
switch (recMsg.MsgType)
{
case "event":
recMsg.Event = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/Event").InnerText);
recMsg.EventKey = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/EventKey").InnerText);
recMsg.MsgId = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/MsgId").InnerText);
break;
case "text":
recMsg.Content = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/Content").InnerText);
recMsg.MsgId = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/MsgId").InnerText);
break;
case "image":
recMsg.PicUrl = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/PicUrl").InnerText);
recMsg.MediaId = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/MediaId").InnerText);
recMsg.ThumbMediaId = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/ThumbMediaId").InnerText);
recMsg.MsgId = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/MsgId").InnerText);
break;
case "voice":
recMsg.MediaId = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/MediaId").InnerText);
recMsg.MsgFormat = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/Format").InnerText);
recMsg.MsgId = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/MsgId").InnerText);
break;
case "video":
recMsg.MediaId = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/MediaId").InnerText);
recMsg.ThumbMediaId = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/ThumbMediaId").InnerText);
recMsg.MsgId = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/MsgId").InnerText);
break;
case "location":
recMsg.Location_X = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/Location_X").InnerText);
recMsg.Location_Y = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/Location_Y").InnerText);
recMsg.PositionLabel = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/Label").InnerText);
recMsg.MapScale = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/Scale").InnerText);
recMsg.MsgId = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/MsgId").InnerText);
break;
case "link":
recMsg.Title = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/Title").InnerText);
recMsg.Description = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/Description").InnerText);
recMsg.Url = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/Url").InnerText);
break;
default:
recMsg.Content = MessageUtil.FormatMessage(xmlData.SelectSingleNode("/xml/Content").InnerText);
break;
}
return recMsg;
}
///
/// 转换消息类为回复消息XML字符串
///
///
///
public string ConvertReplyMessage(object replyMsg)
{
if (replyMsg == null)
{
return "";
}
StringBuilder sb = new StringBuilder();
WeixinMessage wsMessage = (WeixinMessage)replyMsg;
switch (wsMessage.MsgType)
{
case "text":
ReplyMessageText replyTxtMsg = (ReplyMessageText)replyMsg;
sb.Append(" ");
sb.Append(" ");
sb.Append(" "); ;
sb.Append(" " + DateTime.Now.Ticks.ToString() + " ");
sb.Append(" ");
sb.Append(" ");
break;
case "news":
ReplyMessageArticle articleMsg = (ReplyMessageArticle)replyMsg;
sb.Append(" ");
sb.Append(" ");
sb.Append(" "); ;
sb.Append(" " + DateTime.Now.Ticks.ToString() + " ");
sb.Append(" ");
sb.Append(" "+articleMsg.Articles.Count.ToString()+" ");
if (articleMsg.Articles.Count > 0)
{
sb.Append(" ");
foreach(MessageArticle artMsg in articleMsg.Articles)
{
sb.Append(" - ");
sb.Append("
");
sb.Append(" ");
sb.Append(" ");
sb.Append(" ");
sb.Append(" ");
}
sb.Append(" ");
}
break;
case "image":
ReplyMessageArticle imageMsg = (ReplyMessageArticle)replyMsg;
sb.Append(" ");
sb.Append(" ");
sb.Append(" "); ;
sb.Append(" " + DateTime.Now.Ticks.ToString() + " ");
sb.Append(" ");
sb.Append(" ");
foreach (MessageArticle artMsg in imageMsg.Articles)
{
sb.Append(" ");
}
sb.Append(" ");
break;
case "music":
ReplyMessageMusic musicMsg = (ReplyMessageMusic)replyMsg;
sb.Append(" ");
sb.Append(" ");
sb.Append(" "); ;
sb.Append(" " + DateTime.Now.Ticks.ToString() + " ");
sb.Append(" ");
sb.Append(" ");
sb.Append(" ");
sb.Append(" ");
sb.Append(" ");
sb.Append(" ");
sb.Append(" ");
break;
case "transfer_customer_service":
ReplyMessageText transferMsg = (ReplyMessageText)replyMsg;
sb.Append(" ");
sb.Append(" ");
sb.Append(" "); ;
sb.Append(" " + DateTime.Now.Ticks.ToString() + " ");
sb.Append(" ");
break;
default:
ReplyMessageText defaultMsg = (ReplyMessageText)replyMsg;
sb.Append(" ");
sb.Append(" ");
sb.Append(" "); ;
sb.Append(" " + DateTime.Now.Ticks.ToString() + " ");
sb.Append(" ");
// sb.Append(" ");
break;
}
sb.Append(" ");
logger.Debug(sb.ToString());
return sb.ToString(); ;
}
}
}
好了 最后写这个代码 用来定义自动回复消息
using System;
using System.Collections.Generic;
using System.Web;
using ShandsWeixin.model;
using System.Text;
using System.Security.Cryptography;
using Cn.Com.Shijinet.Kunlun.Log;
namespace ShandsWeixin.business
{
public static class MessageContent
{
public static Logger logger = Logger.GetLogger(typeof(MessageContent));
///
/// 默认消息
///
///
///
public static object getDefaultMessage(ReceiveMessage recMessage)
{
return getSubscribeMessage(recMessage);
}
public static string getSiteUrl()
{
string siteUrl = System.Configuration.ConfigurationManager.AppSettings["siteUrl"];
if (siteUrl == null)
{
siteUrl = "http://m..cn/";
}
return siteUrl;
}
public static object getClickMessage(ReceiveMessage recMessage)
{
switch (recMessage.EventKey)
{
case "ABOUT":
return getAboutKaiyuan(recMessage);
case "CALLCENTER":
return getCallCenterMsg(recMessage);
case "供需":
return getgongxu(recMessage);
default:
return MessageContent.getDefaultMessage(recMessage);
}
}
///
/// 关注订阅
///
///
///
public static object getSubscribeMessage(ReceiveMessage recMessage)
{
return getMutipleAritcleMessage(recMessage);
}
///
/// 取消关注
///
///
///
public static object getUnubscribeMessage(ReceiveMessage recMessage)
{
ReplyMessageText replyTextMsg = new ReplyMessageText();
replyTextMsg.Content = "";
return replyTextMsg;
}
///
/// 根据回复文本内容回复消息
///
///
///
public static object getMessageBySendMsg(ReceiveMessage recMessage)
{
if (recMessage.Content.Contains("$"))
{
return getPriceService(recMessage);
}
else if(recMessage.Content.Contains("@"))
{
return getSupplyService(recMessage);
}
else
{
return getPurchaseService(recMessage);
}
}
///
/// 价格信息
///
///
///
public static object getPriceService(ReceiveMessage recMessage)
{
ReplyMessageArticle replyArticleMsg = new ReplyMessageArticle();
replyArticleMsg.CreateTime = DateTime.Now.Ticks.ToString();
replyArticleMsg.ToUserName = recMessage.FromUserName;
replyArticleMsg.FromUserName = recMessage.ToUserName;
replyArticleMsg.MsgType = "news";
string openid = recMessage.FromUserName;
MessageArticle msgArticle = new MessageArticle();
string keyword = System.Web.HttpUtility.UrlEncode(recMessage.Content.Substring(1, recMessage.Content.Length - 1), System.Text.Encoding.GetEncoding("GB2312"));
msgArticle.Url = "http://m..cn/price/?keywords=" + keyword;
logger.Debug(msgArticle.Url);
msgArticle.PicUrl = "http://wx..cn/img/price.jpg";
msgArticle.Title = recMessage.Content.Substring(1, recMessage.Content.Length - 1) + "的价格信息";
msgArticle.Description = "这是花木网您需要查询" + recMessage.Content.Substring(1, recMessage.Content.Length - 1) + "的最新的价格信息";
replyArticleMsg.Articles = new List();
replyArticleMsg.Articles.Add(msgArticle);
return replyArticleMsg;
}
public static object getSupplyService(ReceiveMessage recMessage)
{
ReplyMessageArticle replyArticleMsg = new ReplyMessageArticle();
replyArticleMsg.CreateTime = DateTime.Now.Ticks.ToString();
replyArticleMsg.ToUserName = recMessage.FromUserName;
replyArticleMsg.FromUserName = recMessage.ToUserName;
replyArticleMsg.MsgType = "news";
string openid = recMessage.FromUserName;
MessageArticle msgArticle = new MessageArticle();
string keyword = System.Web.HttpUtility.UrlEncode(recMessage.Content.Substring(1, recMessage.Content.Length - 1), System.Text.Encoding.GetEncoding("GB2312"));
msgArticle.Url = "http://m..cn/sell/?keywords=" + keyword;
msgArticle.PicUrl = "http://wx..cn/img/supply.jpg";
msgArticle.Title = recMessage.Content.Substring(1, recMessage.Content.Length - 1) + "的供应信息";
msgArticle.Description = "这是花木网您需要查询" + recMessage.Content.Substring(1, recMessage.Content.Length - 1) + "的最新的供应信息";
replyArticleMsg.Articles = new List();
replyArticleMsg.Articles.Add(msgArticle);
return replyArticleMsg;
}
public static object getPurchaseService(ReceiveMessage recMessage)
{
ReplyMessageArticle replyArticleMsg = new ReplyMessageArticle();
replyArticleMsg.CreateTime = DateTime.Now.Ticks.ToString();
replyArticleMsg.ToUserName = recMessage.FromUserName;
replyArticleMsg.FromUserName = recMessage.ToUserName;
replyArticleMsg.MsgType = "news";
string openid = recMessage.FromUserName;
MessageArticle msgArticle = new MessageArticle();
string keyword = System.Web.HttpUtility.UrlEncode(recMessage.Content, System.Text.Encoding.GetEncoding("GB2312"));
msgArticle.Url = "http://m..cn/buy/?keywords=" + keyword;
logger.Debug(msgArticle.Url);
msgArticle.PicUrl = "http://wx..cn/img/purchase.jpg";
msgArticle.Title = recMessage.Content + "的采购信息";
msgArticle.Description = "这是花木网您需要查询" + recMessage.Content + "的最新的采购信息";
replyArticleMsg.Articles = new List();
replyArticleMsg.Articles.Add(msgArticle);
return replyArticleMsg;
}
public static object getTransferService(ReceiveMessage recMessage)
{
ReplyMessageText replyArticleMsg = new ReplyMessageText();
replyArticleMsg.CreateTime = DateTime.Now.Ticks.ToString();
replyArticleMsg.ToUserName = recMessage.FromUserName;
replyArticleMsg.FromUserName = recMessage.ToUserName;
replyArticleMsg.MsgType = "transfer_customer_service";
return replyArticleMsg;
}
///
/// 多图文消息(关注获取)
///
///
///
public static object getMutipleAritcleMessage(ReceiveMessage recMessage)
{
ReplyMessageArticle replyArticleMsg = new ReplyMessageArticle();
replyArticleMsg.CreateTime = DateTime.Now.Ticks.ToString();
replyArticleMsg.ToUserName = recMessage.FromUserName;
replyArticleMsg.FromUserName = recMessage.ToUserName;
replyArticleMsg.MsgType = "news";
replyArticleMsg.Articles = new List();
string openid = recMessage.FromUserName;
MessageArticle msgArticle = new MessageArticle();
msgArticle.Url = "http://m.huamu.cn";
msgArticle.PicUrl = "http://m..com/ShandsWeixin/img/kyzzz.jpg";
msgArticle.Title = "多图文标题1";
msgArticle.Description = "多图文内容1";
replyArticleMsg.Articles.Add(msgArticle);
msgArticle = new MessageArticle();
msgArticle.Url = "http://m..cn";
msgArticle.PicUrl = "http://m..com/ShandsWeixin/img/AirHotel.jpg";
msgArticle.Title = "多图文标题1";
msgArticle.Description = "多图文内容2";
replyArticleMsg.Articles.Add(msgArticle);
msgArticle = new MessageArticle();
msgArticle.Url = "http://m..cn";
msgArticle.PicUrl = "http://m..com/ShandsWeixin/img/weixin120_2.jpg";
msgArticle.Title = "多图文标题3";
msgArticle.Description = "多图文内容3rn多图文内容3";
replyArticleMsg.Articles.Add(msgArticle);
return replyArticleMsg;
}
public static string GetMD5(string str)
{
string strRe = "";
strRe = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToString();
return strRe.ToLower().Trim();
}
public static string GetMD5(string CryptoString, Encoding encoding)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] fromData = encoding.GetBytes(CryptoString);
byte[] targetData = md5.ComputeHash(fromData);
string byte2String = null;
for (int i = 0; i < targetData.Length; i++)
{
byte2String += targetData[i].ToString("x");
}
return byte2String;
}
public static WeixinMember.Members GetMemberByExtenalId(string sourceType, string extenalOpenId)
{
WeixinMember.Members wxMember = null;
logger.Debug("wxMember.sourceType:" + sourceType + ";extenalOpenId" + extenalOpenId);
try
{
if (sourceType == null || sourceType == "")
{
sourceType = "weixin";
}
WeixinMember.SourceType bindExtenalService = new ShandsWeixin.WeixinMember.SourceType();
wxMember = bindExtenalService.GetMemberByOpenID(sourceType, extenalOpenId);
logger.Debug("wxMember.ResultCode:" + wxMember.ResultCode);
}
catch (Exception ex)
{
logger.Debug("wxMember.e:" + ex.Message);
}
return wxMember;
}
public static object getVerifGwMessage(ReceiveMessage recMessage)
{
ReplyMessageArticle replyArticleMsg = new ReplyMessageArticle();
replyArticleMsg.CreateTime = DateTime.Now.Ticks.ToString();
replyArticleMsg.ToUserName = recMessage.FromUserName;
replyArticleMsg.FromUserName = recMessage.ToUserName;
replyArticleMsg.MsgType = "verifygw";
return replyArticleMsg;
}
}
}
比如这样
{
"button":[
{
"name":"商祺会",
"sub_button":[
{
"type":"click",
"name":"加入商祺会",
"key":"REGIST"
},
{
"type":"click",
"name":"我的礼遇",
"key":"RECEPTION"
},
{
"type":"click",
"name":"余额积分",
"key":"BANLANCE"
},
{
"type":"click",
"name":"我的订单",
"key":"RESERVATION"
},
{
"type":"view",
"name":"关于商祺会",
"url":"http://m..com/Content.aspx"
}
]
},
{
"name":"酒店预订",
"sub_button":[
{
"type":"click",
"name":"主题房抢购",
"key":"THEME"
},
{
"type":"click",
"name":"智造",
"key":"EBKY"
},
{
"type":"click",
"name":"订房立减80元",
"key":"RESERVE"
},
{
"type":"click",
"name":"精品自由行",
"key":"FREELINE"
},
{
"type":"click",
"name":"电话预订",
"key":"CALLCENTER"
}]
},
{
"name":"更多...",
"sub_button":[
{
"type":"click",
"name":"关注有礼",
"key":"LOTTERY"
},
{
"type":"click",
"name":"酒店加盟",
"key":"JOIN"
},
{
"type":"click",
"name":"关怀",
"key":"CARE"
},
{
"type":"click",
"name":"人才招募",
"key":"CAREER"
},
{
"type":"click",
"name":"关于",
"key":"ABOUT"
}
]
}]
}
最后是自动获取openid outher2 ?????是自己的
jObject 引用了northonsoftjson
private string GetToken(string code)
{
string res = "";
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://api.weixin.qq.com/sns/oauth2/access_token?appid=??????&secret=?????&code=code&grant_type=authorization_code");
req.Method = "GET";
using (WebResponse wr = req.GetResponse())
{
HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string content = reader.ReadToEnd();
var jObject = JObject.Parse(content);
res = jObject["openid"].ToString();
}
return res;
}




