private static RefundResult getRefundResult(RefundRequestProcess.RefundInfo refundInfo) { var result = new RefundResult { Success = refundInfo.RefundStatus == B3B.Common.Enums.RefundStatus.RefundSuccess, Account = refundInfo.Account, RefundTime = refundInfo.RefundTime, }; if (!result.Success) { result.ErrorMessage = refundInfo.RefundRemark; } var billRoles = new List <Distribution.Domain.Role.TradeRoleType>(); if (string.IsNullOrWhiteSpace(refundInfo.RefundRemark)) { billRoles.Add(Distribution.Domain.Role.TradeRoleType.Purchaser); } else { var roleType = typeof(Distribution.Domain.Role.TradeRoleType); var billRoleTexts = refundInfo.RefundRemark.Split(','); foreach (var tradeRole in billRoleTexts) { billRoles.Add((Distribution.Domain.Role.TradeRoleType)Enum.Parse(roleType, tradeRole, true)); } } result.Roles = billRoles; return(result); }
private static RefundResult getRefundResult(RefundInfo refundInfo, bool isRoyaltyBill) { var result = new RefundResult { Success = refundInfo.Status == RefundStatus.RefundSuccess, Account = isRoyaltyBill ? refundInfo.RefundAccount.AccountNo : refundInfo.IncomeAccount.AccountNo, RefundTime = refundInfo.RefundDate, }; if (!result.Success) { result.ErrorMessage = refundInfo.Description; } var billRoles = new List <Distribution.Domain.Role.TradeRoleType>(); if (string.IsNullOrWhiteSpace(refundInfo.ExtendParameter)) { billRoles.Add(Distribution.Domain.Role.TradeRoleType.Purchaser); } else { var roleType = typeof(Distribution.Domain.Role.TradeRoleType); var billRoleTexts = refundInfo.ExtendParameter.Split(','); foreach (var tradeRole in billRoleTexts) { billRoles.Add((Distribution.Domain.Role.TradeRoleType)Enum.Parse(roleType, tradeRole, true)); } } result.Roles = billRoles; return(result); }
private static string getRefundResponse(RefundResult refundInfo) { if (refundInfo == null) { return(string.Empty); } return(string.Format("退款账号:{0} 退款状态:{1} 退款时间:{2:yyyy-MM-dd}", refundInfo.Account, refundInfo.Success?"成功":"失败", refundInfo.RefundTime)); }
/// <summary> /// 改期退款 /// </summary> /// <param name="orderId">原订单号</param> /// <param name="refundBill">退款账单</param> internal static RefundResult Refund(decimal orderId, Distribution.Domain.Bill.Refund.PostponeRefundBill refundBill) { // 构建退款请求信息 var tradeRefundView = new TradeRefundDTO() { TradeNo = refundBill.Tradement.Payment.TradeNo, RefundBatchNo = refundBill.Tradement.TradeNo, TradeRefundType = RefundType.TradeRefund, RefundAmount = refundBill.Applier.Amount, RefundReason = RefundBusinessType.DenyPostpone.GetDescription() }; // 调用退款接口 #if (DEBUG) var refundBatch = ChinaPay.PoolPay.Service.AccountTradeService.TradeRefund(tradeRefundView); var result = new RefundResult() { Success = refundBatch.TradeRefund.Status == RefundStatus.RefundSuccess, Account = refundBatch.TradeRefund.IncomeAccount.AccountNo, RefundTime = refundBatch.TradeRefund.RefundDate }; #else RefundRequestProcess refundRequestProcess = new RefundRequestProcess(refundBill.Tradement.Payment.TradeNo, refundBill.Tradement.TradeNo, RefundBusinessType.DenyPostpone.GetDescription(), refundBill.Applier.Amount.ToString()); RefundResult result = new RefundResult(); if (refundRequestProcess.Execute()) { var refundInfo = RefundRequestProcess.ParseRefundInfo(refundRequestProcess.outPayer); result = new RefundResult() { Success = refundInfo.RefundStatus == Common.Enums.RefundStatus.RefundSuccess, Account = refundInfo.Account, RefundTime = refundInfo.RefundTime }; } #endif // 记录交互日志 var refundRequest = string.Format("支付交易流水号:{0} 退款批次号:{1} 退款类型:{2} 退款金额:{3} 退款原因:{4}", tradeRefundView.TradeNo, tradeRefundView.RefundBatchNo, tradeRefundView.TradeRefundType, tradeRefundView.RefundAmount, tradeRefundView.RefundReason); Service.LogService.SaveTradementLog(new TradementLog { OrderId = orderId, ApplyformId = refundBill.ApplyformId, Type = TradementBusinessType.Refund, Request = refundRequest, Response = getRefundResponse(result), Time = DateTime.Now, Remark = RefundBusinessType.DenyPostpone.GetDescription() }); // 如果退款失败,记录退款失败信息 var repository = Order.Repository.Factory.CreateRefundRepository(); if (result.Success) { repository.Delete(refundBill.ApplyformId); } else { repository.Save(new RefundFailedRecord() { OrderId = orderId, ApplyformId = refundBill.ApplyformId, BusinessType = RefundBusinessType.DenyPostpone, PayTradeNo = tradeRefundView.TradeNo, RefundFailedInfo = getRefundResponse(result), RefundTime = DateTime.Now }); } return(result); }
/// <summary> /// 交易退款 /// </summary> /// <param name="refundBill">退款账单</param> /// <param name="refundBusinessType">退款类型</param> internal static RefundResult TradeRefund(Distribution.Domain.Bill.Refund.NormalRefundBill refundBill, RefundBusinessType refundBusinessType) { // 构建退款请求信息 var tradeRefundView = new TradeRefundDTO() { TradeNo = refundBill.Tradement.Payment.TradeNo, RefundBatchNo = refundBill.Tradement.TradeNo, TradeRefundType = RefundType.TradeRefund, RefundAmount = refundBill.Purchaser.Amount, RefundReason = refundBusinessType.GetDescription() }; RefundResult result = null; var failedMessage = string.Empty; //RefundBatch refundBatch = null; try { // 调用退款接口 //refundBatch = PoolPay.Service.AccountTradeService.TradeRefund(tradeRefundView); //result = getRefundResult(refundBatch.TradeRefund, false); var refundRequestProcess = new RefundRequestProcess(tradeRefundView.TradeNo, tradeRefundView.RefundBatchNo, tradeRefundView.RefundReason, refundBill.Purchaser.Amount.ToString()); if (refundRequestProcess.Execute()) { result = getRefundResult(RefundRequestProcess.ParseRefundInfo(refundRequestProcess.outPayer)); } else { failedMessage = refundRequestProcess.Message; } } catch (Exception ex) { LogService.SaveExceptionLog(ex, "提交交易退款"); failedMessage = ex.Message; } // 记录交互日志 var refundRequest = string.Format("支付交易流水号:{0} 退款批次号:{1} 退款类型:{2} 退款金额:{3} 退款原因{4}", tradeRefundView.TradeNo, tradeRefundView.RefundBatchNo, tradeRefundView.TradeRefundType, tradeRefundView.RefundAmount, tradeRefundView.RefundReason); Service.LogService.SaveTradementLog(new TradementLog { OrderId = refundBill.OrderId, ApplyformId = refundBill.ApplyformId, Type = TradementBusinessType.Refund, Request = refundRequest, Response = result == null ? failedMessage : getRefundResponse(result), Time = DateTime.Now, Remark = refundBusinessType.GetDescription() }); // 如果退款失败,记录退款失败信息 var repository = Order.Repository.Factory.CreateRefundRepository(); if (result != null && result.Success) { repository.Delete(refundBill.ApplyformId); } else { repository.Save(new RefundFailedRecord() { OrderId = refundBill.OrderId, ApplyformId = refundBill.ApplyformId, BusinessType = refundBusinessType, PayTradeNo = tradeRefundView.TradeNo, RefundFailedInfo = failedMessage, RefundTime = DateTime.Now }); } return(result); }