/// <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(); } }
/// <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); } }
/// <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(); } }