Exemple #1
0
        public static string GetSignature(string param, HttpRequestBase request)
        {
            param = param + ",appId,timestamp,nonce";

            Dictionary <string, string> dict = new Dictionary <string, string>();
            var _params = param.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

            foreach (var a in _params)
            {
                if (a == "url")
                {
                    dict.Add(a, request[a].Split(',')[0]);
                }
                else if (a == "appId" && request[a] == null)
                {
                    string routeDataAppid = request.RequestContext.RouteData.Values["appid"].ToString();
                    dict.Add(a, routeDataAppid);
                }
                else
                {
                    dict.Add(a, request[a]);
                }
            }
            string appid = dict["appId"];
            //string appSignKey = CommonService.GetSysConfig(appid, "iMih0xabKQdw8CBbkTM5Ley84WhN4oL6u5lbDui6G9tUlQo7fJE1CcktZ2UiETnU1FZ0R3ZvzYLKOzmaziyms5QuMia8czkEwFv2TQUg4G45Ha0aHPEHXnhjVqUPnKPJ");
            string appSignKey = WeChatCommonService.GetWeChatConfig(Convert.ToInt32(appid))?.AppSignKey;

            dict.Add("appSignKey", appSignKey);
            return(ApiCommon.GetSignature(dict, request.Params));
        }
Exemple #2
0
        /// <summary>
        /// 微信关注数据追加
        /// </summary>
        private static void InsertWechatFollowReport()
        {
            var objConfig = WeChatCommonService.GetWeChatConfig(0);

            string strToken = AccessTokenContainer.TryGetToken(objConfig.WeixinCorpId, objConfig.WeixinCorpSecret);

            var departmentList = MailListApi.GetDepartmentMemberInfo(strToken, 1, 1, 0);

            //关注用户列表
            var followerList = departmentList.userlist.Where(a => a.status == 1).ToList();

            //为关注用户列表
            var unFollowerList = departmentList.userlist.Where(a => a.status == 4).ToList();

            DateTime dtNow = DateTime.Now;

            WechatFollowReport wechatFollowReport = new WechatFollowReport()
            {
                StatisticsDate = Convert.ToDateTime(dtNow.AddDays(-1).ToString("yyyy-MM-dd")),
                FollowCount    = followerList.Count,
                UnFollowCount  = unFollowerList.Count,
                CreatedDate    = dtNow
            };

            BaseService <WechatFollowReport> ser = new BaseService <WechatFollowReport>();

            ser.Repository.Insert(wechatFollowReport);
        }
        public ActionResult Get(string msg_signature = "", string timestamp = "", string nonce = "", string echostr = "")
        {
            try
            {
                var iAppID    = int.Parse(Request["AppID"] ?? "0");
                var objConfig = WeChatCommonService.GetWeChatConfig(iAppID);
                //return Content(echostr); //返回随机字符串则表示验证通过
                var verifyUrl = Signature.VerifyURL(objConfig.WeixinToken, objConfig.WeixinEncodingAESKey, objConfig.WeixinCorpId, msg_signature, timestamp, nonce,
                                                    echostr);
                var logstr = string.Format("-objConfig.WeixinToken = {0}\n-objConfig.WeixinEncodingAESKey={1}\n-msg_signature={2}\n-timestamp={3}\n-nonce={4}\n-echostr={5}\n-objConfig.WeixinCorpId={6}", objConfig.WeixinToken, objConfig.WeixinEncodingAESKey, msg_signature, timestamp, nonce, echostr, objConfig.WeixinCorpId);
                log.Debug(logstr);
                if (verifyUrl != null)
                {
                    log.Debug(verifyUrl);
                    return(Content(verifyUrl)); //返回解密后的随机字符串则表示验证通过
                }
                else
                {
                    log.Debug("verifyUrl is null");
                    return(Content("如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。"));
                }
            }
            catch (Exception ex)
            {
                log.Error(ex, Request.Url.ToString());
            }

            return(Content(""));
        }
        /// <summary>
        /// Event事件类型请求之CLICK
        /// </summary>
        public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)
        {
            log.Debug("Entering Event事件类型请求之CLICK - " + requestMessage.EventKey);

            string errorMessage;

            if (!SmartphoneMenuPermissionManager.PermissionCheck(requestMessage.EventKey, requestMessage.FromUserName, requestMessage.AgentID, out errorMessage))
            {
                return(NoPermissionResponse(errorMessage));
            }

            // 记录用户行为
            _wr.CallUserBehavior(requestMessage.EventKey, requestMessage.FromUserName, requestMessage.AgentID.ToString(CultureInfo.InvariantCulture), "", "", 4);
            var objConfig = WeChatCommonService.GetWeChatConfig(requestMessage.AgentID);

            switch (requestMessage.AgentID)
            {
            default:
            {
                LogManager.GetLogger(this.GetType()).Debug("Entering default2");

                var menu = Infrastructure.Web.Domain.Service.CommonService.lstCategory.FirstOrDefault(a => a.CategoryCode == requestMessage.EventKey);
                if (menu == null)
                {
                    return(null);
                }

                LogManager.GetLogger(this.GetType()).Debug("menu is ready");

                AppMenuView appMenu = new AppMenuView();
                appMenu.ButtonReturnType = JsonHelper.FromJson <ButtonReturnType>(menu.Function);
                if (appMenu == null || appMenu.ButtonReturnType == null || string.IsNullOrEmpty(appMenu.ButtonReturnType.ResponseMsgType))
                {
                    LogManager.GetLogger(this.GetType()).Debug("appMenu parsed is NULL");
                    return(null);
                }

                switch (appMenu.ButtonReturnType.ResponseMsgType.ToLower())
                {
                case "text":
                    var textMessage = this.CreateResponseMessage <ResponseMessageText>();

                    LogManager.GetLogger(this.GetType()).Debug("appMenu.ButtonReturnType = " + appMenu.ButtonReturnType);
                    LogManager.GetLogger(this.GetType()).Debug("appMenu.ButtonReturnType.Content = " + appMenu.ButtonReturnType.Content);

                    textMessage.Content = appMenu.ButtonReturnType.Content;
                    return(textMessage);

                case "news":
                    LogManager.GetLogger(this.GetType()).Debug("appMenu.ButtonReturnType.NewsPushNumber= " + appMenu.ButtonReturnType.NewsPushNumber);
                    var articles = (appMenu.ButtonReturnType.NewsPushNumber != null && appMenu.ButtonReturnType.NewsPushNumber != 0) ?
                                   GetPushArticles(requestMessage.EventKey, appMenu.ButtonReturnType.NewsPushNumber) : GetPushArticles(requestMessage.EventKey);
                    return(CreateResponse(articles, objConfig.WXHost, "/News/ArticleInfo/wxdetail/"));
                }
                break;
            }
            }

            return(DefaultResponseMessage(requestMessage));
        }
        public ActionResult EditTicket(string id, int appId)
        {
            //var obj = GetObject(id);
            var obj          = _objService.Repository.GetByKey(int.Parse(id));
            var questionView = _objService.GetQuestionDetail(id, obj);
            var user         = _objUserService.GetBylillyId(obj.CreatedUserId);

            if (user != null)
            {
                questionView.Tel = user.Tel;
            }

            var objConfig = WeChatCommonService.GetWeChatConfig(obj.AppId.GetValueOrDefault());

            string strToken = AccessTokenContainer.TryGetToken(objConfig.WeixinCorpId, objConfig.WeixinCorpSecret);

            var objone = MailListApi.GetMember(strToken, obj.CreatedUserId);

            if (objone != null)
            {
                questionView.EMail = objone.email;
            }

            if (!string.IsNullOrEmpty(id) && id != "0")
            {
                AppDataPermissionCheck(_permissionService, appId, obj.AppId.GetValueOrDefault());
            }


            return(Json(questionView, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// 企业号百分比统计
        /// </summary>
        /// <returns></returns>
        public async Task <ActionResult> Enterprise(string state, string date)
        {
            if (string.IsNullOrEmpty(date))
            {
            }
            else
            {
                //定义饼柱状图标的list
                List <string> xAxisList = new List <string>();
                DateTime      dt        = DateTime.Parse(date);

                // 获取token
                var objConfig = WeChatCommonService.GetWeChatConfig();
                var token     = await getToken(objConfig.WeixinCorpId, objConfig.WeixinCorpSecret);

                // 使用获取app列表的API
                var empagent = await getagentlist(token);

                foreach (var emp in empagent.agentlist)
                {
                    xAxisList.Add(emp.name);
                }
                var newObj = new
                {
                    xAxis = xAxisList,
                    //Data = seriesList,
                };
            }
            return(null);
        }
Exemple #7
0
        /// <summary>
        /// tag信息列表情报获得
        /// </summary>
        /// <param name="appId">appid</param>
        /// <returns>tag列表</returns>
        private List <TagItem> PrepareEditData(int appId)
        {
            var    Config      = WeChatCommonService.GetWeChatConfig(appId);
            string accessToken = AccessTokenContainer.TryGetToken(Config.WeixinCorpId, Config.WeixinCorpSecret);
            var    tagList     = MailListApi.GetTagList(accessToken).taglist;

            return(tagList);
        }
        public string GetToken(int iAppID)
        {
            var Config = WeChatCommonService.GetWeChatConfig(iAppID);

            return(AccessTokenContainer.TryGetToken(Config.WeixinCorpId, Config.WeixinCorpSecret));

            // return resultToken.access_token;
        }
        /// <summary>
        /// 首次关注应用事件
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage)
        {
            var responseMessage = this.CreateResponseMessage <ResponseMessageText>();
            var objConfig       = WeChatCommonService.GetWeChatConfig(requestMessage.AgentID);

            responseMessage.Content = objConfig.WelcomeMessage;
            return(responseMessage);
        }
Exemple #10
0
        public static GetAppInfoResult GetUserOrDept(int iAppID)
        {
            var objConfig = WeChatCommonService.GetWeChatConfig(iAppID);

            string strToken = AccessTokenContainer.TryGetToken(objConfig.WeixinCorpId, objConfig.WeixinCorpSecret);

            return(AppApi.GetAppInfo(strToken, iAppID));
            // Ret.allow_userinfos
        }
        /// <summary>
        /// 微信认证成功
        /// </summary>
        /// <returns></returns>
        public ActionResult Subscribed(string lillyId)
        {
            var objConfig = WeChatCommonService.GetWeChatConfig(1);
            var token     = AccessTokenContainer.TryGetToken(objConfig.WeixinCorpId, objConfig.WeixinCorpSecret);

            LogManager.GetLogger(this.GetType()).Debug("Starting ConcernApi.TwoVerification... Token=" + token + " - lillyid=" + lillyId);
            var result = ConcernApi.TwoVerification(token, lillyId);

            return(Redirect("/subscribed.html"));
        }
        public string GetToken(int iAppID)
        {
            LogManager.GetLogger(this.GetType()).Error("Request.Url.AbsoluteUri:" + Request.Url.AbsoluteUri);
            var Config = WeChatCommonService.GetWeChatConfig(iAppID);

            LogManager.GetLogger(this.GetType()).Debug("host:" + Request.Url.Host);
            return(AccessTokenContainer.TryGetToken(Config.WeixinCorpId, Config.WeixinCorpSecret));

            // return resultToken.access_token;
        }
Exemple #13
0
        /// <summary>
        /// 微信图文推送。该函数不建议使用,建议使用PublishMessage函数代替。
        /// </summary>
        /// <param name="iAppID"></param>
        /// <param name="strMsgType"></param>
        /// <param name="strUser"></param>
        /// <param name="strDept"></param>
        /// <param name="strTags"></param>
        /// <param name="strContent"></param>
        /// <param name="lstContent"></param>
        /// <returns></returns>
        public static MassResult SendMsg(int iAppID, string strMsgType, string strUser, string strDept, string strTags, string strContent, List <Article> lstContent)
        {
            MassResult objResult = null;

            int IsSec = 0;

            var objConfig = WeChatCommonService.GetWeChatConfig(iAppID);

            LogManager.GetLogger(typeof(WechatCommon)).Debug("strUser:{0} strDept:{1} strTags:{2} Msg:{3}", strUser, strDept, strTags, strContent);

            string strToken = AccessTokenContainer.TryGetToken(objConfig.WeixinCorpId, objConfig.WeixinCorpSecret);

            switch (strMsgType)
            {
            case "text":
                objResult = MassApi.SendText(strToken, strUser, strDept, strTags, iAppID.ToString(), strContent, IsSec);
                break;

            case "image":

                Dictionary <string, Stream> dic = new Dictionary <string, Stream>();

                // for (int i = 0; i < Request.Files.Count; i++)
                {
                    var stream = System.IO.File.OpenRead(HttpContext.Current.Server.MapPath("~/") + "/style/images/meteorshower.jpg");
                    dic.Add("meteorshower.jpg", stream);
                }
                var ret = MediaApi.Upload(strToken, UploadMediaFileType.file, dic, "");

                objResult = MassApi.SendImage(strToken, strUser, strDept, strTags, iAppID.ToString(), ret.media_id, IsSec);
                break;

            case "news":
                objResult = MassApi.SendNews(strToken, strUser, strDept, strTags, iAppID.ToString(), lstContent, IsSec);
                break;

            case "file":

                Dictionary <string, Stream> dic1 = new Dictionary <string, Stream>();

                for (int i = 0; i < HttpContext.Current.Request.Files.Count; i++)
                {
                    var stream = System.IO.File.OpenRead(HttpContext.Current.Server.MapPath("~/") + "/style/images/meteorshower.jpg");
                    dic1.Add("meteorshower.jpg", stream);
                }
                var ret1 = MediaApi.Upload(strToken, UploadMediaFileType.file, dic1, "");

                objResult = MassApi.SendFile(strToken, strUser, strDept, strTags, iAppID.ToString(), ret1.media_id, IsSec);
                break;
            }

            return(objResult);
        }
Exemple #14
0
        public string rtntoken(int agentid = 0)
        {
            var Config   = WeChatCommonService.GetWeChatConfig(agentid);
            var strToken = AccessTokenContainer.TryGetToken(Config.WeixinCorpId, Config.WeixinCorpSecret);

            if (!string.IsNullOrEmpty(strToken))
            {
                return(strToken);
            }

            return(null);
        }
        /// <summary>
        /// 用户进入应用事件
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override IResponseMessageBase OnEvent_EnterAgentRequest(RequestMessageEvent_Enter_Agent requestMessage)
        {
            LogManager.GetLogger(this.GetType()).Debug("用户进入应用事件 - AppID:" + requestMessage.AgentID);

            // 记录用户行为
            _wr.CallUserBehavior(requestMessage.EventKey, requestMessage.FromUserName, requestMessage.AgentID.ToString(CultureInfo.InvariantCulture), "", "", 10);

            // 先判断是否第一次进入。
            // 从_weChatAppUser中获取当前用户
            string       userId       = requestMessage.FromUserName;
            bool         isFirstJoin  = false;
            var          existingUser = _weChatAppUserService.Repository.Entities.FirstOrDefault(a => a.WeChatUserID == userId && a.WeChatAppID == requestMessage.AgentID);
            var          objConfig    = WeChatCommonService.GetWeChatConfig(requestMessage.AgentID);
            CategoryType appType      = (CategoryType)requestMessage.AgentID;

            isFirstJoin = (existingUser == null || existingUser == default(WeChatAppUser));
            // 如果是第一次进入,需要将用户插入到数据库中
            if (isFirstJoin)
            {
                LogManager.GetLogger(this.GetType()).Debug("new WeChatAppUser - WeChatAppID=" + appType.ToDescription());
                // 将用户信息插入到数据库中
                _weChatAppUserService.Repository.Insert(new WeChatAppUser()
                {
                    WeChatAppID  = requestMessage.AgentID,
                    WeChatUserID = userId
                });
            }

            // 只有第一次推送。
            if (isFirstJoin)
            {
                List <ArticleInfoView> items;

                // TODO: 查找所有新闻的最新6条数据,组织图文推送
                switch (appType)
                {
                default:
                {
                    LogManager.GetLogger(this.GetType()).Debug("App Type not defined.");
                    items = _articleInfoService.GetList <ArticleInfoView>(a => a.ArticleStatus == "Published" && a.AppId == requestMessage.AgentID && a.ArticleCateSub.EndsWith("ENTRY_PUSH"))
                            .OrderBy("PublishDate", System.ComponentModel.ListSortDirection.Descending)
                            .ToList();
                    return(CreateResponse(items, objConfig.WXHost, "/News/ArticleInfo/wxdetail/"));
                }
                }
            }

            return(null);
        }
        /// <summary>
        /// {"appid":"wx41a2bf0afed3b33d","noncestr":"USUtYzXJw4wELBKX","sign":"ed18cbd26d2f82b44dd2fb70743b484e68e68d3c","timestamp":"1438746212"}
        /// </summary>
        /// <returns></returns>
        public ActionResult sign(int appId, string url)
        {
            log.Debug("web API sign Start  appId:{0} Uri:{1} Request URL:{2}", appId, url, Request.Url);

            var config = WeChatCommonService.GetWeChatConfig(appId);

            var ret = JSSDKHelper.GetJsSdkUiPackage(config.WeixinCorpId, config.WeixinCorpSecret, url);


            log.Debug("web API sign End  UserID:{0} noncestr:{1} Signature:{2} Timestamp:{3}", config.WeixinAppId, ret.NonceStr, ret.Signature, ret.Timestamp);

            return(Json(new
            {
                appid = ret.AppId,
                noncestr = ret.NonceStr,
                sign = ret.Signature,
                timestamp = ret.Timestamp
            }, JsonRequestBehavior.AllowGet));
        }
Exemple #17
0
        protected bool SetAuth(HttpContext hc)
        {
            if (!(hc.Request.IsAuthenticated && hc.User.Identity != null))
            {
                //      LogManager.GetLogger(this.GetType()).Error("1");
                hc.Session["ReturnUrl"] = hc.Request.Url.AbsoluteUri;
                //   LogManager.GetLogger(this.GetType()).Error("2");
                var objConfig = WeChatCommonService.GetWeChatConfig(2);
                //  LogManager.GetLogger(this.GetType()).Error("3");
                string CorpId = objConfig.WeixinCorpId;
                string strRet = WebConfigurationManager.AppSettings["UserBackUrl"];
                //  LogManager.GetLogger(this.GetType()).Error("4");
                // LogManager.GetLogger(this.GetType()).Debug("UrlStart");
                string strUrl = OAuth2Api.GetCode(CorpId, hc.Server.UrlEncode(strRet), "About");
                //  LogManager.GetLogger(this.GetType()).Error("5");
                hc.Response.Redirect(strUrl);

                return(false);
            }

            return(true);
            // LogManager.GetLogger(this.GetType()).Debug(strUrl);
        }
        /// <summary>
        /// 获取jssdk参数
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="url"></param>
        /// <returns></returns>
        public ActionResult sign(int appId, string url)
        {
            //if (!VerifyParam("url"))
            //{
            //    return ErrMsg();
            //}
            //string url = Request["url"];

            System.IO.File.AppendAllText(Server.MapPath("~/app_data/logs/a.txt"), appId + "\r\n" + "url " + url + "\r\n" + "Request.Url " + Request.Url);


            //string newUrl = string.Empty;
            //byte[] bytes = Convert.FromBase64String(HttpUtility.UrlDecode(url));
            //newUrl = Encoding.UTF8.GetString(bytes);
            //System.IO.File.AppendAllText(Server.MapPath("~/app_data/logs/a.txt"), appId + "\r\n" + "newUrl " + newUrl + "\r\n" + "Request.Url " + Request.Url);
            //url = HttpUtility.UrlDecode(url);
            //System.IO.File.AppendAllText(Server.MapPath("~/app_data/logs/a.txt"),  "\r\n"+ " url " + url+"\r\n");
            //LogManager.GetLogger(this.GetType()).Debug("API sign Start  appId:{0} Uri:{1} Request URL:{2}", appId, url, Request.Url);
            // log.Debug("API sign Start  appId:{0} Uri:{1} Request URL:{2}", appId, url, Request.Url);

            var config = WeChatCommonService.GetWeChatConfig(appId);

            //var ret = Weixin.QY.Helpers.JSSDKHelper.GetJsSdkUiPackage(config.WeixinCorpId, config.WeixinCorpSecret, url);
            var ret = Weixin.QY.Helpers.JSSDKHelper.GetJsSdkUiPackage(config.WeixinCorpId, config.WeixinCorpSecret, url);

            System.IO.File.AppendAllText(Server.MapPath("~/app_data/logs/a.txt"), "\r\n" + "WeixinAppId " + config.WeixinAppId + "\r\n" + "NonceStr " + ret.NonceStr + "\r\n" + "Signature " + ret.Signature + "\r\n" + "Timestamp " + ret.Timestamp);
            // log.Debug("API sign End  UserID:{0} noncestr:{1} Signature:{2} Timestamp:{3}", config.WeixinAppId, ret.NonceStr, ret.Signature, ret.Timestamp);

            return(Json(new
            {
                appid = ret.AppId,
                noncestr = ret.NonceStr,
                sign = ret.Signature,
                timestamp = ret.Timestamp
            }, JsonRequestBehavior.AllowGet));
        }
        public ActionResult GetNewJsSDK(int appId, string url, string clientId)
        {
            if (!VerifyNewParam("url", clientId, _signCheckService))
            {
                return(ErrMsg());
            }

            log.Debug("web API sign Start  appId:{0} Uri:{1} Request URL:{2}", appId, url, Request.Url);

            var config = WeChatCommonService.GetWeChatConfig(appId);

            var ret = Weixin.QY.Helpers.JSSDKHelper.GetJsSdkUiPackage(config.WeixinCorpId, config.WeixinCorpSecret, url);


            log.Debug("web API sign End  UserID:{0} noncestr:{1} Signature:{2} Timestamp:{3}", config.WeixinAppId, ret.NonceStr, ret.Signature, ret.Timestamp);

            return(Json(new
            {
                appid = ret.AppId,
                noncestr = ret.NonceStr,
                sign = ret.Signature,
                timestamp = ret.Timestamp
            }, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// 批量操作--导入成员
        /// </summary>
        /// <param name="OPType"></param>
        /// <returns></returns>
        public ActionResult batchuser(int?OPType)
        {
            string strRet = "[\"jsonrpc\" : \"2.0\", \"result\" : null, \"id\" : \"{0}\"]";

            string strErrRet = "[\"jsonrpc\" : \"2.0\", \"error\" : [\"code\": {0}, \"message\": \"{1}\"], \"id\" : \"id\"]";

            string operateType = "";

            try
            {
                if (Request.Files.Count == 0)
                {
                    strRet = string.Format(strErrRet, "100", "未发现上传文件!");
                    return(Content(strRet));
                }

                Dictionary <string, Stream> dic = new Dictionary <string, Stream>();

                for (int i = 0; i < Request.Files.Count; i++)
                {
                    HttpPostedFileBase objFile = Request.Files[i];
                    dic.Add(objFile.FileName, objFile.InputStream);
                }


                var ret = MediaApi.Upload(GetToken(), UploadMediaFileType.file, dic, "");

                System.Threading.Thread.Sleep(1000);

                //上传失败
                if (!string.IsNullOrEmpty(ret.errmsg) && ret.errmsg.IndexOf("ok") < 0)
                {
                    strRet = string.Format(strErrRet, ret.errcode, ret.errmsg);
                    return(Content(strRet));
                }

                BatchUserResult objRet;

                var       objConfig   = WeChatCommonService.GetWeChatConfig(AppId);
                string    callbackUrl = CommonService.GetSysConfig(SysConfigCode.CallBackUrl, "");//从Sysconfig数据库中读url
                BatchUser objUser     = new BatchUser()
                {
                    media_id = ret.media_id,
                    callback = new callback()
                    {
                        token          = objConfig.WeixinToken,          // Token,
                        encodingaeskey = objConfig.WeixinEncodingAESKey, // EncodingAESKey,
                        url            = callbackUrl                     //app.innocellence.com/wechatqy/led
                    }
                };

                if (OPType == 1)
                {
                    objRet      = MailListApi.BatchUpdateUser(GetToken(), objUser);
                    operateType = "sync_user";
                }
                else if (OPType == 2)
                {
                    objRet      = MailListApi.BatchReplaceUser(GetToken(), objUser);
                    operateType = "replace_user";
                }
                else if (OPType == 3)
                {
                    objRet      = MailListApi.BatchReplaceDept(GetToken(), objUser);
                    operateType = "replace_party";
                }
                else
                {
                    objRet = new BatchUserResult()
                    {
                        errmsg = "参数错误!"
                    };
                }

                //当执行导入操作时将返回的jobId插入到表中去
                if (!string.IsNullOrEmpty(objRet.errmsg))
                {
                    strRet = string.Format(strRet, objRet.jobid);
                    var jobLog = new BatchJobLog()
                    {
                        JobID       = objRet.jobid,
                        Status      = 0,
                        Type        = operateType,
                        CreatedDate = DateTime.Now
                    };

                    _batchJobLogService.Repository.Insert(jobLog);//插入表中
                }
                else
                {
                    strRet = string.Format(strErrRet, objRet.errcode, objRet.errmsg);
                }
            }
            catch (Exception ex)
            {
                strRet = string.Format(strErrRet, "102", ex.Message);
            }


            return(Content(strRet.Replace("[", "{").Replace("]", "}")));
        }
        private static string GetToken(int appId)
        {
            var config = WeChatCommonService.GetWeChatConfig(appId);

            return(AccessTokenContainer.TryGetToken(config.WeixinCorpId, config.WeixinCorpSecret));
        }
Exemple #22
0
        public override ActionResult Edit(string id)
        {
            string           strToken = rtntoken(int.Parse(id));
            GetAppInfoResult result   = AppApi.GetAppInfo(strToken, int.Parse(id));

            ViewBag.result = result;

            //部门信息
            //List<DepartmentList> subdepartList = MailListApi.GetDepartmentList(GetToken(), 0).department;
            List <DepartmentList> subdepartList = new List <DepartmentList>();

            if (WeChatCommonService.lstDepartment != null)
            {
                subdepartList = WeChatCommonService.lstDepartment;
            }
            if (result.allow_partys != null)
            {
                String        allowpart  = string.Join(",", result.allow_partys.partyid);
                List <string> departname = new List <string>();
                foreach (var part in allowpart.Split(','))
                {
                    foreach (var allow in subdepartList)
                    {
                        if (allow.id.ToString() == part)
                        {
                            departname.Add(allow.name);
                            break;
                        }
                    }
                }
                ViewBag.depatlist = departname;
            }
            else
            {
                ViewBag.depatlist = new List <string>();
            }
            //标签信息
            //var tagList = MailListApi.GetTagList(strToken).taglist;
            //ViewBag.taglist = tagList;
            List <TagItem> tagList = new List <TagItem>();

            if (WeChatCommonService.lstTag != null)
            {
                tagList = WeChatCommonService.lstTag;
            }
            if (result.allow_tags != null)
            {
                String        allowtag = string.Join(",", result.allow_tags.tagid);
                List <string> tagname  = new List <string>();
                foreach (var tag in allowtag.Split(','))
                {
                    foreach (var tag_list in tagList)
                    {
                        if (tag_list.tagid == tag)
                        {
                            tagname.Add(tag_list.tagname);
                            break;
                        }
                    }
                }
                ViewBag.tagname = tagname;
            }
            else
            {
                ViewBag.tagname = new List <string>();
            }

            //用户信息

            List <GetMemberResult> user_List = new List <GetMemberResult>();

            if (WeChatCommonService.lstUser != null)
            {
                user_List = WeChatCommonService.lstUser;
            }
            List <GetAppInfo_AllowUserInfos_User> userList = result.allow_userinfos.user;
            Dictionary <string, string>           username = new Dictionary <string, string>();

            foreach (var user in userList)
            {
                foreach (var user1 in user_List)
                {
                    if (user1.userid == user.userid)
                    {
                        username.Add(user1.name, user1.avatar);

                        break;
                    }
                }
            }
            ViewBag.userlist = username;

            //获取corpid与secret
            var Config = WeChatCommonService.GetWeChatConfig(int.Parse(id));

            if (Config != null)
            {
                ViewBag.corpid         = Config.WeixinCorpId;
                ViewBag.secret         = Config.WeixinCorpSecret;
                ViewBag.welcomemessage = Config.WelcomeMessage;
                ViewBag.configid       = Config.Id;
            }
            return(View("../appmanage/Edit", result));
        }
        /// <summary>
        /// 应用统计
        /// </summary>
        /// <returns></returns>
        public async Task <ActionResult> Statistics(string state, string begindate, string enddate)
        {
            if (!string.IsNullOrEmpty(begindate) && !string.IsNullOrEmpty(enddate))
            {
                DateTime dt  = DateTime.Parse(begindate);
                DateTime dt1 = DateTime.Parse(enddate).AddDays(1);

                // 获取token
                var objConfig = WeChatCommonService.GetWeChatConfig();
                var token     = await getToken(objConfig.WeixinCorpId, objConfig.WeixinCorpSecret);

                // 使用获取app列表的API
                var empagent = await getagentlist(token);

                //定义饼状图标的list
                var legendList = new List <string>();

                List <int> agentList   = _userBehaviorService.GetAgentList(dt, dt1);
                var        middletrans = new Dictionary <int, string>();

                foreach (var emp in empagent.agentlist)
                {
                    foreach (var agent in agentList)
                    {
                        if (emp.agentid == agent.ToString())
                        {
                            legendList.Add(emp.name);
                            middletrans.Add(agent, emp.name);
                            break;
                        }
                    }
                }

                var tabledata = _userBehaviorService.GetByList(dt, dt1);

                //考虑到图表的SereisData数据为一个列表
                var seriesList = new List <SereisData>();
                foreach (var kvp in tabledata)
                {
                    var seriesObj = new SereisData();
                    foreach (KeyValuePair <int, string> mtrans in middletrans)
                    {
                        if (kvp.AppId == mtrans.Key)
                        {
                            string text = mtrans.Value;
                            if (!string.IsNullOrEmpty(text))
                            {
                                seriesObj.Sereisname  = text;
                                seriesObj.Sereisvalue = kvp.Count;
                                seriesList.Add(seriesObj);
                            }
                            break;
                        }
                    }
                }
                var newObj = new
                {
                    legend = legendList,
                    Data   = seriesList,
                };

                if (state == "2")
                {
                    return(Json(newObj, JsonRequestBehavior.AllowGet));
                }
                else
                {
                    return(View());
                }
            }
            return(View());
        }
        public JsonResult SendNewEmployee()
        {
            var AppId = CommonService.GetSysConfig("NewEmployeeAppId", "");
            var articleSettingList = _localSADService.SendArticleToNewEmployee();

            try
            {
                foreach (var em in articleSettingList)
                {
                    if (em.employeeLst.Count > 0)
                    {
                        string[]       ids         = em.ArticleId.Split(',');
                        List <Article> articlelist = new List <Article>();
                        foreach (var item in ids)
                        {
                            Message message = _messageService.Repository.Entities.Where(a => a.Id.ToString() == item).SingleOrDefault();

                            if (message != null)
                            {
                                var article = new Article()
                                {
                                    Title       = message.Title,
                                    Description = message.Comment,
                                    PicUrl      = string.Format("{0}/Common/PushFile?id={1}&FileName={2}", WechatBaseUrl, message.ThumbImageId, message.ThumbImageUrl),
                                    Url         = string.Format("{0}/News/Message/WxDetailh5/{1}", WechatBaseUrl, item)
                                };
                                articlelist.Add(article);
                            }
                        }
                        WechatCommon.PublishMessage(int.Parse(AppId), articlelist, em.UserLst, "", "");

                        BaseService <LogsModel> objServLogs = new BaseService <LogsModel>();

                        string tmpCategory = em.Month + "&" + em.Days;
                        string tmpCateDis  = "";

                        switch (tmpCategory)
                        {
                        case "&7":
                            tmpCateDis = "7 days";
                            break;

                        case "&15":
                            tmpCateDis = "15 days";
                            break;

                        case "5&":
                            tmpCateDis = "5 months";
                            break;

                        case "6&":
                            tmpCateDis = "6 months";
                            break;

                        default:
                            break;
                        }

                        string[] arrID = em.UserLst.Split('|');
                        foreach (string strID in arrID)
                        {
                            if (strID != "")
                            {
                                objServLogs.Repository.Insert(new LogsModel()
                                {
                                    LogCate = tmpCateDis, LogContent = "发送成功", CreatedUserID = strID, CreatedUserName = strID
                                });
                            }
                        }
                    }
                }

                var    deleteuserList = _localSADService.GetDeleteNewEmployee();
                string newname        = CommonService.GetSysConfig("TagNameNewEmployee", "");
                var    Config         = WeChatCommonService.GetWeChatConfig(int.Parse(AppId));
                var    token          = AccessTokenContainer.TryGetToken(Config.WeixinCorpId, Config.WeixinCorpSecret);
                //var taglist = MailListApi.GetTagList(token).taglist.Where(x => x.tagname == tagName);
                var taglist = WeChatCommonService.lstTag.Where(x => x.tagname == newname);
                int tagid   = taglist.FirstOrDefault() != null?Convert.ToInt32(taglist.FirstOrDefault().tagid) : 0;

                string[]      userLst  = deleteuserList.Split('|');
                List <string> userlist = new List <string>();
                foreach (string user in userLst)
                {
                    userlist.Add(user);
                }
                MailListApi.DelTagMember(token, tagid, userlist.ToArray());
            }
            catch (Exception ex)
            {
                _logger.Error("Publish Message Error: {0}", ex.Message.ToString());
                return(Json(false, JsonRequestBehavior.AllowGet));
            }
            return(Json(true, JsonRequestBehavior.AllowGet));
        }
        public async Task <ActionResult> Department(string date)
        {
            if (string.IsNullOrEmpty(date))
            {
            }
            else
            {
                // 获取token
                var objConfig = WeChatCommonService.GetWeChatConfig();
                var token     = await getToken(objConfig.WeixinCorpId, objConfig.WeixinCorpSecret);

                // 使用获取员工详情的API
                var empDetails = await getEmployeesDetail(token);

                // 获取部门列表
                var departments = await getDepartments(token);

                // 处理部门关系,暂定只有5层
                foreach (var dept in departments.department)
                {
                    int level    = 1;
                    int parentId = dept.parentid;
                    while (parentId != 0)
                    {
                        var parentDept = departments.department.Where(t => t.id == parentId).FirstOrDefault();
                        if (parentDept != null)
                        {
                            level++;
                            parentId = parentDept.parentid;
                        }
                    }
                    dept.level = level;
                }
                //找出部门关系是3的
                //定义柱状图标的list
                List <string> xAxisList = new List <string>();

                //考虑到图表的SereisData数据为一个列表
                List <SereisData> seriesList   = new List <SereisData>();
                List <SereisData> unseriesList = new List <SereisData>();
                int subscrib = 0;
                foreach (var dept in departments.department)
                {
                    if (dept.level == 4)
                    {
                        if (xAxisList.Contains(dept.name))
                        {
                        }
                        else
                        {
                            xAxisList.Add(dept.name);
                        }
                    }
                }
                //根据xAxisList建立对应的seriesList,unseriesList
                foreach (var t in xAxisList)
                {
                    SereisData sda = new SereisData();
                    sda.Sereisname  = t;
                    sda.Sereisvalue = 0;
                    seriesList.Add(sda);
                    SereisData unsda = new SereisData();
                    unsda.Sereisname  = t;
                    unsda.Sereisvalue = 0;
                    unseriesList.Add(unsda);
                }
                // 更新员工信息,把部门的名称填入
                foreach (var emp in empDetails.userlist)
                {
                    if (emp.department.Count() == 1)
                    {
                        var dept = departments.department.Where(t => t.id == emp.department[0]).FirstOrDefault();
                        if (dept != null)
                        {
                            int level = dept.level;
                            while (level > 1)
                            {
                                emp.deptLvs[level] = dept.name;
                                dept = departments.department.Where(t => t.id == dept.parentid).FirstOrDefault();
                                level--;
                            }
                        }
                    }
                }

                //找出部门对应员工的关注数
                foreach (var emp in empDetails.userlist)
                {
                    if (emp.department.Count() != 1)
                    {
                        continue;
                    }
                    foreach (var xAxis in xAxisList)
                    {
                        if (emp.deptLvs[4] == xAxis)
                        {
                            if (emp.status == 1)
                            {
                                foreach (var t in seriesList)
                                {
                                    if (t.Sereisname == xAxis)
                                    {
                                        t.Sereisvalue += 1;
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                foreach (var t in unseriesList)
                                {
                                    if (t.Sereisname == xAxis)
                                    {
                                        t.Sereisvalue += 1;
                                        break;
                                    }
                                }
                            }
                            break;
                        }
                    }
                }
                var newObj = new
                {
                    xAxis  = xAxisList,
                    Data   = seriesList,
                    UnData = unseriesList
                };
                return(Json(newObj, JsonRequestBehavior.AllowGet));
            }

            return(View());
        }
        /// <summary>
        /// 获取配置
        /// </summary>
        /// <returns></returns>
        protected SysWechatConfig GetWechatConfig()
        {
            string appid = Request["appid"];

            return(WeChatCommonService.GetWeChatConfig(int.Parse(appid)));
        }
        public ActionResult Post(PostModel postModel, bool isDebug = false)
        {
            var maxRecordCount = 10;

            log.Debug("Entering WeChat Post ");

            Stream s = System.Web.HttpContext.Current.Request.InputStream;

            byte[] b = new byte[s.Length];
            s.Read(b, 0, (int)s.Length);
            var postStr = Encoding.UTF8.GetString(b);

            log.Debug("content-type: " + Request.ContentType);
            log.Debug("raw data: " + postStr);
            log.Debug("raw url: " + Request.RawUrl);

            QyCustomMessageHandler messageHandler = null;

            //var iAppID = int.Parse(Request["AppID"] ?? "1");
            try
            {
                var objConfig = WeChatCommonService.GetWeChatConfig();

                postModel.Token          = objConfig.WeixinToken;          // Token;
                postModel.EncodingAESKey = objConfig.WeixinEncodingAESKey; // EncodingAESKey;
                postModel.CorpId         = objConfig.WeixinCorpId;         // CorpId;
            }
            catch (Exception ex)
            {
                log.Error(ex, "CommonService.GetWeChatConfig - Exception: " + ex.Message);
            }

            try
            {
                log.Debug("weixin maxRecordCount2: " + maxRecordCount);
                //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
                messageHandler = new QyCustomMessageHandler(Request.InputStream, postModel, maxRecordCount, isDebug);



                log.Debug("messageHandler.RequestMessage : " + messageHandler.RequestMessage);

                if (messageHandler.RequestMessage == null)
                {
                    log.Debug("messageHandler.RequestMessage is null");
                    //验证不通过或接受信息有错误
                }

                //messageHandler.RequestDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Request_" + messageHandler.RequestMessage.FromUserName + ".txt"));
                //执行微信处理过程
                messageHandler.Execute();
                //测试时可开启,帮助跟踪数据
                //messageHandler.ResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_Response_" + messageHandler.ResponseMessage.ToUserName + ".txt"));
                //messageHandler.FinalResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_FinalResponse_" + messageHandler.ResponseMessage.ToUserName + ".txt"));

                if (isDebug)
                {
                    // messageHandler.FinalResponseDocument.Save(Server.MapPath("~/App_Data/Qy/" + DateTime.Now.Ticks + "_FinalResponse_" + messageHandler.ResponseMessage.ToUserName + ".txt"));

                    log.Debug("messageHandler.ResponseMessage : " + messageHandler.FinalResponseDocument.Document.ToString());
                }

                //自动返回加密后结果
                return(new FixWeixinBugWeixinResult(messageHandler));
            }
            catch (Exception ex)
            {
                log.Error(ex, "执行微信处理过程 - Exception: " + ex.Message);
                if (messageHandler != null)
                {
                    log.Error("执行微信处理过程 - Request: " + messageHandler.RequestDocument.ToString());
                    log.Error("执行微信处理过程 - Response: " + messageHandler.FinalResponseDocument.ToString());
                }
            }
            return(Content(""));
        }