using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Xml; namespace TradeManage.WeiXin { public partial class weixin_api : System.Web.UI.Page { const string Token = "qianyun"; //你的token static string appId = "wx2f5849d8aa573da3";//公众号的appId static string appSecret = "34cc0ed309a8250eed74ea4df0b59fb5";//公众号的appSecret static string appUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential"; static string postUrl = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token="; static string postDelUrl = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token="; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string postStr = ""; if (Request.HttpMethod.ToUpper() == "GET") { Valid(); } else if (Request.HttpMethod.ToUpper() == "POST") { Stream s = System.Web.HttpContext.Current.Request.InputStream; byte[] b = new byte[s.Length]; s.Read(b, 0, (int)s.Length); postStr = Encoding.UTF8.GetString(b); if (!string.IsNullOrEmpty(postStr)) { ResponseMsg(postStr); } //WriteLog("postStr:" + postStr); } } } /// /// 验证微信签名 /// /// * 将token、timestamp、nonce三个参数进行字典序排序 /// * 将三个参数字符串拼接成一个字符串进行sha1加密 /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。 /// private bool CheckSignature() { string signature = ""; string timestamp = ""; string nonce = ""; if ((Server.UrlDecode(Page.Request.QueryString["signature"]) != null) && (Server.UrlDecode(Page.Request.QueryString["signature"]) != "")) { signature = Request.QueryString["signature"].ToString(); timestamp = Request.QueryString["timestamp"].ToString(); nonce = Request.QueryString["nonce"].ToString(); } string[] ArrTmp = { Token, timestamp, nonce }; Array.Sort(ArrTmp); //字典排序 string tmpStr = string.Join("", ArrTmp); tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1"); tmpStr = tmpStr.ToLower(); if (tmpStr == signature) { return true; } else { return false; } } private void Valid() { string echoStr = ""; if ((Server.UrlDecode(Page.Request.QueryString["echoStr"]) != null) && (Server.UrlDecode(Page.Request.QueryString["echoStr"]) != "")) { echoStr = Request.QueryString["echoStr"].ToString(); } if (CheckSignature()) { if (!string.IsNullOrEmpty(echoStr)) { Response.Write(echoStr); Response.End(); } } } /// /// 将xml文件转换成Hashtable /// /// /// public static Hashtable ParseXml(String xml) { XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(xml); XmlNode bodyNode = xmlDocument.ChildNodes[0]; Hashtable ht = new Hashtable(); if (bodyNode.ChildNodes.Count > 0) { foreach (XmlNode xn in bodyNode.ChildNodes) { ht.Add(xn.Name, xn.InnerText); } } return ht; } /// /// 返回信息结果(微信信息返回) /// /// private void ResponseMsg(string weixinXML) { try { //ErrorFollow.TraceWrite("微信接收", "", weixinXML); XmlDocument doc = new XmlDocument(); doc.LoadXml(weixinXML);//读取XML字符串 XmlElement rootElement = doc.DocumentElement; XmlNode MsgType = rootElement.SelectSingleNode("MsgType");//获取字符串中的消息类型 string resxml = ""; //var model = new //{ // ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText, // FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText, // CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText, // MsgType = MsgType.InnerText, // PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText, // MsgId = rootElement.SelectSingleNode("MsgId").InnerText //}; //resxml += "" + ConvertDateTimeInt(DateTime.Now) + "1<![CDATA[欢迎您来到云界健康馆!]]>1"; //Response.Write(resxml); //return; if (MsgType.InnerText == "text")//如果消息类型为文本消息 { var model = new { ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText, FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText, CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText, MsgType = MsgType.InnerText, Content = rootElement.SelectSingleNode("Content").InnerText, MsgId = rootElement.SelectSingleNode("MsgId").InnerText }; //resxml += "" + ConvertDateTimeInt(DateTime.Now) + ""; resxml += "" + ConvertDateTimeInt(DateTime.Now) + "1<![CDATA[欢迎您来到云界健康馆!]]>1"; if (!string.IsNullOrEmpty(model.Content))//如果接收到消息 { string xz = ""; //if (model.Content.Contains("摩羯"))// //{ // xz = "2014年由于受到木星与天王星良好相位的影响,摩羯座在各方面的表现都称心如意。但由于土星在前半年一直对冲摩羯座,摩羯们在心情方面可能会感到有些压抑,以致思想和行动力上都有些保守、退缩不前,有时还会特别固执..."; //} //else if (model.Content.Contains("金牛"))// //{ // xz = "2014年整体而言,财富有赚有赔、有高成长也有大支出,所幸在收支相抵后仍有盈余。不少人兴起换屋、买车、添购电脑、大型家电用品或奢侈品的冲动,花钱请客较平日慷慨大方,投资运明显欠佳,不利投机或风险过高的投资活动..."; //} //else if (model.Content.Contains("双子"))// //{ // xz = "双子座对事业充满了理想,也能投入在负责的事务之中,各个方面都能够运作得很顺利。对工作认真积极的态度,为双子们带来不错的绩效,而且实质的回收也很可观。若接受友人的建议和帮助..."; //} //else if (model.Content.Contains("巨蟹"))// //{ // xz = "巨蟹们在个人心态上会有些保守,但不顽固。而天王星的加入会使巨蟹座渴望尝试一些新的东西,但又害怕改变原有的生活模式。在今年,巨蟹打工族们在工作上的表现还算不错,是非常忙碌的一年。在7、8、9月,巨蟹们要特别小心,别出差错..."; //} //else if (model.Content.Contains("狮子"))// //{ // xz = "于狮子座自我的成就感不足,造成疲惫与受挫,对於原本的工作内容与职务,开始思考与反省。到了2014年下半年,狮子座的朋友的事业运有所好转,可能因为工作环境改变或者是更换跑道,从而找到最适合自己的方向..."; //} //else if (model.Content.Contains("处女"))// //{ // xz = "2014年情运对处女座来说变化多端的一年,要鼓起勇气去面对一连串的变化,似乎是冥冥中的缘分促成一些奇遇,如:工作上的场合或是跟新旧朋友的相聚,而使感情进展颇为快速,能够陶醉其中..."; //} //else if (model.Content.Contains("天秤"))// //{ // xz = "天秤座2014年恋爱运不是很平稳,由于恋爱宫位受到火星和天王星的干扰,可能有一些小风波,需要用心去面对来化解问题。有伴侣的天秤座,大约八九月的年中,或许会出现一个考验和危机,不过只要彼此都有诚心,问题应该不难解决..."; //} //else if (model.Content.Contains("天蝎"))// //{ // xz = "2014年天蝎座的运势起伏不断,历经周遭环境的动荡,然而天蝎座的适应力会适时发挥,展现出极强的生命力。后半年天蝎座的运势会开始好转,并逐渐旺盛起来。前后形成了强烈的对比,不过都同样都是以强韧生命力展现,贯穿了这一整年..."; //} //else if (model.Content.Contains("射手"))// //{ // xz = "2014年射手座的感情变动很大,由於你的恋爱宫位,受黯月(月孛)投射的影响,与月轨交点同时产生感应,因而产生层面广泛的宿命作用力。射手会发觉感情事件的际遇和演变,似乎是早已注定的..."; //} //else if (model.Content.Contains("水瓶") || model.Content.Contains("水平"))// //{ // xz = "2014年海王星将一直坐守于水瓶座,水瓶们在情绪上会显得有些敏感 、忧虑,行事之前想法过于周密,甚至对于感情也陷入一种暧昧不清的状态。 此外,今年的木星也一直在给予水瓶们正面的影响,虽然经经常会有不顺利的时候, 但最终达成目标..."; //} //else if (model.Content.Contains("双鱼"))// //{ // xz = "双鱼座2014年受爱神星的笼罩,感情运会非常好,特别是在五月之後,更有绝佳的好运!有伴侣的你,与对方的感情会越来越深,有机会踏上新的阶段。如果你们原本就非常不合适,有可能会换新的伴侣......"; //} //else if (model.Content.Contains("白羊"))// //{ // xz = "精力旺盛、办事能力强的白羊座,在2014年事业运较好。所谓种瓜得瓜,种豆得豆,一份耕耘,一份收获。辛苦的付出终会有回报,努力拼博的你,不仅各种业务都能应付自如,还能走出一片新的天空。对于工薪阶层,7月份将有机会获得提升..."; //} //else //{ // xz = "你好,欢迎来到汇众视界,我们是一家专门从事软硬件开发,系统集成的高新技术公司,当前这个服务号还处于测试阶段,更多功能近请期待"; // } //resxml += "0"; } //else//没有接收到消息 //{ // resxml += "0"; //} // ErrorFollow.TraceWrite("微信回复", "", resxml); Response.Write(resxml); } else if (MsgType.InnerText == "image")//如果消息类型为图片消息 { var model = new { ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText, FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText, CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText, MsgType = MsgType.InnerText, PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText, MsgId = rootElement.SelectSingleNode("MsgId").InnerText }; //resxml += "" + ConvertDateTimeInt(DateTime.Now) + "1<![CDATA[欢迎您来到汇众科技!]]>1"; resxml += "" + ConvertDateTimeInt(DateTime.Now) + "1<![CDATA[欢迎您来到云界健康馆!]]>1"; Response.Write(resxml); } else if (MsgType.InnerText == "event")//如果消息类型为图片消息 { var model = new { ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText, FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText, CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText, MsgType = MsgType.InnerText, EventKey = rootElement.SelectSingleNode("EventKey").InnerText,//用于自定义菜单 Event = rootElement.SelectSingleNode("Event").InnerText // MsgId = rootElement.SelectSingleNode("MsgId").InnerText }; // resxml = "" + ConvertDateTimeInt(DateTime.Now) + "1<![CDATA[欢迎您来到云界健康馆!]]>1"; // Response.Write(resxml); resxml = "" + ConvertDateTimeInt(DateTime.Now) + ""; //if (model.EventKey.ToLower() == "v1001_hb") //{ //} //else //{ string xz = "终于等到你!送个红包当见面礼!猛戳下方菜单栏-最新活动-点击“新人红包”即可领取现金红包奥~持续关注乾云健康生活馆,享更多优惠!"; resxml += "0"; //} Response.Write(resxml); } else//如果是其余的消息类型 { var model = new { ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText, FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText, CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText, }; resxml += "" + ConvertDateTimeInt(DateTime.Now) + "1<![CDATA[欢迎您来到云界健康馆!]]>1"; //resxml += "" + ConvertDateTimeInt(DateTime.Now) + "0"; Response.Write(resxml); } } catch (Exception ex) { throw ex; } Response.End(); } /// /// unix时间转换为datetime /// /// /// private DateTime UnixTimeToTime(string timeStamp) { DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); long lTime = long.Parse(timeStamp + "0000000"); TimeSpan toNow = new TimeSpan(lTime); return dtStart.Add(toNow); } /// /// datetime转换为unixtime /// /// /// private int ConvertDateTimeInt(System.DateTime time) { System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); return (int)(time - startTime).TotalSeconds; } /// /// 写日志(用于跟踪) /// private void WriteLog(string strMemo) { string filename = Server.MapPath("/logs/log.txt"); if (!Directory.Exists(Server.MapPath("//logs//"))) Directory.CreateDirectory("//logs//"); StreamWriter sr = null; try { if (!File.Exists(filename)) { sr = File.CreateText(filename); } else { sr = File.AppendText(filename); } sr.WriteLine(strMemo); } catch { } finally { if (sr != null) sr.Close(); } } /// /// 获取自定义菜单token /// /// public static string GetAccessToken() { WebClient webClient = new WebClient(); Byte[] bytes = webClient.DownloadData(string.Format("{0}&appid={1}&secret={2}", appUrl, appId, appSecret)); string result = Encoding.GetEncoding("utf-8").GetString(bytes); //JObject jObj = JObject.Parse(result); //JToken token = jObj["access_token"]; //return token.ToString().Substring(1, token.ToString().Length - 2); string[] temp = result.Split(','); string[] tp = temp[0].Split(':'); return tp[1].ToString().Replace('"', ' ').Trim().ToString(); } /// /// 创建自定义菜单 /// private void CreateWxMenu() { string weixin1 = ""; weixin1 += "{\n"; weixin1 += "\"button\":[\n"; weixin1 += "{\n"; // weixin1 += "\"type\":\"click\",\n"; //第一个菜单 weixin1 += "\"name\":\"汇众科技\",\n"; weixin1 += "\"sub_button\":[\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"公司介绍\",\n"; weixin1 += "\"key\":\"V1001_About\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"组织结构\",\n"; weixin1 += "\"key\":\"V1001_Dept\"\n"; weixin1 += "}]\n"; weixin1 += "},\n"; //第二个菜单 weixin1 += "{\n"; //weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"产品目录\",\n"; weixin1 += "\"sub_button\":[\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"智慧医疗\",\n"; weixin1 += "\"key\":\"V1002_Hospital\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"教育信息化\",\n"; weixin1 += "\"key\":\"V1002_School\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"汇众视界\",\n"; weixin1 += "\"key\":\"V1002_View\"\n"; weixin1 += "}]\n"; weixin1 += "},\n"; //第三个菜单 weixin1 += "{\n"; weixin1 += "\"name\":\"合作加盟\",\n"; weixin1 += "\"sub_button\":[\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"人才招聘\",\n"; weixin1 += "\"key\":\"V1003_Rczp\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"合作共赢\",\n"; weixin1 += "\"key\":\"V1003_Hzgy\"\n"; weixin1 += "}]\n"; weixin1 += "}\n"; weixin1 += "]\n"; weixin1 += "}\n"; PostMenuData(postUrl + GetAccessToken(), weixin1); } private void CreateWxMenu2() { string weixin1 = ""; weixin1 += "{\n"; weixin1 += "\"button\":[\n"; weixin1 += "{\n"; // weixin1 += "\"type\":\"click\",\n"; //第一个菜单 weixin1 += "\"name\":\"最新活动\",\n"; weixin1 += "\"sub_button\":[\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"view\",\n"; weixin1 += "\"name\":\"新人红包\",\n"; weixin1 += "\"url\":\"https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx2f5849d8aa573da3&redirect_uri=http%3a%2f%2fwww.mntkj.com%2foauth2.aspx&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"view\",\n"; weixin1 += "\"name\":\"热卖商品\",\n"; weixin1 += "\"url\":\"http://weidian.com/?userid=318755832&wfr=wechatpo_keywords_shop\"\n"; weixin1 += "}]\n"; weixin1 += "},\n"; //第二个菜单 weixin1 += "{\n"; //weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"云界儿童\",\n"; weixin1 += "\"sub_button\":[\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"view\",\n"; weixin1 += "\"name\":\"云界贝比亲\",\n"; weixin1 += "\"url\":\"http://weidian.com/item.html?itemID=1336709846\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"view\",\n"; weixin1 += "\"name\":\"云界儿童宝\",\n"; weixin1 += "\"url\":\"http://weidian.com/item.html?itemID=1312408696\"\n"; weixin1 += "}]\n"; weixin1 += "},\n"; //第三个菜单 weixin1 += "{\n"; //weixin1 += "\"type\":\"click\",\n"; weixin1 += "\"name\":\"云界护理\",\n"; weixin1 += "\"sub_button\":[\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"view\",\n"; weixin1 += "\"name\":\"云界护爱宝\",\n"; weixin1 += "\"url\":\"http://weidian.com/item.html?itemID=1338347234\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"view\",\n"; weixin1 += "\"name\":\"云界快好\",\n"; weixin1 += "\"url\":\"http://weidian.com/item.html?itemID=1338342667\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"view\",\n"; weixin1 += "\"name\":\"云界旅行宝\",\n"; weixin1 += "\"url\":\"http://weidian.com/item.html?itemID=1338359027\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"view\",\n"; weixin1 += "\"name\":\"云界内衣净\",\n"; weixin1 += "\"url\":\"http://weidian.com/item.html?itemID=1338368589\"\n"; weixin1 += "},\n"; weixin1 += "{\n"; weixin1 += "\"type\":\"view\",\n"; weixin1 += "\"name\":\"云界抑菌剂\",\n"; weixin1 += "\"url\":\"http://weidian.com/item.html?itemID=1338355466\"\n"; weixin1 += "}]\n"; weixin1 += "}\n"; weixin1 += "]\n"; weixin1 += "}\n"; PostMenuData(postUrl + GetAccessToken(), weixin1); } /// /// /// /// /// private void PostMenuData(string url, 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); // 准备请求... try { // 设置参数 request = WebRequest.Create(url) 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(); //发送请求并获取相应回应数据 response = request.GetResponse() as HttpWebResponse; //直到request.GetResponse()程序才开始向目标网页发送Post请求 instream = response.GetResponseStream(); sr = new StreamReader(instream, encoding); //返回结果网页(html)代码 string content = sr.ReadToEnd(); string err = string.Empty; // return content; } catch (Exception ex) { string err = ex.Message; //return string.Empty; } } protected void Button1_Click(object sender, EventArgs e) { CreateWxMenu(); } /// /// 删除自定义菜单 /// /// private void DelMenu(string url) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } Encoding encoding = Encoding.UTF8; HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.Method = "GET"; HttpWebResponse response = request.GetResponse() as HttpWebResponse; Stream instream = response.GetResponseStream(); StreamReader sr = new StreamReader(instream, encoding); string content = sr.ReadToEnd(); } protected void Button2_Click(object sender, EventArgs e) { DelMenu(postDelUrl + GetAccessToken()); } protected void Button1_Click1(object sender, EventArgs e) { CreateWxMenu2(); } protected void Button2_Click1(object sender, EventArgs e) { DelMenu(postDelUrl + GetAccessToken()); } } }