Пример #1
0
        public static ResultModelData <JObject> CreatePayCashier(int UserId, int Platform, decimal Amount, int UbkId)
        {
            string LogDic = "生成收银台";
            bool   flag   = false;
            //获得支付ID
            int keyId = payRecordDao.Init(UbkId, Amount, Platform, Ip.GetClientIp(), (int)Logic.ChannelType.腾付通);
            //获取请求流水号
            int requestId = yeepayLogDao.Init((int)Teng.Enums.TengType.生成收银台, UserId, Platform, keyId, (int)Logic.ChannelType.腾付通);

            Logs.WriteLog($"获取请求流水号:UserId:{UserId},Platform:{Platform},requestId:{requestId}", TengLogDic, LogDic);
            //生成收银台
            var payCId = payCashierDao.Init((int)Logic.ChannelType.腾付通, requestId, UbkId, UserId, keyId);
            ResultModelData <JObject> resp = new ResultModelData <JObject>();

            resp.backState = 0;
            resp.message   = "请求成功";
            JObject data = new JObject();

            data["url"] = $"{Constant.CurrentApiHost}itapi/pay/tengcashier?payid={payCId}";
            resp.Data   = data;
            if (payCId > 0)
            {
                #region 日志处理
                //返回后日志记录
                yeepayLogParasDao.Init(requestId, JsonConvert.SerializeObject(resp), 1);
                //易宝日志状态更新
                flag = yeepayLogDao.UpdateState(requestId, resp.backState.ToString(), resp.message, resp.backState == 0 ? 1 : resp.backState);
                #endregion
            }
            return(resp);
        }
Пример #2
0
        public ActionResult Reg(string mobile, string mcode, string pwd, string baseUserId, string regGuid)
        {
            //Thread.Sleep(5000);
            ResultModelData <Users> result = new ResultModelData <Users>();

            result.backState = -100;
            result.message   = "参数有误";
            //return View("Reg2", result);
            string ip = ITOrm.Utility.Client.Ip.GetClientIp();

            //密码加密
            pwd = ITOrm.Utility.Encryption.SecurityHelper.GetMD5String(pwd);
            string parms     = $"mobile={mobile}&mcode={mcode}&password={pwd}&regGuid={regGuid}&baseUserId={baseUserId}&ip={ip}";
            var    regResult = ApiRequest.getApiData <JObject>("Users/Register", parms);

            if (regResult.backState == 0)
            {
                return(new RedirectResult("/itapi/invite/Prompt"));
            }
            else
            {
                result.backState = -100;
                result.message   = regResult.message;
            }
            var user = usersDao.Single(Convert.ToInt32(baseUserId));

            result.Data = user;
            return(View("Reg2", result));
        }
Пример #3
0
        public ActionResult Reg(string u)
        {
            ResultModelData <Users> result = new ResultModelData <Users>();

            string BaseUserId = ITOrm.Utility.Encryption.AESEncrypter.AESDecrypt(u, Constant.SystemAESKey);

            if (string.IsNullOrEmpty(BaseUserId))
            {
                result.backState = -100;
                result.message   = "参数有误";
            }
            var user = usersDao.Single(Convert.ToInt32(BaseUserId));

            result.Data = user;
            return(View("Reg2", result));
        }
Пример #4
0
        public static ResultModelData <JObject> ValidateMobileCode(int payCId, int Platform, string tengGuid, string Code)
        {
            bool flag = false;
            ResultModelData <JObject> ret = new ResultModelData <JObject>();

            ret.backState = 0;
            ret.message   = "验证成功";
            string     LogDic = "验证收银短信";
            PayCashier payc   = payCashierDao.Single(payCId);
            //获取请求流水号
            int requestId = yeepayLogDao.Init((int)Teng.Enums.TengType.验证收银短信, payc.UserId, Platform, payc.PayRecordId, (int)Logic.ChannelType.腾付通);

            Logs.WriteLog($"获取请求流水号:UserId:{payc.UserId},Platform:{Platform},requestId:{requestId}", TengLogDic, LogDic);

            string mobileKey = ITOrm.Utility.Const.Constant.teng_mobile_code + tengGuid;

            if (!ITOrm.Utility.Cache.MemcachHelper.Exists(mobileKey))
            {
                ret.backState = -100;
                ret.message   = "验证码已过期";
            }
            JObject cacheMobileCode = JObject.Parse(ITOrm.Utility.Cache.MemcachHelper.Get(mobileKey).ToString());

            if (Code.Trim() != cacheMobileCode["code"].ToString())
            {
                ret.backState = -100;
                ret.message   = "手机验证码错误";
            }


            #region 日志处理
            //返回后日志记录
            yeepayLogParasDao.Init(requestId, JsonConvert.SerializeObject(ret), 1);
            //易宝日志状态更新
            flag = yeepayLogDao.UpdateState(requestId, ret.backState.ToString(), ret.message, ret.backState == 0 ? 1 : ret.backState);
            #endregion


            return(ret);
        }
Пример #5
0
        public static ResultModelData <JObject> SendMsgCode(int payCId, int Platform, string tengGuid)
        {
            ResultModelData <JObject> ret = new ResultModelData <JObject>();

            ret.backState = -100;
            ret.message   = "发送失败";


            string       LogDic = "发送收银短信";
            PayCashier   payc   = payCashierDao.Single(payCId);
            PayRecord    pay    = payRecordDao.Single(payc.PayRecordId);
            UserBankCard ubk    = userBankCardDao.Single(payc.UbkId);
            int          typeId = (int)Teng.Enums.TengType.发送收银短信;
            int          cnt    = yeepayLogDao.Count(" UserId=@UserId and KeyId=@PayRecordId and ChannelType=@ChannelType and typeId=@typeId ", new { payc.UserId, payc.PayRecordId, payc.ChannelType, typeId });

            if (cnt > 4)
            {
                ret.message = "该订单短信发送次数超限";
                return(ret);
            }
            //获取请求流水号
            int requestId = yeepayLogDao.Init(typeId, payc.UserId, Platform, payc.PayRecordId, (int)Logic.ChannelType.腾付通);

            Logs.WriteLog($"获取请求流水号:payCId:{payCId},UserId:{payc.UserId},Platform:{Platform},tengGuid:{tengGuid},requestId:{requestId}", TengLogDic, LogDic);
            bool flag = false;

            //发送短信
            var     resultMsg = SystemSendMsg.Send(Logic.EnumSendMsg.腾付通收银短信, ubk.Mobile, pay.Amount);
            SendMsg model     = new SendMsg();

            model.UserId     = payc.UserId;
            model.TypeId     = (int)Logic.EnumSendMsg.腾付通收银短信;
            model.Context    = resultMsg.content;
            model.CTime      = DateTime.Now;
            model.IP         = ITOrm.Utility.Client.Ip.GetClientIp();
            model.Merchant   = resultMsg.Merchant;
            model.Mobile     = resultMsg.Mobile;
            model.Platform   = Platform;
            model.Service    = "teng";
            model.RelationId = resultMsg.relationId;
            model.State      = resultMsg.backState ? 2 : 1;
            model.UTime      = DateTime.Now;
            int result = sendMsgDao.Insert(model);

            if (resultMsg.backState && result > 0)
            {
                string key       = Constant.teng_mobile_code + tengGuid;
                var    cacheData = new JObject();
                cacheData["mobile"] = resultMsg.Mobile;
                cacheData["code"]   = resultMsg.code;
                MemcachHelper.Set(key, cacheData.ToString(), ITOrm.Utility.Const.Constant.mobile_code_expires);
                var data = new JObject();
                data["tengGuid"] = tengGuid;
                if (Constant.IsDebug)
                {
                    data["code"] = resultMsg.code;
                }
                ret.backState = 0;
                ret.message   = "发送成功";
                ret.Data      = data;
            }
            #region 日志处理
            //返回后日志记录
            yeepayLogParasDao.Init(requestId, JsonConvert.SerializeObject(ret), 1);
            //易宝日志状态更新
            flag = yeepayLogDao.UpdateState(requestId, ret.backState.ToString(), ret.message, ret.backState == 0 ? 1 : ret.backState);
            #endregion
            return(ret);
        }
Пример #6
0
        /// <summary>
        /// 选择最优通道
        /// 1.利润优先
        /// 2.满足额度
        /// 3.满足运营时间
        /// </summary>
        /// <param name="BankId"></param>
        /// <param name="PayType"></param>
        public static ResultModelData <int> Optimal(int UserId, decimal Amount = 0, string BankCode = "", int PayType = 0, string mobile = "", int BankID = 0)
        {
            ResultModelData <int> result = new ResultModelData <int>();
            //var bin= ITOrm.Utility.Helper.BankCardBindHelper.BankBinto(BankCard);
            //if (bin == null || string.IsNullOrEmpty(bin.BankCode))
            //{
            //    result.backState = -100;
            //    result.message = "银行卡卡Bin识别失败";
            //    return result;
            //}
            //获得通道支持的银行
            List <ViewBankQuota> listBankQuota = MemcachHelper.Get <List <ViewBankQuota> >(Constant.list_bank_quota_key, DateTime.Now.AddDays(7), () =>
            {
                return(viewBankQuotaDao.GetQuery(" state=0 ", null, " order by id asc "));
            });
            //筛选支持的BankCode的通道  并且 限额满足 并按限额排序
            var listBank = listBankQuota.FindAll(m => m.BankCode == BankCode.Trim() && Amount <= m.SingleQuota).OrderByDescending(m => m.SingleQuota).ToList();



            int TypeId = (int)Logic.KeyValueType.支付通道管理;
            //获得通道列表
            var listChannelPay = MemcachHelper.Get <List <KeyValue> >(Constant.list_keyvalue_key + TypeId, DateTime.Now.AddDays(7), () =>
            {
                return(keyValueDao.GetQuery(" typeid=@TypeId  ", new { TypeId }, "order by Sort desc,CTime desc"));
            });
            bool isallnotChannel = true;//标记有积分通道,是否全部关闭 true 是全部关闭

            foreach (var item in listChannelPay)
            {
                if (item.State == 0 && item.KeyId != 2)
                {
                    isallnotChannel = false;
                }
            }
            //只获得可用通道
            listChannelPay = listChannelPay.FindAll(m => m.State == 0);
            if (mobile.Substring(0, 3) == "177")//17号段的用户排除荣邦通道
            {
                listChannelPay = listChannelPay.FindAll(m => m.KeyId != 1 && m.KeyId != 4);
            }
            //获得卡ID排除通道的配置 begin
            var listDebarBankChannel = MemcachHelper.Get <List <DebarBankChannel> >(Constant.debarbankchannel_key, DateTime.Now.AddDays(7), () =>
            {
                return(debarBankChannelDao.GetQuery(" 1=1  ", null, "order by CTime desc"));
            });
            var itemDebarBankChannel = listDebarBankChannel.FindAll(m => m.BankID == BankID);

            if (itemDebarBankChannel != null && itemDebarBankChannel.Count > 0)
            {
                foreach (var item in itemDebarBankChannel)
                {
                    listChannelPay = listChannelPay.FindAll(m => m.KeyId != item.ChannelID);
                }
            }
            //获得卡ID排除通道的配置 end

            Users user = usersDao.Single(UserId);
            var   rate = Constant.GetRate(PayType, (Logic.VipType)user.VipType);


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

            //遍历通道  取得可用通道
            foreach (var item in listChannelPay)
            {
                JObject  data       = JObject.Parse(item.Value);
                DateTime StartTime  = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + data["StartTime"]);
                DateTime EndTime    = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + data["EndTime"]);
                decimal  BasicRate1 = data["Rate1"].ToDecimal();
                decimal  BasicRate3 = data["Rate3"].ToDecimal();
                //判断通道是否是积分类型 并且满足时间范围 并且该通道支持改银行
                if (item.Value2 == PayType.ToString() && DateTime.Now > StartTime && DateTime.Now < EndTime && listBank.FindIndex(m => m.ChannelType == item.KeyId) > -1)
                {
                    ToolPay tp = new ToolPay(Amount, rate[0], rate[1], BasicRate1, BasicRate3);
                    dic.Add(item.KeyId.ToString(), tp.Income);
                }
            }
            if (dic.Count > 0)//计算最优利润
            {
                decimal maxIncom           = 0M;
                int     optimalChannelType = 0;
                foreach (var item in dic)
                {
                    if (maxIncom < item.Value || maxIncom == 0M)
                    {
                        maxIncom           = item.Value;
                        optimalChannelType = Convert.ToInt32(item.Key);
                    }
                }
                result.backState = 0;
                result.message   = $"匹配到最佳通道,收益:{maxIncom}";
                result.Data      = optimalChannelType;
                return(result);
            }

            if (isallnotChannel)
            {
                result.backState = -100;
                result.message   = "通道额度已用尽,请明日再试";
                return(result);
            }

            //未匹配成功,默认选第一条通道
            foreach (var item in listChannelPay)
            {
                if (item.Value2 == PayType.ToString())
                {
                    result.backState = -100;
                    result.message   = "未匹配到通道,请修改金额不超限额或选择支持的银行试试";
                    result.Data      = item.KeyId;


                    JObject  data      = JObject.Parse(item.Value);
                    DateTime StartTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + data["StartTime"]);
                    DateTime EndTime   = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + data["EndTime"]);
                    if (DateTime.Now < StartTime)
                    {
                        result.message = "未到通道开启时间";
                    }
                    if (DateTime.Now > EndTime)
                    {
                        result.message = "通道已关闭,请明天再试";
                    }
                    break;
                }
            }
            return(result);
        }
Пример #7
0
        public ActionResult Optimal()
        {
            ResultModelData <int> model = new ResultModelData <int>();

            return(View(model));
        }