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); }
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}®Guid={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)); }
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)); }
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); }
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); }
/// <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); }
public ActionResult Optimal() { ResultModelData <int> model = new ResultModelData <int>(); return(View(model)); }