public void Post() { string Data = DataObj.GetData(); if (Data.IsNullOrEmpty()) { DataObj.OutError("1000"); return; } JObject json = new JObject(); try { json = (JObject)JsonConvert.DeserializeObject(Data); } catch (Exception Ex) { Log.Write("[CreditCardAdd]:", "【Data】" + Data, Ex); } if (json == null) { DataObj.OutError("1000"); return; } UserCard UserCard = new UserCard(); UserCard = JsonToObject.ConvertJsonToModel(UserCard, json); UserTrack UserTrack = new UserTrack(); UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json); if (UserTrack.X.IsNullOrEmpty() || UserTrack.Y.IsNullOrEmpty()) { DataObj.OutError("1000"); return; } #region 基础验证 //获取用户信息 string Token = UserCard.Token; Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == Token); if (baseUsers == null)//用户令牌不存在 { DataObj.OutError("2004"); return; } if (baseUsers.State != 1)//用户被锁定 { DataObj.OutError("2003"); return; } if (baseUsers.CardStae != 2)//未实名认证 { DataObj.OutError("2006"); return; } string cardbin = UserCard.Card.Substring(0, 6); BasicCardBin BasicCardBin = this.Entity.BasicCardBin.Where(o => o.BIN == cardbin).FirstOrDefault(); if (BasicCardBin != null) { if (BasicCardBin.CardType != 2) { DataObj.Msg = "请使用信用卡绑定"; DataObj.OutError("1000"); return; } } else { DataObj.OutError("1103"); return; } #endregion //======================================= UserTrack.ENo = DataObj.ENo; UserTrack.OPType = "信用卡验证码"; UserTrack.GPSAddress = UserTrack.GPSAddress; UserTrack.GPSX = UserTrack.X; UserTrack.GPSY = UserTrack.Y; baseUsers.SeavGPSLog(UserTrack, Entity); //======================================= JobPayWay JobPayWay = Entity.JobPayWay.Where(n => n.State == 1 && n.GroupType == "Pay").OrderBy(n => n.Sort).FirstOrDefault();//目前只支持一条 if (JobPayWay == null) { DataObj.Msg = "暂无可用通道"; DataObj.OutError("1000"); return; } if (UserCard.ValidYear.Length == 4) { UserCard.ValidYear = UserCard.ValidYear.Substring(2, 2); } #region 第三方接口 string[] JobPayWayArr = JobPayWay.QueryArray.Split(','); bool Result = false; string RetMsg = ""; if (JobPayWay.DllName == "HLBPay" && JobPayWayArr.Length == 2) { #region 合利宝 string MerId = JobPayWayArr[0]; string MerKey = JobPayWayArr[1]; string postUrl = "http://pay.trx.helipay.com/trx/quickPayApi/interface.action"; string orderId = Guid.NewGuid().ToString("N"); Dictionary <string, string> map = new Dictionary <string, string>(); map.Add("P1_bizType", "QuickPayBindCardValidateCode"); map.Add("P2_customerNumber", MerId); map.Add("P3_userId", "HF_" + baseUsers.Id.ToString()); map.Add("P4_orderId", orderId); map.Add("P5_timestamp", DateTime.Now.ToString("yyyyMMddHHmmss")); map.Add("P6_cardNo", UserCard.Card); map.Add("P7_phone", UserCard.Mobile); //签名串,把参数值拼接 string data = Utils.CreateLinkString(map, false); //MD5签名KEY string sign = ("&" + data + "&" + MerKey).GetMD5(); map.Add("sign", sign); string send_data = Utils.CreateLinkString(map); string RetString = Utils.PostRequest(postUrl, send_data, "utf-8"); //================================================ //这里记录日志 JobLog JobLog = new JobLog(); JobLog.PayWay = JobPayWay.Id; JobLog.ReqNo = orderId; JobLog.TNum = ""; JobLog.Trade = ""; JobLog.Amount = 0; JobLog.Way = "SendCode"; JobLog.AddTime = DateTime.Now; JobLog.Data = RetString; JobLog.State = 1; Entity.JobLog.AddObject(JobLog); Entity.SaveChanges(); //================================================ JObject obj = new JObject(); try { obj = (JObject)JsonConvert.DeserializeObject(RetString); } catch (Exception) { Utils.WriteLog("[CreditCardAddCode]:" + RetString, "HLBPayError"); DataObj.OutError("1000"); return; } string rt2_retCode = obj["rt2_retCode"].ToString(); string rt3_retMsg = obj["rt3_retMsg"].ToString(); if (rt2_retCode == "0000") { Result = true; } else { Result = false; RetMsg = rt3_retMsg; Utils.WriteLog("[CreditCardAddCode]:" + RetString + "【" + send_data + "】", "HLBPayError"); } #endregion } else if (JobPayWay.DllName == "GHTPay" && JobPayWayArr.Length == 3) { #region //检测是否已开通商户 DateTime Today = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")); SysSet SysSet = Entity.SysSet.FirstOrNew(); //统计今天已经发送注册验证码次数 int Times = Entity.SMSCode.Count(n => n.UId == baseUsers.Id && n.Mobile == UserCard.Mobile && n.CType == 31 && n.AddTime >= Today); if (Times >= SysSet.SMSTimes) { DataObj.Msg = "获取验证码超过" + SysSet.SMSTimes + "次,请明天再试。"; DataObj.OutError("1000"); return; } if (Times > 0) { //第一次发送不获取,以节少系统资源 SMSCode SMSCode = Entity.SMSCode.Where(n => n.UId == baseUsers.Id && n.Mobile == UserCard.Mobile && n.CType == 31 && n.AddTime >= Today).OrderByDescending(n => n.Id).FirstOrDefault(); if (SMSCode.AddTime.AddMinutes(1) >= DateTime.Now) { //最后一次发送到现在不足1分钟 DataObj.Msg = "您操作太快了。"; DataObj.OutError("1000");; return; } } //失效之前获取验证码 IList <SMSCode> List = Entity.SMSCode.Where(n => n.UId == baseUsers.Id && n.Mobile == UserCard.Mobile && n.CType == 31 && n.State == 1).ToList(); foreach (var p in List) { p.State = 0; } Entity.SaveChanges(); //生成验证码 string Code = Utils.RandomSMSCode(4); SMSCode SSC = new SMSCode(); SSC.CType = 31; SSC.UId = baseUsers.Id; SSC.Mobile = UserCard.Mobile; SSC.Code = Code; SSC.AddTime = DateTime.Now; SSC.State = 1; Entity.SMSCode.AddObject(SSC); Entity.SaveChanges(); string Info = "您正在授权尾号{2}开通授权交易,验证码为{0},为了保护您的账户安全,验证码请勿转发他人,有效时间{1}分钟。"; Info = string.Format(Info, Code, SysSet.SMSActives, UserCard.Card.Substring(UserCard.Card.Length - 4, 4)); Info += "【好支付】"; SMSLog SMSLog = new SMSLog(); SMSLog.UId = baseUsers.Id; SMSLog.Mobile = UserCard.Mobile; SMSLog.SendText = Info; SMSLog.State = 1; SMSLog.AddTime = DateTime.Now; Entity.SMSLog.AddObject(SMSLog); Entity.SaveChanges(); Result = true; #endregion } else if (JobPayWay.DllName == "HFJSPay" && JobPayWayArr.Length == 3) { #region 结算系统 string Code = JobPayWayArr[0]; string CodeKey = JobPayWayArr[1]; string PayWayCode = JobPayWayArr[2]; #region 进件 JobUserPay JobUserPay = Entity.JobUserPay.FirstOrDefault(n => n.UId == baseUsers.Id && n.PayWay == JobPayWay.Id); if (JobUserPay == null) { JobUserPay = new JobUserPay(); JobUserPay.UId = baseUsers.Id; JobUserPay.PayWay = JobPayWay.Id; JobUserPay.AddTime = DateTime.Now; JobUserPay.MerState = 2; //状态 0锁定 1正常 2待提交 3审核中 4审核失败 JobUserPay.CardState = 2; //状态 0锁定 1正常 2待提交 3审核中 4审核失败 JobUserPay.BusiState = 2; //状态 1正常 2待提交 3审核中 4审核失败 Entity.JobUserPay.AddObject(JobUserPay); Entity.SaveChanges(); } if (JobUserPay.MerState == 2 || JobUserPay.MerState == 4) { fastuseraddModel model = new fastuseraddModel() { code = Code, mchid = "HF" + baseUsers.Id.ToString(), mchname = baseUsers.NeekName, truename = baseUsers.TrueName, cardno = baseUsers.CardId, accountcard = UserCard.Card, accountbin = BasicCardBin.BankCode, accountmobile = UserCard.Mobile }; fastuserResult fastuserResult = HFJSTools.fastuseradd(model, CodeKey); if (fastuserResult.respcode == "00") { if (fastuserResult.state == 1) { JobUserPay.MerState = 1; JobUserPay.CardState = 1;//这里已绑定结算卡 JobUserPay.MerId = fastuserResult.merid; JobUserPay.MerKey = fastuserResult.merkey; } else if (fastuserResult.state == 2) { JobUserPay.MerId = fastuserResult.merid; JobUserPay.MerKey = fastuserResult.merkey; JobUserPay.MerState = 3; } else { JobUserPay.MerState = 4; } } else { JobUserPay.MerState = 4; JobUserPay.MerMsg = fastuserResult.respcode + "[" + fastuserResult.respmsg + "]"; } Entity.SaveChanges(); } #endregion #region 开通道 if (JobUserPay.MerState == 1 && (JobUserPay.BusiState == 2 || JobUserPay.BusiState == 4)) { JobSet JobSet = Entity.JobSet.FirstOrNew(); //获取配置 decimal Cost = JobSet.Cost; //刷卡手续费 decimal Cash = JobSet.Cash; //还款手续费 userspayopenbModel userspayopenbModel = new userspayopenbModel() { merid = JobUserPay.MerId, paywaycode = PayWayCode, code = Code, bankcost = Cost, surcharge = Cash, cash = 0, bankcostmin = 1.2M, bankcostmax = 9999999 }; fastuserResult fastuserResult = HFJSTools.userspayopen(userspayopenbModel, CodeKey); if (fastuserResult.respcode == "00") { if (fastuserResult.state == 1) { JobUserPay.BusiState = 1; } else { JobUserPay.BusiState = 4; } } else { JobUserPay.BusiMsg = fastuserResult.respcode + "[" + fastuserResult.respmsg + "]"; } Entity.SaveChanges(); } #endregion #region 绑卡 if (JobUserPay.MerState == 1 && JobUserPay.CardState == 1 && JobUserPay.BusiState == 1) { fastcardbindModel fastcardbindModel = new fastcardbindModel() { action = "Add", merid = JobUserPay.MerId, bankcard = UserCard.Card, cvv2 = UserCard.CVV, mobile = UserCard.Mobile, month = UserCard.ValidMonth, year = UserCard.ValidYear }; ErrorCode errorCode = HFJSTools.fastcardbind(fastcardbindModel, JobUserPay.MerKey); if (errorCode.respcode == "00") { #region 发验证码 if (JobUserPay.MerState == 1 && JobUserPay.BusiState == 1 && JobUserPay.CardState == 1) { fastcardcodeModel fastcardcodeModel = new fastcardcodeModel() { bankcard = UserCard.Card, merid = JobUserPay.MerId, paywaycode = PayWayCode }; ErrorCode errorcode = HFJSTools.fastcardcode(fastcardcodeModel, JobUserPay.MerKey); if (errorcode.respcode == "00") { Result = true; } else { Result = false; RetMsg = errorcode.respmsg; } } else { Result = false; RetMsg = errorCode.respmsg; } #endregion } else { Result = false; RetMsg = errorCode.respmsg; } Entity.SaveChanges(); } else { Result = false; RetMsg = "商户入驻失败"; } #endregion #endregion } #endregion if (Result) { DataObj.OutError("0000"); } else { DataObj.Msg = RetMsg; DataObj.OutError("1010"); } }
/// <summary> /// 刷还系统通知 /// </summary> public void Notice() { string Resp = Request.Form["resp"]; string Sign = Request.Form["sign"]; string SignStr = Resp; Resp = LokFuEncode.Base64Decode(Resp, "utf-8"); JObject json = new JObject(); try { json = (JObject)JsonConvert.DeserializeObject(Resp); } catch (Exception Ex) { Response.Write(Ex.ToString()); return; } if (json == null) { Response.Write("Json Null"); return; } string resultcode = json["resultcode"].ToString(); //交易结果码 string resultmsg = json["resultmsg"].ToString(); //交易结果信息 string queryid = json["queryid"].ToString(); //交易流水号 string txnamt = json["txnamt"].ToString(); //交易金额\ string merid = json["merid"].ToString(); //交易金额 string orderid = json["orderid"].ToString(); //交易金额 JobItem JobItem = this.Entity.JobItem.FirstOrDefault(o => o.RunNum == orderid); if (JobItem == null) { Response.Write("E1"); return; } if (JobItem.State != 2) { Response.Write("S1"); return; } if (JobItem.RunState != 0 && JobItem.RunState != 2) { Response.Write("S2"); return; } JobUserPay JobUserPay = Entity.JobUserPay.FirstOrDefault(n => n.PayWay == JobItem.PayWay && n.UId == JobItem.UId); if (JobUserPay == null) { Response.Write("E2"); return; } string MD5Str = SignStr + JobUserPay.MerKey; string sign = MD5Str.GetMD5(); //================================================ //这里记录日志 JobLog JobLog = new JobLog(); JobLog.PayWay = JobItem.PayWay; JobLog.ReqNo = JobItem.RunNum; JobLog.TNum = JobItem.TNum; JobLog.Trade = ""; JobLog.Amount = JobItem.RunMoney; JobLog.Way = "Notice"; JobLog.AddTime = DateTime.Now; JobLog.Data = Request.Form.ToString(); JobLog.State = 1; Entity.JobLog.AddObject(JobLog); Entity.SaveChanges(); //================================================ if (Sign != sign) { Response.Write("E2"); return; } if (JobUserPay.MerId != merid) { Response.Write("E1"); return; } if (resultcode == "0000") { JobItem = JobItem.PaySuccess(Entity); } if (resultcode == "1004") { JobItem = JobItem.PayFail(Entity); } Response.Write("0000"); }
public void Post() { string Data = DataObj.GetData(); if (Data.IsNullOrEmpty()) { DataObj.OutError("1000"); return; } JObject json = new JObject(); try { json = (JObject)JsonConvert.DeserializeObject(Data); } catch (Exception Ex) { Log.Write("[CreditCardAdd]:", "【Data】" + Data, Ex); } if (json == null) { DataObj.OutError("1000"); return; } UserCard UserCard = new UserCard(); UserCard = JsonToObject.ConvertJsonToModel(UserCard, json); UserTrack UserTrack = new UserTrack(); UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json); if (UserTrack.X.IsNullOrEmpty() || UserTrack.Y.IsNullOrEmpty()) { DataObj.OutError("1000"); return; } string Token = UserCard.Token; if (!UserCard.Card.IsNullOrEmpty() && !UserCard.ValidYear.IsNullOrEmpty() && !UserCard.ValidMonth.IsNullOrEmpty() && !UserCard.CVV.IsNullOrEmpty() && !UserCard.Mobile.IsNullOrEmpty() && !UserCard.BillDay.IsNullOrEmpty() && !UserCard.BillDay.IsNullOrEmpty() && !UserCard.ValidateCode.IsNullOrEmpty()) { if (UserCard.ValidYear.Length == 4) { UserCard.ValidYear = UserCard.ValidYear.Substring(UserCard.ValidYear.Length - 2, 2); } } else { DataObj.OutError("1000"); return; } if (UserCard.Card.Length < 6) { DataObj.OutError("1000"); return; } #region 基础验证 //获取用户信息 Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == Token); if (baseUsers == null)//用户令牌不存在 { DataObj.OutError("2004"); return; } if (baseUsers.State != 1)//用户被锁定 { DataObj.OutError("2003"); return; } if (baseUsers.CardStae != 2)//未实名认证 { DataObj.OutError("2006"); return; } UserBlackList UserBlackList = Entity.UserBlackList.FirstOrDefault(UBL => UBL.CardNumber == UserCard.Card && UBL.State == 3); if (UserBlackList != null) { //提示暂不支持该卡绑定 DataObj.OutError("2017"); return; } UserCard UserCard_ = Entity.UserCard.FirstOrDefault(n => n.UId == baseUsers.Id && n.Card == UserCard.Card && n.Type == 2 && n.State == 1);//信用卡已绑定 if (UserCard_ != null) { DataObj.OutError("2015"); return; } UserCard.Card = UserCard.Card.Replace(" ", ""); string cardbin = UserCard.Card.Substring(0, 6); var BasicCardBin = this.Entity.BasicCardBin.Where(o => o.BIN == cardbin).FirstOrDefault(); if (BasicCardBin == null) { byte UsedCardType = this.GetCardType(UserCard.Card); if (UsedCardType == 0) { DataObj.OutError("7005");//查询次数用完了 return; } else if (UsedCardType != 2) { DataObj.Msg = "请使用信用卡绑定"; DataObj.OutError("1000"); return; } } else { if (BasicCardBin.CardType != 2) { DataObj.Msg = "请使用信用卡绑定"; DataObj.OutError("1000"); return; } } BasicBank BasicBank = Entity.BasicBank.FirstOrDefault(n => n.Name == UserCard.Bank); if (BasicBank == null) { DataObj.OutError("1000"); return; } else { if (BasicBank.BIN.IsNullOrEmpty()) { DataObj.Msg = "卡BIN未设置"; DataObj.OutError("1000"); return; } } #endregion UserCard.Type = 2; UserCard.BId = BasicBank.Id; UserCard.Bin = BasicBank.BIN; UserCard.UId = baseUsers.Id; UserCard.Name = baseUsers.TrueName; //======================================= UserTrack.ENo = DataObj.ENo; UserTrack.OPType = "添加信用卡"; UserTrack.GPSAddress = UserTrack.GPSAddress; UserTrack.GPSX = UserTrack.X; UserTrack.GPSY = UserTrack.Y; baseUsers.SeavGPSLog(UserTrack, Entity); //======================================= string RetString = ""; //三方接口返回数据 string bindId = string.Empty; //绑卡需记录字符串 bool IsSuccess = false; //绑卡状态 JobPayWay JobPayWay = Entity.JobPayWay.Where(n => n.State == 1 && n.GroupType == "Pay").OrderBy(n => n.Sort).FirstOrDefault(); //目前只支持一条 if (JobPayWay == null) { DataObj.Msg = "暂无可用通道"; DataObj.OutError("1000"); return; } #region 第三方鉴权 string[] JobPayWayArr = JobPayWay.QueryArray.Split(','); if (JobPayWay.DllName == "HLBPay" && JobPayWayArr.Length == 2) { #region 合利宝 string MerId = JobPayWayArr[0]; string MerKey = JobPayWayArr[1]; string postUrl = "http://pay.trx.helipay.com/trx/quickPayApi/interface.action"; string orderId = Guid.NewGuid().ToString("N"); Dictionary <string, string> map = new Dictionary <string, string>(); map.Add("P1_bizType", "QuickPayBindCard"); map.Add("P2_customerNumber", MerId); map.Add("P3_userId", "HF_" + baseUsers.Id.ToString()); //用户ID唯一 map.Add("P4_orderId", orderId); map.Add("P5_timestamp", DateTime.Now.ToString("yyyyMMddHHmmss")); map.Add("P6_payerName", baseUsers.TrueName); map.Add("P7_idCardType", "IDCARD"); //IDCARD:身份证 map.Add("P8_idCardNo", baseUsers.CardId); //身份证 map.Add("P9_cardNo", UserCard.Card); //银行卡 map.Add("P10_year", UserCard.ValidYear); //当银行卡是信用卡时必输 信用卡有效期年 map.Add("P11_month", UserCard.ValidMonth); //当银行卡是信用卡时必输 信用卡有效期月 map.Add("P12_cvv2", UserCard.CVV); //当银行卡是信用卡时必输 信用卡有效期月 map.Add("P13_phone", UserCard.Mobile); map.Add("P14_validateCode", UserCard.ValidateCode); //选填 鉴权绑卡短信接口下发给用户的短信 //签名串,把参数值拼接 string data = Utils.CreateLinkString(map, false); //MD5签名KEY string sign = ("&" + data + "&" + MerKey).GetMD5(); map.Add("sign", sign); if (map["P6_payerName"] != null) //编码 { map.Remove("P6_payerName"); map.Add("P6_payerName", HttpUtility.UrlEncode(baseUsers.TrueName)); } string send_data = Utils.CreateLinkString(map); RetString = Utils.PostRequest(postUrl, send_data, "utf-8"); //================================================ //这里记录日志 JobLog JobLog = new JobLog(); JobLog.PayWay = JobPayWay.Id; JobLog.ReqNo = orderId; JobLog.TNum = baseUsers.Mobile; JobLog.Trade = ""; JobLog.Amount = 0; JobLog.Way = "CardAdd"; JobLog.AddTime = DateTime.Now; JobLog.Data = RetString; JobLog.State = 1; Entity.JobLog.AddObject(JobLog); Entity.SaveChanges(); //================================================ JObject obj = new JObject(); try { obj = (JObject)JsonConvert.DeserializeObject(RetString); } catch (Exception) { Utils.WriteLog("[CreditCardAdd]:" + RetString, "HLBPayError"); DataObj.OutError("1000"); return; } string rt2_retCode = obj["rt2_retCode"].ToString(); string rt3_retMsg = obj["rt3_retMsg"].ToString(); if (rt2_retCode == "0000") { string rt7_bindStatus = obj["rt7_bindStatus"].ToString(); //绑卡状态结果 /成功/失败 if (rt7_bindStatus == "SUCCESS") { IsSuccess = true; bindId = obj["rt10_bindId"].ToString(); } else { DataObj.Msg = rt3_retMsg; DataObj.OutError("1010"); return; } } else { DataObj.Msg = rt3_retMsg; DataObj.OutError("1010"); return; } #endregion } else if (JobPayWay.DllName == "HFJSPay" && JobPayWayArr.Length == 3) { #region 结算系统 string Code = JobPayWayArr[0]; string CodeKey = JobPayWayArr[1]; string PayWayCode = JobPayWayArr[2]; JobUserPay JobUserPay = Entity.JobUserPay.FirstOrDefault(n => n.UId == baseUsers.Id && n.PayWay == JobPayWay.Id); fastcardauthModel fastcardauthModel = new fastcardauthModel() { bankcard = UserCard.Card, mcode = UserCard.ValidateCode, merid = JobUserPay.MerId, paywaycode = PayWayCode }; ErrorCode errorCode = HFJSTools.fastcardauth(fastcardauthModel, JobUserPay.MerKey); if (errorCode.respcode == "00") { IsSuccess = true; } else { DataObj.Msg = errorCode.respmsg; DataObj.OutError("1010"); return; } #endregion } #endregion if (IsSuccess) { //系统要限制每条通道每张卡只能存在一个授权,所以这里要处理 UserCardOpen UserCardOpen = Entity.UserCardOpen.FirstOrDefault(n => n.CardNum == UserCard.Card && n.UId == baseUsers.Id && n.PayWay == JobPayWay.Id); if (UserCardOpen == null) { UserCardOpen = new UserCardOpen() { UId = baseUsers.Id, CardNum = UserCard.Card, Mobile = UserCard.Mobile, PayWay = JobPayWay.Id, State = 1, STime = new DateTime(1990, 1, 1), ETime = new DateTime(2099, 1, 1), Token = bindId, RqData = RetString }; Entity.UserCardOpen.AddObject(UserCardOpen); } else { UserCardOpen.Mobile = UserCard.Mobile; UserCardOpen.State = 1; UserCardOpen.Token = bindId; UserCardOpen.RqData = RetString; } UserCard.Pic = string.Empty; UserCard.ScanNo = string.Empty; UserCard.State = 1; UserCard.Deposit = string.Empty; Entity.UserCard.AddObject(UserCard); Entity.SaveChanges(); } DataObj.OutError("0000"); }