Esempio n. 1
0
        /// <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("支付异常,请联系客服人员或稍后再试!");
        }