<%@ WebHandler Language="C#" Class="wx_Handler_6" %> using System; using System.Web; using System.IO; using System.Xml; using eMIS.Data; using System.Data; using Tencent; /* * 本页面用于验证回调URL * 企业开启回调模式时,企业号会向验证URL发送一个get请求,此页面解密echostr原文, * 并将原文当作Get请求,返回给公众平台 * * cjx@2015/10/27 * * 本例,演示用户进入、退出企业号 * */ public class wx_Handler_6 : IHttpHandler { public void ProcessRequest (HttpContext context) { Weixin wx = new Weixin(context); string logFile = Path.Combine(context.Request.PhysicalApplicationPath, @"log.txt"); if (wx.IsVerifyURL) { wx.VerifyURL(); } else { wx.Debug = false; Tencent.MessageObject msg = wx.DecryptMsg(); if (wx.Debug) { //System.IO.File.AppendAllText(logFile, // string.Format("{0} {1} \r\n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msg.Msg)); } wx.Messager.GetAccesstoken(); eDbManager manager = new eDbManager(eMIS.Data.WebConfigManager.DefaultDb); eDbOperator dbo = manager.CreateDbOperator(); string sql=""; if (msg is EventMessage) {//上报用户关注事件 //Tencent.EventMessage emsg = (SubscribeEventMessage)msg; //dbo.ExecuteNonQuery("update COM_YHB set Weixin=?,WeixinJoinDate=getdate() where login=?", // (msg is SubscribeEventMessage) ? "1" : Convert.DBNull, msg.FromUserName); dbo.ExecuteNonQuery("update COM_YHB set Weixin=?,WeixinJoinDate=getdate() where login=?", "1", msg.FromUserName); WeiXinWebCommon.SetCookieUserId(context, msg.FromUserName); //生成头像图片 string access_token = Tencent.WeixinStatic.AccessToken.Token; WxInfo.Avatar avatar = new WxInfo.Avatar(); if (!avatar.Get(access_token, msg.FromUserName, "G:\\pmis\\App_WX\\Avatar")) { dbo.ExecuteNonQuery("insert into XT_ERRORLOG (id,funCode,xml) values (NEXT VALUE FOR seq_id,'10',?)", avatar.ServerReturnJson); } //问候 object obj = dbo.ExecuteScalar("select xingming from com_yhb where login=?", msg.FromUserName); if (!Convert.IsDBNull(obj) && obj != null) { string name = System.Text.RegularExpressions.Regex.Replace(obj.ToString(), @"\d", ""); wx.Messager.SendTextToUser(string.Format("Hi, {0}!", name, msg.FromUserName), 0, msg.FromUserName); } else { wx.Messager.SendTextToUser(string.Format("Hi {0}, Why I can't find your name?", msg.FromUserName), 0, msg.FromUserName); } //关注后推送新闻 sql = " insert into XT_WX_Outbox(SENDTO,SENDMode,AgentID,WXCONTENT,msgtype,msgtitle,msgUrl,picurl) " + " values(?,0,?,?,'news',?,?,?)"; //外勤签到 dbo.ExecuteNonQuery(sql, msg.FromUserName, 5, "外勤签到", "外勤签到", "", "http://here.sac-china.com/app_wx/images/title_wqqd.png"); //工作任务 dbo.ExecuteNonQuery(sql, msg.FromUserName, 1, "工作任务", "工作任务", "", "http://here.sac-china.com/app_wx/images/title_wddb.png"); //公司新闻 dbo.ExecuteNonQuery(sql, msg.FromUserName, 3, "公司新闻", "工作任务", "", "http://here.sac-china.com/app_wx/images/title_gsxw.png"); } else { switch (msg.MsgType) { case MsgConstClass.MsgTypeClass.C_TEXT: sql = "insert into XT_WX_INBOX(FromUserName,MsgType,WXContent,MsgId,AgentID)" + " values(?,?,?,?,?)"; // dbo.ExecuteNonQuery(sql, msg.FromUserName, msg.MsgType, (msg as TextMessage).GetContent(500), msg.MsgId, msg.AgentID); DataTable t = dbo.ExecuteProcedureTable("p_wx_SaveTextMSG", msg.FromUserName, (msg as TextMessage).GetContent(500), msg.MsgId, msg.AgentID); if (t.Rows.Count > 0) //有返回错误信息 { wx.Messager.SendTextToUser(Convert.ToString( t.Rows[0][0]), 0, msg.FromUserName); } //wx.Messager.SendTextToUser("hi", 0, msg.FromUserName); break; case MsgConstClass.MsgTypeClass.C_IMAGE: sql = "insert into XT_WX_INBOX(FromUserName,MsgType,PicUrl,MediaId,MsgId,AgentID)" + " values(?,?,?,?,?,?)"; //dbo.ExecuteNonQuery(sql, msg.FromUserName, msg.MsgType, (msg as ImageMessage).PicUrl,(msg as ImageMessage).MediaId, msg.MsgId, msg.AgentID); DataTable t2 = dbo.ExecuteProcedureTable("p_wx_SaveImgMSG", msg.FromUserName, (msg as ImageMessage).PicUrl,(msg as ImageMessage).MediaId, msg.MsgId, msg.AgentID); if (t2.Rows.Count > 0) //有返回错误信息 { wx.Messager.SendTextToUser(Convert.ToString( t2.Rows[0][0]), 0, msg.FromUserName); } break; case MsgConstClass.MsgTypeClass.C_VOICE: sql = "insert into XT_WX_INBOX(FromUserName,MsgType,voiceFormat,MediaId,MsgId,AgentID)" + " values(?,?,?,?,?,?)"; dbo.ExecuteNonQuery(sql, msg.FromUserName, msg.MsgType, (msg as VoiceMessage).Format, (msg as MediaMessageObject).MediaId, msg.MsgId, msg.AgentID); break; case MsgConstClass.MsgTypeClass.C_VIDEO: case MsgConstClass.MsgTypeClass.C_SHORTVIDEO: sql = "insert into XT_WX_INBOX(FromUserName,MsgType,ThumbMediaId,MediaId,MsgId,AgentID)" + " values(?,?,?,?,?,?)"; dbo.ExecuteNonQuery(sql, msg.FromUserName, msg.MsgType, (msg as VideoMessage).ThumbMediaId, (msg as MediaMessageObject).MediaId, msg.MsgId, msg.AgentID); break; } } } } public bool IsReusable { get { return false; } } }