/// <summary> /// 统一支付(支持各个渠道) /// </summary> /// <param name="input"></param> /// <returns></returns> public virtual async Task <object> Pay(PayInputBase input) { Logger?.Debug("准备发起支付:" + input.ToJsonString()); Exception exception = null; object output = null; if (input.OutTradeNo.IsNullOrWhiteSpace()) { input.OutTradeNo = GenerateOutTradeNo(); } try { var service = await _paymentManager.GetPayService(input.PayChannel); if (service == null) { throw new UserFriendlyException($"支付渠道 {input.PayChannel} 不存在,请确认是否已注册或已添加引用!"); } if (string.IsNullOrWhiteSpace(input.OutTradeNo)) { input.OutTradeNo = $"{DateTime.Now:yyyyMMddHHmmssfff}"; } output = await service.ToPay(input); } catch (Exception ex) { exception = ex; } await CreateToPayTransactionInfo(input, exception); if (exception == null) { return(output); } Logger.Error("支付失败!", exception); throw new UserFriendlyException("支付异常,请联系客服人员或稍后再试!"); }