Esempio n. 1
0
        /// <summary>
        /// 请求后台接口
        /// </summary>
        /// <param name="msg"></param>
        private static void DoBackEndRequest(BackEndReqMsg msg)
        {
            Agp2pDataContext context = new Agp2pDataContext();
            var requestLog           = new li_pay_request_log
            {
                id           = msg.RequestId,
                user_id      = msg.UserId,
                project_id   = msg.ProjectCode,
                api          = msg.Api,
                status       = (int)Agp2pEnums.SumapayRequestEnum.Waiting,
                request_time = DateTime.Now,
                remarks      = msg.Remarks,
            };

            try
            {
                //创建交易记录
                switch (requestLog.api)
                {
                //放款请求
                case (int)Agp2pEnums.SumapayApiEnum.ALoan:
                case (int)Agp2pEnums.SumapayApiEnum.CLoan:
                    var makeLoanReqMsg = (MakeLoanReqMsg)msg;
                    var project        = context.li_projects.SingleOrDefault(p => p.id == makeLoanReqMsg.ProjectCode);
                    //非活期和新手标项目计算平台服务费
                    if (project != null && !project.IsNewbieProject1())
                    {
                        decimal loanFee = decimal.Round(project.investment_amount * (project.loan_fee_rate) ?? 0, 2, MidpointRounding.AwayFromZero);
                        decimal bondFee = decimal.Round(project.investment_amount * (project.bond_fee_rate) ?? 0, 2, MidpointRounding.AwayFromZero);
                        makeLoanReqMsg.SetSubledgerList(loanFee + bondFee);
                    }
                    else
                    {
                        throw new ArgumentNullException("没有找到项目, ID=" + makeLoanReqMsg.ProjectCode);
                    }
                    break;
                }
                //生成发送报文
                msg.RequestContent         = msg.GetPostPara();
                requestLog.request_content = msg.RequestContent;
                //保存日志
                context.li_pay_request_log.InsertOnSubmit(requestLog);
                context.SubmitChanges();
                //发送请求
                msg.SynResult = Utils.HttpPostGbk(msg.ApiInterface, requestLog.request_content);
            }
            catch (Exception ex)
            {
                requestLog.remarks = ex.Message;
                context.li_pay_request_log.InsertOnSubmit(requestLog);
                context.SubmitChanges();
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 处理托管接口请求响应
        /// </summary>
        /// <param name="isSync">是否同步返回</param>
        protected void DoResponse(bool isSync = false)
        {
            Agp2pDataContext context = new Agp2pDataContext();

            try
            {
                string reqStr = ReadReqStr();
                ResponseLog = new li_pay_response_log()
                {
                    request_id       = string.IsNullOrEmpty(Request["requestId"]) ? null : Request["requestId"],
                    result           = string.IsNullOrEmpty(Request["result"]) ? "" : Request["result"],
                    status           = (int)Agp2pEnums.SumapayResponseEnum.Return,
                    response_time    = DateTime.Now,
                    response_content = reqStr
                };
                if (!string.IsNullOrEmpty(ResponseLog.request_id))
                {
                    //根据响应报文找到对应的request,生成处理消息,对应各种消息处理逻辑
                    RequestLog =
                        context.li_pay_request_log.SingleOrDefault(r => r.id == ResponseLog.request_id);
                    if (RequestLog != null)
                    {
                        //检查请求是否已经处理过
                        if (RequestLog.status != (int)Agp2pEnums.SumapayRequestEnum.Complete)
                        {
                            BaseRespMsg respMsg = null;
                            switch (RequestLog.api)
                            {
                            //个人/企业 开户/激活
                            case (int)Agp2pEnums.SumapayApiEnum.URegi:
                            case (int)Agp2pEnums.SumapayApiEnum.URegM:
                            case (int)Agp2pEnums.SumapayApiEnum.Activ:
                            case (int)Agp2pEnums.SumapayApiEnum.CRegi:
                                respMsg = new UserRegisterRespMsg(reqStr);
                                break;

                            //个人自动投标续约
                            case (int)Agp2pEnums.SumapayApiEnum.AtBid:
                                respMsg = new AutoBidSignRespMsg(reqStr);
                                break;

                            //个人自动投标取消
                            case (int)Agp2pEnums.SumapayApiEnum.ClBid:
                                respMsg = new AutoBidSignRespMsg(reqStr, true);
                                break;

                            //个人/企业 自动账户/银行还款开通
                            case (int)Agp2pEnums.SumapayApiEnum.AcReO:
                            case (int)Agp2pEnums.SumapayApiEnum.CcReO:
                            case (int)Agp2pEnums.SumapayApiEnum.AbReO:
                                respMsg = new AutoRepaySignRespMsg(reqStr);
                                break;

                            //个人/企业 自动还款取消
                            case (int)Agp2pEnums.SumapayApiEnum.ClRep:
                            case (int)Agp2pEnums.SumapayApiEnum.CancR:
                                respMsg = new AutoRepaySignRespMsg(reqStr, true);
                                break;

                            //企业/个人网银充值
                            case (int)Agp2pEnums.SumapayApiEnum.WeRec:
                            case (int)Agp2pEnums.SumapayApiEnum.CeRec:
                                respMsg = new RechargeRespMsg(reqStr);
                                break;

                            //个人一键充值
                            case (int)Agp2pEnums.SumapayApiEnum.WhRec:
                            case (int)Agp2pEnums.SumapayApiEnum.WhReM:
                                respMsg = new WithholdingRechargeRespMsg(reqStr);
                                break;

                            //个人投标/自动投标 普通/集合项目
                            case (int)Agp2pEnums.SumapayApiEnum.MaBid:
                            case (int)Agp2pEnums.SumapayApiEnum.McBid:
                            case (int)Agp2pEnums.SumapayApiEnum.MaBiM:
                            case (int)Agp2pEnums.SumapayApiEnum.McBiM:
                            case (int)Agp2pEnums.SumapayApiEnum.AmBid:
                            case (int)Agp2pEnums.SumapayApiEnum.AcBid:
                                respMsg = new BidRespMsg(reqStr);
                                break;

                            //个人撤标
                            case (int)Agp2pEnums.SumapayApiEnum.CaPro:
                            case (int)Agp2pEnums.SumapayApiEnum.CoPro:
                                respMsg = new WithDrawalRespMsg(reqStr);
                                break;

                            //流标普通项目
                            case (int)Agp2pEnums.SumapayApiEnum.RePro:
                                respMsg = new RepealProjectRespMsg(reqStr);
                                break;

                            //普通/集合项目放款
                            case (int)Agp2pEnums.SumapayApiEnum.ALoan:
                            case (int)Agp2pEnums.SumapayApiEnum.CLoan:
                                respMsg = new MakeLoanRespMsg(reqStr);
                                break;

                            //个人/企业提现
                            case (int)Agp2pEnums.SumapayApiEnum.Wdraw:
                            case (int)Agp2pEnums.SumapayApiEnum.Cdraw:
                            case (int)Agp2pEnums.SumapayApiEnum.WdraM:
                                respMsg = new WithdrawRespMsg(reqStr, isSync);
                                break;

                            //个人/企业 存管账户还款普通/集合项目
                            case (int)Agp2pEnums.SumapayApiEnum.MaRep:
                            case (int)Agp2pEnums.SumapayApiEnum.McRep:
                            case (int)Agp2pEnums.SumapayApiEnum.CaRep:
                            case (int)Agp2pEnums.SumapayApiEnum.CoRep:
                                respMsg = new RepayRespMsg(reqStr);
                                break;

                            //个人协议还款普通/集合项目
                            case (int)Agp2pEnums.SumapayApiEnum.BaRep:
                            case (int)Agp2pEnums.SumapayApiEnum.BcRep:
                                respMsg = new RepayRespMsg(reqStr, true);
                                break;

                            //个人自动还款普通/集合项目
                            case (int)Agp2pEnums.SumapayApiEnum.AcRep:
                            case (int)Agp2pEnums.SumapayApiEnum.AbRep:
                            case (int)Agp2pEnums.SumapayApiEnum.CcRep:
                            case (int)Agp2pEnums.SumapayApiEnum.CbRep:
                                respMsg = new RepayRespMsg(reqStr, false, true);
                                break;

                            //普通/集合项目本息到账
                            case (int)Agp2pEnums.SumapayApiEnum.RetPt:
                            case (int)Agp2pEnums.SumapayApiEnum.RetCo:
                                respMsg = new ReturnPrinInteRespMsg(reqStr);
                                break;

                            //债权转让
                            case (int)Agp2pEnums.SumapayApiEnum.CreAs:
                            case (int)Agp2pEnums.SumapayApiEnum.CreAM:
                                respMsg = new CreditAssignmentRespMsg(reqStr);
                                break;

                            //查询项目
                            case (int)Agp2pEnums.SumapayApiEnum.QuPro:
                                respMsg = BaseRespMsg.NewInstance <QueryProjectRespMsg>(reqStr);
                                break;

                            //银行卡解绑
                            case (int)Agp2pEnums.SumapayApiEnum.RemCa:
                                respMsg = new RemoveCardRespMsg(reqStr);
                                break;

                            //红包付款至用户
                            case (int)Agp2pEnums.SumapayApiEnum.HbPay:
                                respMsg = new HongbaoPayRespMsg(reqStr);
                                break;

                            default:
                                respMsg = new BaseRespMsg();
                                break;
                            }

                            //发送响应消息处理
                            MessageBus.Main.Publish(respMsg);
                            //更新日志信息
                            ResponseLog.user_id      = respMsg.UserIdIdentity;
                            ResponseLog.project_id   = respMsg.ProjectCode;
                            RequestLog.complete_time = DateTime.Now;
                            if (respMsg.HasHandle)
                            {
                                ResponseLog.status = (int)Agp2pEnums.SumapayResponseEnum.Complete;
                                RequestLog.status  = (int)Agp2pEnums.SumapayRequestEnum.Complete;
                            }
                            else
                            {
                                ResponseLog.status = (int)Agp2pEnums.SumapayResponseEnum.Invalid;
                                RequestLog.status  = (int)Agp2pEnums.SumapayRequestEnum.Fail;
                                //记录失败信息
                                ResponseLog.remarks += respMsg.Remarks;
                            }
                            context.li_pay_response_log.InsertOnSubmit(ResponseLog);
                        }
                    }
                    else
                    {
                        context.AppendAdminLog("SumaPayNotic", "没有找到对应的请求,RequestID:" + ResponseLog.request_id);
                    }
                }
                else
                {
                    context.AppendAdminLog("SumaPayNotic", "请求流水号为空!返回报文为:" + reqStr);
                }
            }
            catch (Exception ex)
            {
                context.AppendAdminLog("SumaPayNotic", "noticeUrl 内部错误:" + ex.Message);
            }
            //解决错误“找不到行或已修改”
            try
            {
                context.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict);
            }
            catch (System.Data.Linq.ChangeConflictException ex)
            {
                //不再提交数据更新
                new Agp2pDataContext().AppendAdminLogAndSave("SumaPayNotic", "noticeUrl 找不到行或已修改:" + ex.Message);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 请求前台接口
        /// </summary>
        /// <param name="msg"></param>
        private static void DoFrontEndRequest(FrontEndReqMsg msg)
        {
            Agp2pDataContext context = new Agp2pDataContext();
            var requestLog           = new li_pay_request_log
            {
                id              = msg.RequestId,
                user_id         = msg.UserId,
                project_id      = msg.ProjectCode,
                api             = msg.Api,
                status          = (int)Agp2pEnums.SumapayRequestEnum.Waiting,
                request_time    = DateTime.Now,
                remarks         = msg.Remarks,
                request_content = ""
            };

            try
            {
                //创建交易流水
                switch (requestLog.api)
                {
                case (int)Agp2pEnums.SumapayApiEnum.WeRec:
                case (int)Agp2pEnums.SumapayApiEnum.CeRec:
                    //网银充值
                    context.Charge((int)requestLog.user_id, Utils.StrToDecimal(((WebRechargeReqMsg)msg).Sum, 0),
                                   Agp2pEnums.PayApiTypeEnum.Sumapay, "丰付网银支付", msg.RequestId);
                    break;

                case (int)Agp2pEnums.SumapayApiEnum.WhRec:
                case (int)Agp2pEnums.SumapayApiEnum.WhReM:
                    //快捷充值
                    context.Charge((int)requestLog.user_id, Utils.StrToDecimal(((WhRechargeReqMsg)msg).Sum, 0),
                                   Agp2pEnums.PayApiTypeEnum.SumapayQ, "丰付一键支付", msg.RequestId);
                    break;

                case (int)Agp2pEnums.SumapayApiEnum.Wdraw:
                case (int)Agp2pEnums.SumapayApiEnum.Cdraw:
                case (int)Agp2pEnums.SumapayApiEnum.WdraM:
                    //提现
                    var withdrawReqMsg = (WithdrawReqMsg)msg;
                    requestLog.remarks = withdrawReqMsg.BankId;
                    //context.Withdraw(Utils.StrToInt(withdrawReqMsg.BankId, 0),
                    //    Utils.StrToDecimal(withdrawReqMsg.Sum, 0), withdrawReqMsg.RequestId);
                    break;

                //债权转让
                case (int)Agp2pEnums.SumapayApiEnum.CreAs:
                case (int)Agp2pEnums.SumapayApiEnum.CreAM:
                    var creditAssignmentReqMsg = (CreditAssignmentReqMsg)msg;
                    //通过债权找出对应的投资信息
                    var claim = context.li_claims.SingleOrDefault(c => c.id == creditAssignmentReqMsg.ClaimId);
                    creditAssignmentReqMsg.AssignmentSum =
                        (claim.principal + claim.keepInterest.GetValueOrDefault(0)).ToString();
                    creditAssignmentReqMsg.ProjectCode        = claim.projectId;
                    creditAssignmentReqMsg.ProjectDescription = claim.li_projects.title;
                    requestLog.project_id = claim.projectId;
                    //计算手续费
                    var staticWithdrawCostPercent = ConfigLoader.loadCostConfig().static_withdraw;
                    var finalCost =
                        Math.Round(
                            Utils.StrToDecimal(creditAssignmentReqMsg.UndertakeSum, 0) * staticWithdrawCostPercent, 2);
                    //父债权才有原投资流水号
                    var rooClaim = claim.GetRootClaim();
                    creditAssignmentReqMsg.OriginalOrderSum =
                        rooClaim.li_project_transactions_invest.principal.ToString("f");
                    creditAssignmentReqMsg.OriginalRequestId = rooClaim.li_project_transactions_invest.no_order;
                    creditAssignmentReqMsg.SetSubledgerList(finalCost, claim.userId.ToString());
                    break;

                case (int)Agp2pEnums.SumapayApiEnum.MaBid:
                case (int)Agp2pEnums.SumapayApiEnum.MaBiM:
                    //投资
                    var manualBidReqMsg = (ManualBidReqMsg)msg;
                    //TransactionFacade.Invest((int)requestLog.user_id, Utils.StrToInt(manualBidReqMsg.ProjectCode, 0), Utils.StrToDecimal(manualBidReqMsg.Sum, 0), manualBidReqMsg.RequestId);
                    var jiaxiquan = new li_jiaxiquan_transaction
                    {
                        userId    = (int)msg.UserId,
                        type      = (int)Agp2pEnums.InvestInterestRateTypeEnum.Invest,
                        requestId = msg.RequestId,
                        remarks   = msg.Remarks
                    };
                    context.li_jiaxiquan_transaction.InsertOnSubmit(jiaxiquan);

                    context.InvestConfirm((int)requestLog.user_id, manualBidReqMsg.ProjectCode,
                                          Utils.StrToDecimal(manualBidReqMsg.Sum, 0), manualBidReqMsg.RequestId);

                    context.SubmitChanges();

                    break;
                }
                //生成发送报文
                msg.RequestContent         = BuildFormHtml(msg.GetSubmitPara(), msg.ApiInterface);
                requestLog.request_content = msg.RequestContent;
                //保存日志
                context.li_pay_request_log.InsertOnSubmit(requestLog);
                context.SubmitChanges();
            }
            catch (Exception ex)
            {
                requestLog.remarks = ex.Message;
                context.li_pay_request_log.InsertOnSubmit(requestLog);
                context.SubmitChanges();
            }
        }