Exemplo n.º 1
0
        public string Analysis(HttpContext context, string jsonDate, string appid)
        {
            string resxml = "";

            try
            {
                JobLogs.Writer(log_Folder, "------------------- 分割线 -------------------");
                XmlDocument doc = new XmlDocument();
                doc.XmlResolver = null;
                doc.LoadXml(jsonDate);//读取xml字符串
                XmlElement root = doc.DocumentElement;

                ExmlMsg xmlMsg      = GetExmlMsg(root);
                string  messageType = xmlMsg.MsgType;//获取收到的消息类型。文本(text),图片(image),语音等。

                string openid = xmlMsg.FromUserName;
                switch (messageType)
                {
                //当消息为文本时
                case "text":
                    string con = xmlMsg.Content.Trim();

                    //自动化测试的专用测试公众号
                    if (con == "TESTCOMPONENT_MSG_TYPE_TEXT")
                    {
                        resxml = ReplyWX.text_xml("TESTCOMPONENT_MSG_TYPE_TEXT_callback", openid, xmlMsg.ToUserName, xmlMsg.CreateTime);
                    }
                    else
                    {
                        #region **

                        string[] Contents = con.Split(':');
                        if (Contents.Length == 2 && Contents[0] == "QUERY_AUTH_CODE")
                        {
                            string auth = Contents[0];
                            string code = Contents[1];

                            string Appsecret = "";
                            string Ticket    = "";
                            string Token     = "";
                            string Code      = "";

                            GetToken(appid, ref Appsecret, ref Ticket, ref Token, ref Code);    //获取Token

                            JobLogs.Writer(log_Folder, "Token111111111111" + Token);
                            if (Token == "")
                            {
                                appid = "wx1939f9ee65384f14";
                                GetToken(appid, ref Appsecret, ref Ticket, ref Token, ref Code);
                            }
                            if (Token != "")
                            {
                                JavaScriptSerializer        serializer = new JavaScriptSerializer();
                                Dictionary <string, object> csInfo     = new Dictionary <string, object>();
                                csInfo.Add("component_appid", appid);    //
                                csInfo.Add("authorization_code", code);  //
                                string menuInfo = serializer.Serialize(csInfo);
                                string postUrl  = "https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=" + Token;
                                string val      = TemplateMessage.PostWebRequest(postUrl, menuInfo);

                                JobLogs.Writer(log_Folder, "返回结果:" + val);
                                Dictionary <string, object> dToken = (Dictionary <string, object>)serializer.DeserializeObject(val);
                                if (dToken != null && dToken.Count == 1)
                                {
                                    Dictionary <string, object> dInfo = dToken["authorization_info"] as Dictionary <string, object>;
                                    string access_token = "";
                                    object value;
                                    if (dInfo.TryGetValue("authorizer_access_token", out value))
                                    {
                                        access_token = value.ToString();
                                        JobLogs.Writer(log_Folder, "access_token:" + access_token);
                                        SendText(access_token, openid, code + "_from_api");
                                    }
                                }
                            }
                        }
                        #endregion
                    }

                    break;

                case "event":
                    if (!string.IsNullOrEmpty(xmlMsg.EventName) && (xmlMsg.EventName == "subscribe" || xmlMsg.EventName == "SCAN"))
                    {
                        break;
                        JobLogs.Writer("event", jsonDate);    //写入日志
                        Hashtable ht = new Hashtable();
                        ht["ToUserName"]   = xmlMsg.ToUserName;
                        ht["FromUserName"] = xmlMsg.FromUserName;
                        ht["CreateTime"]   = xmlMsg.CreateTime;
                        ht["MsgType"]      = xmlMsg.MsgType;
                        ht["Event"]        = xmlMsg.EventName;
                        ht["EventKey"]     = xmlMsg.EventKey;
                        bool zizhu = (string.IsNullOrEmpty(xmlMsg.EventKey) || xmlMsg.EventKey.IndexOf("last_trade_no") >= 0);    //是否为自主关注
                        ht["Independent"] = zizhu;
                        ht["Url"]         = context.Request.Url.ToString();
                        DataFactory.SqlDataBase().InsertByHashtable("Wx_CallbackLog", ht);

                        string AdminHotelId = ApplicationHelper.GetHotelTweetsInfo(xmlMsg.ToUserName).Rows[0]["AdminHotelid"].ToString();
                        set_user_tag(AdminHotelId, openid);    //设置为星标用户

                        if (zizhu)
                        {
                            //if (xmlMsg.ToUserName.ToString() == "gh_4305dc154099")
                            //{
                            //    //关注智订云推送信息
                            //    resxml = ReplyWX.ZDY_Reply(xmlMsg.ToUserName, xmlMsg.FromUserName, xmlMsg.CreateTime);
                            //}
                            //else
                            //{
                            //    resxml = ReplyWX.AutonomyFollow(xmlMsg.ToUserName, xmlMsg.FromUserName, xmlMsg.CreateTime);//自主关注
                            //}
                            break;
                        }

                        string[] keys = xmlMsg.EventKey.Split('@');
                        if (keys.Length < 2)
                        {
                            break;
                        }

                        string key_val = keys[1];
                        switch (xmlMsg.EventName)
                        {
                        case "subscribe":        //用户未关注时,进行关注后的事件推送
                            switch (key_val)
                            {
                            case "3":              //扫描二维码回复事件 3
                                string userid = keys[2];
                                ReplyWX.ScanUserCode(xmlMsg.FromUserName, userid, "扫推广码[第三方]");
                                break;

                            case "4":               //扫描酒店/门店二维码回复事件
                                ReplyWX.ScanHotelCode(xmlMsg.ToUserName, keys[2], xmlMsg.FromUserName, xmlMsg.CreateTime);
                                break;

                            default:
                                break;
                            }
                            break;

                        case "SCAN":        //用户已关注时的事件推送
                            switch (key_val)
                            {
                            case "3":              //扫描二维码回复事件 3
                                string userid = keys[2];
                                ReplyWX.ScanUserCode(xmlMsg.FromUserName, userid, "扫推广码[第三方]");
                                break;

                            case "4":               //扫描酒店/门店二维码回复事件
                                ReplyWX.ScanHotelCode(xmlMsg.ToUserName, keys[2], xmlMsg.FromUserName, xmlMsg.CreateTime);
                                break;

                            default:
                                break;
                            }
                            break;

                        case "scancode_push":        //用户已关注时的事件推送
                            switch (key_val)
                            {
                            case "3":              //扫描二维码回复事件 3
                                string userid = keys[2];
                                ReplyWX.ScanUserCode(xmlMsg.FromUserName, userid, "扫推广码[第三方]");
                                break;

                            case "4":               //扫描酒店/门店二维码回复事件
                                ReplyWX.ScanHotelCode(xmlMsg.ToUserName, keys[2], xmlMsg.FromUserName, xmlMsg.CreateTime);
                                break;

                            default:
                                break;
                            }
                            break;

                        default:
                            break;
                        }
                    }
                    else if (xmlMsg.EventName == "unsubscribe")    //取消订阅
                    {
                        Hashtable ht = new Hashtable();
                        ht["ToUserName"]   = xmlMsg.ToUserName;
                        ht["FromUserName"] = xmlMsg.FromUserName;
                        ht["CreateTime"]   = xmlMsg.CreateTime;
                        ht["MsgType"]      = xmlMsg.MsgType;
                        ht["Event"]        = xmlMsg.EventName;
                        ht["EventKey"]     = xmlMsg.EventKey;
                        ht["Independent"]  = "0";
                        ht["Url"]          = context.Request.Url.ToString();
                        DataFactory.SqlDataBase().InsertByHashtable("Wx_CallbackLog", ht);
                    }
                    else if (xmlMsg.EventName == "CLICK")    //点击菜单拉取消息时的事件推送
                    {
                        string click_key = xmlMsg.EventKey;
                        if (click_key == "wgz")    //默认菜单 点击是重新获取一下 菜单权限
                        {
                            JobLogs.Writer(log_Folder, "------------------默认菜单 点击是重新获取一下 菜单权限-------------------:");
                            string AdminHotelId = ApplicationHelper.GetHotelTweetsInfo(xmlMsg.ToUserName).Rows[0]["AdminHotelid"].ToString();
                            set_user_tag(AdminHotelId, openid);

                            //string yd_yrl = string.Format("http://www.zidinn.com/Reservation/HotelList.aspx?AdminHotelid={0}", AdminHotelId);
                            //resxml = ReplyWX.text_xml("<a href='" + yd_yrl + "'>酒店预订</a>", openid, xmlMsg.ToUserName, xmlMsg.CreateTime);
                        }
                    }
                    break;

                case "image":    //2 回复图片消息
                    break;

                case "voice":    //回复语音消息
                    break;

                case "vedio":    //回复视频消息
                    break;

                case "music":    //回复音乐消息
                    break;

                case "news":    //回复图文消息
                    break;

                case "location":    //上报地理位置事件
                    break;

                case "link":
                    break;

                default:
                    break;
                }
            }
            catch (Exception ex)
            {
                resxml = ex.Message;
            }
            return(resxml);
        }
Exemplo n.º 2
0
        private void get_union(HttpContext context)
        {
            string AdminHotelId = context.Request["AdminHotelId"].ToString();
            string HotelId      = context.Request["HotelId"].ToString();
            string openid       = context.Request["openid"].ToString();

            #region ** 获取 unionid **

            string data = get_data(AdminHotelId, openid);

            JavaScriptSerializer        serializer = new JavaScriptSerializer();
            Dictionary <string, object> userInfo   = (Dictionary <string, object>)serializer.DeserializeObject(data);

            object value   = null;
            string errcode = "";
            if (userInfo.TryGetValue("errcode", out value))
            {
                errcode = value.ToString();
            }
            if (errcode == "40001")
            {
                Hashtable htToken = new Hashtable();
                htToken["Access_Token"] = "";
                DataFactory.SqlDataBase().UpdateByHashtable("WX_Access_Token", "AdminHotelId", AdminHotelId, htToken);

                Dictionary <string, object> csInfo = new Dictionary <string, object>();
                csInfo.Add("AdminHotelId", AdminHotelId); //
                csInfo.Add("HotelId", HotelId);           //
                string menuInfo = serializer.Serialize(csInfo);
                string postUrl  = "http://zidinn.com/API/wxtoken.ashx?action=set_token";
                TemplateMessage.PostWebRequest(postUrl, menuInfo);
                data     = get_data(AdminHotelId, openid);
                userInfo = (Dictionary <string, object>)serializer.DeserializeObject(data);
            }

            string subscribe = "";

            if (userInfo.TryGetValue("subscribe", out value))
            {
                subscribe = value.ToString();
            }

            if (subscribe == "" || subscribe == "0")//未关注
            {
                return;
            }

            string subscribe_time = "";  //用户关注时间
            string qr_scene_str   = "0"; //二维码参数

            if (userInfo.TryGetValue("subscribe_time", out value))
            {
                subscribe_time = value.ToString();
            }
            if (userInfo.TryGetValue("qr_scene_str", out value))
            {
                qr_scene_str = value.ToString();
            }

            Hashtable ht = new Hashtable();
            ht["ToUserName"]   = ApplicationHelper.GetWxPayConfig(AdminHotelId, "Original_ID", Convert.ToInt32(HotelId));
            ht["FromUserName"] = openid;
            ht["CreateTime"]   = subscribe_time;
            ht["MsgType"]      = "event";
            ht["Event"]        = "SCAN";
            ht["EventKey"]     = qr_scene_str;
            bool zizhu = (string.IsNullOrEmpty(qr_scene_str) || qr_scene_str.IndexOf("last_trade_no") >= 0);//是否为自主关注
            ht["Independent"] = zizhu;
            ht["Url"]         = context.Request.Url.ToString();
            DataFactory.SqlDataBase().InsertByHashtable("Wx_CallbackLog", ht);

            string[] keys = qr_scene_str.Split('@');
            if (keys.Length < 2)
            {
                return;
            }
            string key_val = keys[1];
            switch (key_val)
            {
            case "3":      //扫描二维码回复事件 3
                string userid = keys[2];
                ReplyWX.ScanUserCode(openid, userid, "扫推广码[回调]");
                break;

            default:
                break;
            }
            #endregion
        }