最近一直在看微信,整整一个月了,看到现在说实话还有很多没看的,从前两周一点看不懂到现在单个功能的一步步实现,不知道这样的速度是否太慢了。
不过现在往下看还是有思路了,目前整个文档完成学习只有1/3左右,但是看过的每个接口都是测试过的。学习很重要,但是有人指引将会效率翻倍,但是谁会愿意无偿花自己的时间给你呢,所以嘛。。。就不说了,
好了,牢骚到此,对于我这篇文章有什么不明白的或者需要交流的请加 QQ群:216390234
首先来门要有思路对吧,我们不是流水线的工人,而是系统的创造者,所以我们要有思想而不是一味的写代码,写到最后发现哪哪都不合适然后去修改,发现修改的时间远远大于开发的时间,那样就徒劳了。
这篇很简单适用于刚刚入门的开发者:
对于微信的基本配置我就不阐述了,网上讲解的很详细了。
1、项目:MVC(不是api)
2、
1 public ActionResult Index() 2 { 3 string result = ""; 4 string postString = string.Empty; 5 if (Request.HttpMethod.ToUpper() == "POST") 6 { 7 using (Stream stream = System.Web.HttpContext.Current.Request.InputStream) 8 { 9 Byte[] postBytes = new Byte[stream.Length]; 10 stream.Read(postBytes, 0, (Int32)stream.Length); 11 postString = Encoding.UTF8.GetString(postBytes); 12 if (!string.IsNullOrEmpty(postString)) 13 { 14 string SendToWx = string.Empty; 15 //这里写方法解析Xml 16 XmlDocument xml = new XmlDocument();// 17 xml.LoadXml(postString); 18 XmlElement xmlElement = xml.DocumentElement; 19 //这里进行判断MsgType 20 switch (xmlElement.SelectSingleNode("MsgType").InnerText) 21 { 22 case "text": 23 SendToWx = WxText.GetWxTextXml(postString); 24 break; 25 case "image": 26 SendToWx = WxImage.GetWxImageXml(postString); 27 break; 28 case "voice": 29 break; 30 case "video": 31 break; 32 case "shortvideo": 33 break; 34 case "location": 35 break; 36 case "link": 37 break; 38 case "event": 39 string eventKey = xmlElement.SelectSingleNode("EventKey").InnerText == null ? "" : xmlElement.SelectSingleNode("EventKey").InnerText; 40 switch (xmlElement.SelectSingleNode("Event").InnerText) 41 { 42 case "subscribe": 43 if (string.IsNullOrEmpty(eventKey)) 44 { 45 //model = new Models.Receive_Event(); 46 } 47 else 48 { 49 //model = new Models.Receive_Event_Scan(); 50 } 51 break; 52 case "unsubscribe": 53 break; 54 case "SCAN": 55 break; 56 case "LOCATION": 57 break; 58 case "CLICK": 59 break; 60 case "VIEW": 61 break; 62 default: 63 break; 64 } 65 break; 66 default: 67 result = "没有识别的类型消息:" + xmlElement.SelectSingleNode("MsgType").InnerText; 68 WriteLog(result); 69 break; 70 } 71 if (!string.IsNullOrEmpty(SendToWx)) 72 { 73 System.Web.HttpContext.Current.Response.Write(SendToWx); 74 System.Web.HttpContext.Current.Response.End(); 75 } 76 else 77 { 78 result = "回传数据为空"; 79 WriteLog(result); 80 } 81 } 82 else 83 { 84 result = "微信推送的数据为:" + postString; 85 WriteLog(result); 86 } 87 } 88 } 89 else if (Request.HttpMethod.ToUpper() == "GET") 90 { 91 string token = ConfigurationManager.AppSettings["WXToken"];//从配置文件获取Token 92 if (string.IsNullOrEmpty(token)) 93 { 94 result = string.Format("微信Token配置项没有配置!"); 95 WriteLog(result); 96 } 97 string echoString = System.Web.HttpContext.Current.Request.QueryString["echoStr"]; 98 string signature = System.Web.HttpContext.Current.Request.QueryString["signature"]; 99 string timestamp = System.Web.HttpContext.Current.Request.QueryString["timestamp"]; 100 string nonce = System.Web.HttpContext.Current.Request.QueryString["nonce"]; 101 if (CheckSignature(token, signature, timestamp, nonce)) 102 { 103 if (!string.IsNullOrEmpty(echoString)) 104 { 105 System.Web.HttpContext.Current.Response.Write(echoString); 106 System.Web.HttpContext.Current.Response.End(); 107 result = string.Format("微信Token配置成功,你已成为开发者!"); 108 WriteLog(result); 109 } 110 } 111 } 112 result = string.Format("页面被访问,没有请求数据!"); 113 WriteLog(result); 114 return View(); 115 }