/// <summary> /// 微信发送文本信息 /// </summary> /// <param name="wxRequestXMLModel">消息发送方微信号</param> /// <param name="ToUserName">消息接收方微信号,一般为公众平台账号微信号</param> /// <param name="Content">消息内容</param> private string sendText(WXRequest wxRequest) { string Result = ""; string FromUserName = wxRequest.FromUserName; string ToUserName = wxRequest.ToUserName; string Content = ""; //创建用户对象 //非员工信息 //if () //{ //if ("ZC")//注册校验,自己可以写自己的用户注册功能 //{ //} if (wxRequest.MsgType.ToLower() == "event") { //EnumEvent ee=(EnumEvent)Enum.Parse(typeof(EnumEvent), wxRequest.eventModel.Event); if (wxRequest.eventModel.Event == EnumMapHelper.GetStringFromEnum(EnumEvent.subscribe)) { Result = "感谢新的关注!"; } else { Result = wxRequest.eventModel.EventKey; } } else if (wxRequest.MsgType.ToLower() == "text") { //EnumEvent ee=(EnumEvent)Enum.Parse(typeof(EnumEvent), wxRequest.eventModel.Event); Content = wxRequest.textModel.Content; } //else //{ // Result = "您好,感谢查看XX微信平台!您当前状态是“未注册”。注册方法是:发送:ZC#张三"; //} //} //else//公司员工 //{ // //属于员工的自己内部业务 //} //创建属性文件 WXResponse wxResponse = new WXResponse("text"); Result = (Result == "" ? "内容[" + Content + "]" : Result); //FromUserName = "******";//模拟发送人,不支持 wxResponse.ToUserName = FromUserName; wxResponse.FromUserName = ToUserName; wxResponse.textModel.Content = Result; WXTool.WriteLog("三、微信平台发送信息sendStr=" + Result); return(wxResponse.ResponseXML()); }
/// <summary> /// 验证微信签名 /// </summary> /// * 将token、timestamp、nonce三个参数进行字典序排序 /// * 将三个参数字符串拼接成一个字符串进行sha1加密 /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。 /// <returns></returns> private bool CheckSignature() { string signature = Request.QueryString["signature"] as String; string timestamp = Request.QueryString["timestamp"] as String; string nonce = Request.QueryString["nonce"] as String; string echostr = Request.QueryString["echostr"] as String; string[] ArrTmp = { Token, timestamp, nonce }; Array.Sort(ArrTmp); //字典排序 string tmpStr = string.Join("", ArrTmp); tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1"); tmpStr = tmpStr.ToLower(); WXTool.WriteLog("一、微信签名认证:signature=" + signature + ";Token=" + Token + ";timestamp=" + timestamp + ";nonce=" + nonce + ";tmpStr=" + tmpStr); if (tmpStr == signature) { return(true); } else { return(false); } }
const string Token = "CucentOA"; //token protected void Page_Load(object sender, EventArgs e) { string postStr = ""; Response.Write("ssata"); return; //Test();//Debug模式使用,用来模拟微信发送的数据 Valid();//校验签名 if (Request.HttpMethod.ToLower() == "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)) { WXTool.WriteLog("二、微信平台接收信息postStr=" + postStr); ResponseMsg(postStr); } } }
/// <summary> /// 发送XML信息 /// </summary> public string ResponseXML() { StringBuilder result = new StringBuilder(); funcFlag = (funcFlag == null || funcFlag.ToString() == "" ? 0 : funcFlag); result.Append("<xml><ToUserName><![CDATA[" + ToUserName + "]]></ToUserName>"); result.Append("<FromUserName><![CDATA[" + FromUserName + "]]></FromUserName>"); result.Append("<CreateTime>" + WXTool.ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType>"); result.Append("<MsgType><![CDATA[" + this.msgType + "]]></MsgType>"); switch (this.msgType) { case "text": result.Append("<Content><![CDATA[" + textModel.Content + "]]></Content>"); /*<xml> * <ToUserName><![CDATA[toUser]]></ToUserName> * <FromUserName><![CDATA[fromUser]]></FromUserName> * <CreateTime>12345678</CreateTime> * <MsgType><![CDATA[text]]></MsgType> * <Content><![CDATA[content]]></Content> * <FuncFlag>0</FuncFlag> * </xml>*/ break; case "music": result.Append("<Music><Title><![CDATA[" + musicModel.Title + "]]></Title>"); result.Append("<Description><![CDATA[" + musicModel.Description + "]]></Description>"); result.Append("<MusicUrl><![CDATA[" + musicModel.MusicUrl + "]]></MusicUrl>"); result.Append("<HQMusicUrl><![CDATA[" + musicModel.HQMusicUrl + "]]></HQMusicUrl></Music>"); /*<xml> * <ToUserName><![CDATA[toUser]]></ToUserName> * <FromUserName><![CDATA[fromUser]]></FromUserName> * <CreateTime>12345678</CreateTime> * <MsgType><![CDATA[music]]></MsgType> * <Music> * <Title><![CDATA[TITLE]]></Title> * <Description><![CDATA[DESCRIPTION]]></Description> * <MusicUrl><![CDATA[MUSIC_Url]]></MusicUrl> * <HQMusicUrl><![CDATA[HQ_MUSIC_Url]]></HQMusicUrl> * </Music> * <FuncFlag>0</FuncFlag> * </xml>*/ break; case "news": result.Append("<ArticleCount>" + newsModel.ArticleCount + "</ArticleCount><Articles>"); foreach (NewsArticlesWXResponse_Model item in newsModel.Articles) { result.Append("<item><Title><![CDATA[" + item.Title + "]]></Title><Description><![CDATA[" + item.Description + "]]></Description>"); result.Append("<PicUrl><![CDATA[" + item.PicUrl + "]]></PicUrl><Url><![CDATA[" + item.Url + "]]></Url></item>"); } result.Append("</Articles>"); /*<xml> * <ToUserName><![CDATA[toUser]]></ToUserName> * <FromUserName><![CDATA[fromUser]]></FromUserName> * <CreateTime>12345678</CreateTime> * <MsgType><![CDATA[news]]></MsgType> * <ArticleCount>2</ArticleCount> * <Articles> * <item> * <Title><![CDATA[title1]]></Title> * <Description><![CDATA[description1]]></Description> * <PicUrl><![CDATA[picurl]]></PicUrl> * <Url><![CDATA[url]]></Url> * </item> * <item> * <Title><![CDATA[title]]></Title> * <Description><![CDATA[description]]></Description> * <PicUrl><![CDATA[picurl]]></PicUrl> * <Url><![CDATA[url]]></Url> * </item> * </Articles> * <FuncFlag>1</FuncFlag> * </xml> */ break; } result.Append("</Articles><FuncFlag>" + funcFlag + "</FuncFlag></xml>"); return(result.ToString()); }