Example #1
0
        public ActionResult PayDebitQuery()
        {
            int OrderId = TQuery.GetInt("OrderId");

            respPayDebitQueryModel result = new respPayDebitQueryModel();

            if (OrderId == 0)
            {
                result.backState = -100;
                result.respMsg   = "";
            }
            else
            {
                result = TengDepository.PayDebitQuery(OrderId, (int)Logic.Platform.系统);
            }
            return(View(result));
        }
Example #2
0
        private bool WithDrawHandle()
        {
            bool flag = false;

            if (listViewPayRecord != null && listViewPayRecord.Count > 0)
            {
                while (listViewPayRecord.Count > 0)
                {
                    var item = listViewPayRecord[0];

                    Logic.ChannelType Channel = (Logic.ChannelType)item.ChannelType;
                    ResultModel       result  = new ResultModel();
                    result.backState = -100;
                    string msg = "";
                    switch (Channel)
                    {
                    case Logic.ChannelType.易宝:
                        msg = "支付失败";
                        var yeepayResult = YeepayDepository.TradeReviceQuery(item.RequestId.ToString(), (int)Logic.Platform.系统);
                        if (yeepayResult.backState == 0 && yeepayResult.tradeReceives.Count > 0 && yeepayResult.tradeReceives[0].status == "SUCCESS")
                        {
                            result.backState = 0;
                            msg = "支付成功";
                        }
                        break;

                    case Logic.ChannelType.荣邦科技积分:
                    case Logic.ChannelType.荣邦3:
                        msg = "支付失败";
                        var masgettResult = MasgetDepository.PaymentjournalGet(item.RequestId, (int)Logic.Platform.系统, Channel);
                        if (masgettResult.backState == 0 && masgettResult.data.respcode == 2)
                        {
                            result.backState = 0;
                            msg = "支付成功";
                        }
                        break;

                    case Logic.ChannelType.荣邦科技无积分:
                        break;

                    case Logic.ChannelType.腾付通:
                        var TengResult = TengDepository.PayDebitQuery(item.RequestId, (int)Logic.Platform.系统);
                        if (TengResult.backState == 0 && TengResult.status == "3")
                        {
                            result.backState = 0;
                            msg = "支付成功";
                        }
                        else
                        {
                            msg = TengResult.respMsg;
                        }
                        break;

                    case Logic.ChannelType.米刷:
                        var mishuaResult = MiShuaDepository.CheckDzero(item.RequestId, Logic.Platform.系统);
                        if (mishuaResult.backState == 0 && mishuaResult.Data.status == "00" && mishuaResult.Data.qfStatus == "SUCCESS")
                        {
                            result.backState = 0;
                            msg = "支付成功";
                        }
                        break;

                    default:
                        break;
                    }
                    bool f = false;
                    //Logs.WriteLog($"处理数据:{JsonConvert.SerializeObject(result)}", "d:\\Log\\自动处理", "资金队列");
                    //处理数据
                    f = payRecordDao.UpdateState(item.ID, result.backState == 0 ? 10 : -1, msg);
                    if (f)
                    {
                        //交易成功回调
                        UsersDepository.NoticeSuccess(item.ID, item.UserId);

                        int num = Convert.ToInt32(_tbxWithDrawSuccess.Text);
                        num++;
                        _tbxWithDrawSuccess.Text = num.ToString();
                    }
                    else
                    {
                        int num = Convert.ToInt32(_tbxWithDrawFail.Text);
                        num++;
                        _tbxWithDrawFail.Text = num.ToString();
                    }


                    listViewPayRecord.Remove(item);
                    Thread.Sleep(ConfigInfo.theadTime);
                }
            }
            else
            {
                //两小时前的数据被处理
                listViewPayRecord = viewPayRecordDao.GetQuery(10, " State not in(10,-1) and DATEDIFF(HOUR,CTime,GETDATE())>2  ", null, "order by id asc");
                if (listViewPayRecord != null && listViewPayRecord.Count > 0)
                {
                    return(WithDrawHandle());
                }
            }
            return(flag);
        }
Example #3
0
        //1.0.0
        public string ReceiveApi2(int cid = 0, int UserId = 0, decimal Amount = 0m, int BankID = 0, int PayType = 0)
        {
            Logs.WriteLog($"ReceiveApi2,cid:{cid},UserId:{UserId},Amount:{Amount},BankID:{BankID},PayType:{PayType}", "d:\\Log\\Yeepay", "ReceiveApi2");
            userEventDao.UserReceiveApi2(cid, UserId, Ip.GetClientIp(), 0, TQuery.GetString("version"), Amount, BankID, PayType);
            #region 参数验证
            if (UserId <= 0)
            {
                return(ApiReturnStr.getError(-100, "UserId参数错误"));
            }
            if (Amount < 500)
            {
                return(ApiReturnStr.getError(-100, "收款金额不能小于500元"));
            }

            var ubk = userBankCardDao.Single(BankID);
            if (ubk == null)
            {
                return(ApiReturnStr.getError(-100, "卡记录不存在"));
            }

            //卡数据验证
            var validateBankResult = userBankCardDao.ValidateBank(ubk);
            if (validateBankResult.backState != 0)
            {
                return(ApiReturnStr.getError(-100, validateBankResult.message));
            }

            var model = userDao.Single(UserId);
            if (model == null || model.UserId <= 0)
            {
                return(ApiReturnStr.getError(-100, "用户不存在"));
            }

            JObject data = new JObject();
            data["PayUrl"] = "";

            string msg = "";



            #region 测试通道
            //Thread.Sleep(3000);
            //int ChannelType = 4;
            //data["ChannelType"] = ChannelType;
            //data["BankID"] = BankID;
            //return ApiReturnStr.getApiData(-200, $"快捷协议未开通(03-{ChannelType})", data);
            #endregion

            #region  择通道
            int ChannelType = 0;
            //data["ChannelType"] = ChannelType;
            data["BankID"] = BankID;

            var option = SelectOptionChannel.Optimal(Amount, BankID, PayType);
            if (option.backState == 0)
            {
                ChannelType         = option.Data;
                data["ChannelType"] = ChannelType;
            }
            else
            {
                if (option.Data == 2)
                {
                    return(ApiReturnStr.getError(-100, "通道升级中,敬请期待"));
                }
                return(ApiReturnStr.getError(-100, option.message));
            }
            data["ChannelType"] = option.Data;
            #endregion


            if (Amount > 20000)
            {
                return(ApiReturnStr.getError(-100, "收款金额不能超过20000元"));
            }

            Logic.ChannelType ct = (Logic.ChannelType)ChannelType;
            switch (ct)
            {
            case Logic.ChannelType.易宝:
                #region 易宝逻辑
                var yeepayUser = yeepayUserDao.Single(" UserId=@UserId ", new { UserId });
                if (yeepayUser == null || model.UserId <= 0)
                {
                    return(ApiReturnStr.getError(-100, "未开通子商户功能"));
                }
                if (yeepayUser.RateState1 == 0 || yeepayUser.RateState3 == 0 || yeepayUser.RateState4 == 0 || yeepayUser.RateState5 == 0)
                {
                    return(ApiReturnStr.getError(-100, "费率未设置"));
                }
                if (yeepayUser.IsAudit == 0)
                {
                    return(ApiReturnStr.getError(-100, "子商户未审核通过"));
                }
                var result = YeepayDepository.ReceiveApi(UserId, Amount, cid, BankID);
                if (result.backState == 0)
                {
                    data["PayUrl"] = result.urlAES;
                    return(ApiReturnStr.getApiData(data));
                }
                msg = result.message;
                #endregion
                break;

            case Logic.ChannelType.荣邦科技积分:
            case Logic.ChannelType.荣邦科技无积分:
            case Logic.ChannelType.荣邦3:
                if (ChannelType == 2)
                {
                    return(ApiReturnStr.getError(-100, "通道升级中,敬请期待"));
                }
                #region 荣邦逻辑
                #region 验证
                if (Amount < 500)
                {
                    return(ApiReturnStr.getError(-100, "此通道要求支付金额不得小于500元!"));
                }
                //验证是否开户
                if (!masgetUserDao.QueryIsExist(UserId, ChannelType))
                {
                    return(ApiReturnStr.getApiData(-200, $"快捷协议未开通(01-{ChannelType})", data));                                                     //通道未开户
                }
                if (!masgetUserDao.QueryIsOpen(UserId, ChannelType))
                {
                    return(ApiReturnStr.getApiData(-200, $"快捷协议未开通(02-{ChannelType})", data));                                                    //通道未入驻
                }
                //验证快捷协议是否开通
                if (!bankTreatyApplyDao.QueryTreatycodeIsOpen(BankID, ChannelType))
                {
                    return(ApiReturnStr.getApiData(-200, $"快捷协议未开通(03-{ChannelType})", data));
                }
                #endregion
                //执行请求
                var resultBackPay = MasgetDepository.BackPay(BankID, Amount, cid, ct);
                if (resultBackPay.backState == 0)
                {
                    data["PayUrl"] = resultBackPay.url;
                    return(ApiReturnStr.getApiData(0, "请求成功,待确认支付", data));
                }
                else if (resultBackPay.backState == 8401)
                {
                    return(ApiReturnStr.getError(-8401, "通道暂无额度"));
                }
                else
                {
                    return(ApiReturnStr.getError(-100, resultBackPay.message));
                }

                #endregion
            case Logic.ChannelType.腾付通:
                var resultTeng = TengDepository.CreatePayCashier(UserId, cid, Amount, BankID);
                msg = resultTeng.message;
                if (resultTeng.backState == 0)
                {
                    data["PayUrl"] = resultTeng.Data["url"];
                    return(ApiReturnStr.getApiData(data));
                }
                break;

            case Logic.ChannelType.米刷:
                var resultMi = MiShuaDepository.PayDzero(BankID, cid, Amount);
                msg = resultMi.message;
                if (resultMi.backState == 0 && resultMi.Data.status == "00")
                {
                    data["PayUrl"] = resultMi.Data.tranStr;
                    return(ApiReturnStr.getApiData(data));
                }
                break;

            default:
                break;
            }

            #endregion

            return(ApiReturnStr.getError(-100, msg));
        }
Example #4
0
        //腾付通  代付回调
        public string NoticeWithTeng()
        {
            string[] paramtersKey       = System.Web.HttpContext.Current.Request.Form.AllKeys;
            var      sortedParamtersKey = from s in paramtersKey
                                          orderby s ascending
                                          select s;
            StringBuilder str = new StringBuilder();

            str.Append("{");
            foreach (string key in sortedParamtersKey)
            {
                str.AppendFormat("\"{0}\":\"{1}\",", key, System.Web.HttpContext.Current.Request.Form[key].Trim());
            }
            if (str.Length > 0)
            {
                str.Remove(str.Length - 1, 1);//移除最后一个逗号
            }
            str.Append("}");

            //返回后日志记录
            Logs.WriteLog("页面首次记录:" + str.ToString(), "d:\\Log\\Teng", "NoticeWithTeng");

            lock (lockNoticeWithTeng)
            {
                string        result = "fail";
                respTengModel model  = new respTengModel();
                model.version  = TQuery.GetString("version");
                model.agentId  = TQuery.GetString("agentId");
                model.merId    = TQuery.GetString("merId");
                model.orderId  = TQuery.GetString("orderId");
                model.respCode = TQuery.GetString("respCode");
                model.respMsg  = TQuery.GetString("respMsg");
                model.sign     = TQuery.GetString("sign");

                //string json = "{\"agentId\":\"A1000000009\",\"merId\":\"1000000010\",\"orderId\":\"100001261\",\"respCode\":\"00\",\"respMsg\":\"成功\",\"sign\":\"C3735B3E932CA3335ED7258E9DB21524\",\"version\":\"1.0.0\"}";
                //model = JsonConvert.DeserializeObject<respTengModel>(json);
                bool flag = false;
                //返回后日志记录
                Logs.WriteLog("回调参数:" + JsonConvert.SerializeObject(model), "d:\\Log\\Teng", "NoticeWithTeng");
                yeepayLogParasDao.Init(Convert.ToInt32(model.orderId), JsonConvert.SerializeObject(model), 2);

                if (TengDepository.isSign(model))
                {
                    if (model.backState == 0)//处理成功
                    {
                        result = "SUCCESS";
                        var yeepayLog = yeepayLogDao.Single(Convert.ToInt32(model.orderId));
                        var pay       = payRecordDao.Single(yeepayLog.KeyId);
                        if (pay.State == 10)
                        {
                            Logs.WriteLog($"重复处理:State=10,orderId:{model.orderId},返回结果:{result}", "d:\\Log\\Teng", "NoticeWithTeng");
                            return(result);
                        }
                        pay.State      = 10;
                        pay.DrawState  = 10;
                        pay.UTime      = DateTime.Now;
                        pay.HandleTime = DateTime.Now;
                        flag           = payRecordDao.Update(pay);
                        Logs.WriteLog($"修改支付订单结果:flag={flag}", "d:\\Log\\Teng", "NoticeWithTeng");
                        //交易成功回调
                        UsersDepository.NoticeSuccess(pay.ID, pay.UserId);
                        yeepayLogDao.UpdateState(Convert.ToInt32(model.orderId), model.respCode, model.respMsg, 10);
                    }
                }
                else
                {
                    Logs.WriteLog($"签名比对失败:sign:{model.sign}", "d:\\Log\\Teng", "NoticeWithTeng");
                }
                Logs.WriteLog($"返回结果:{result}", "d:\\Log\\Teng", "NoticeWithTeng");
                return(result);
            }
        }
Example #5
0
        //腾付通  支付回调
        public string NoticePayTeng()
        {
            string[] paramtersKey       = System.Web.HttpContext.Current.Request.Form.AllKeys;
            var      sortedParamtersKey = from s in paramtersKey
                                          orderby s ascending
                                          select s;
            StringBuilder str = new StringBuilder();

            str.Append("{");
            foreach (string key in sortedParamtersKey)
            {
                str.AppendFormat("\"{0}\":\"{1}\",", key, System.Web.HttpContext.Current.Request.Form[key].Trim());
            }
            if (str.Length > 0)
            {
                str.Remove(str.Length - 1, 1);//移除最后一个逗号
            }
            str.Append("}");

            //返回后日志记录
            Logs.WriteLog("页面首次记录:" + str.ToString(), "d:\\Log\\Teng", "NoticePayTeng");

            lock (lockNoticePayTeng)
            {
                string        result = "fail";
                respTengModel model  = new respTengModel();
                model.version  = TQuery.GetString("version");
                model.agentId  = TQuery.GetString("agentId");
                model.merId    = TQuery.GetString("merId");
                model.orderId  = TQuery.GetString("orderId");
                model.respCode = TQuery.GetString("respCode");
                model.respMsg  = TQuery.GetString("respMsg");
                model.sign     = TQuery.GetString("sign");
                bool flag = false;
                //返回后日志记录
                Logs.WriteLog("回调参数:" + JsonConvert.SerializeObject(model), "d:\\Log\\Teng", "NoticePayTeng");
                yeepayLogParasDao.Init(Convert.ToInt32(model.orderId), JsonConvert.SerializeObject(model), 2);


                if (TengDepository.isSign(model))
                {
                    if (model.backState == 0)//处理成功
                    {
                        result = "SUCCESS";
                        var yeepayLog = yeepayLogDao.Single(Convert.ToInt32(model.orderId));
                        var pay       = payRecordDao.Single(yeepayLog.KeyId);
                        if (pay.State == 5)
                        {
                            Logs.WriteLog($"重复处理:orderId:{model.orderId},返回结果:{result}", "d:\\Log\\Teng", "NoticePayTeng");
                            return(result);
                        }
                        flag = payRecordDao.UpdateState(yeepayLog.KeyId, 5, "支付成功,等待回调");
                        Logs.WriteLog($"修改订单状态:支付成功,等待回调,orderId:{model.orderId},flag:{flag}", "d:\\Log\\Teng", "NoticePayTeng");

                        yeepayLogDao.UpdateState(Convert.ToInt32(model.orderId), model.respCode, model.respMsg, 5);

                        //发起代付申请
                        var ret = ITOrm.Payment.Teng.TengDepository.DebitWithdraw(yeepayLog.ID, (int)Logic.Platform.系统);
                        Logs.WriteLog($"代付申请:json:{JsonConvert.SerializeObject(ret)}", "d:\\Log\\Teng", "NoticePayTeng");
                    }
                }
                else
                {
                    Logs.WriteLog($"签名比对失败:sign:{model.sign},orderId:{model.orderId}", "d:\\Log\\Teng", "NoticePayTeng");
                }
                Logs.WriteLog($"返回结果:{result}", "d:\\Log\\Teng", "NoticePayTeng");
                return(result);
            }
        }
Example #6
0
        public string TengSendMsgCode(int payid)
        {
            var result = TengDepository.SendMsgCode(payid, (int)Logic.Platform.系统, Guid.NewGuid().ToString());

            return(JsonConvert.SerializeObject(result));
        }
Example #7
0
        public ActionResult TengCashier(int payid, string tengGuid, string code)
        {
            var payCashier = payCashierDao.Single(payid);
            var pay        = payRecordDao.Single(payCashier.PayRecordId);
            var ubk        = userBankCardDao.Single(payCashier.UbkId);

            JObject data = new JObject();

            data["amount"]      = pay.Amount.ToString("F2");
            data["ordernumber"] = payCashier.LogId;
            data["BankCode"]    = ubk.BankCode;
            data["BankName"]    = ubk.BankName;
            data["BankCard"]    = ubk.BankCard;
            data["Mobile"]      = ITOrm.Utility.StringHelper.Util.GetHiddenString(ubk.Mobile, 3, 4);
            ResultModel result = new ResultModel(data);

            if (!ITOrm.Utility.StringHelper.TypeParse.IsNumeric(code))
            {
                result.backState = -100;
                result.message   = "验证码必须为数字";
                return(View(result));
            }
            if (tengGuid.Length != 36)
            {
                result.backState = -100;
                result.message   = "未获取短信";
                return(View(result));
            }
            if (payCashier.State == 1)
            {
                result.backState = -200;
                result.message   = "订单已支付完成";
                return(View(result));
            }
            else if (payCashier.State == -1)
            {
                result.backState = -200;
                result.message   = "订单已过期";
                return(View(result));
            }


            var validResult = TengDepository.ValidateMobileCode(payid, (int)Logic.Platform.系统, tengGuid, code);

            if (validResult.backState == 0)//短信验证成功
            {
                //respTengModel payResult = new respTengModel();
                //payResult.respCode = "00";
                //payResult.respMsg = "支付成功";
                var payResult = TengDepository.DebitPayment(payid, (int)Logic.Platform.系统);
                //var payResult = JsonConvert.DeserializeObject<respTengModel>("{\"respCode\":\"E99999\",\"respMsg\":\"支付卡已超过有效期\",\"sign\":\"B231ED5797458C3D02374D14317E59EA\"}");
                userEventDao.UserEventInit((int)Logic.Platform.系统, payCashier.UserId, Ip.GetClientIp(), payResult.backState == 0 ? 1 : 0, "Pay", "TengCashier", $"{{payid:{payid},code:{code},tengGuid:{tengGuid}}}");
                if (payResult.backState == 0)//支付成功
                {
                    result.backState = 0;
                    result.message   = "支付成功";
                    return(new RedirectResult("/itapi/pay/success?backState=0&message=支付成功"));
                }
                result.backState = -100;
                result.message   = payResult.respMsg;
                return(View(result));
            }
            else//短信验证失败
            {
                result.backState = -100;
                result.message   = validResult.message;
                return(View(result));
            }
        }