/// <summary>
        /// 支付
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public override async Task <object> ToPay(PayInputBase input)
        {
            var weChatPayApi = IocResolver.Resolve <WeChatPayApi>();

            if (weChatPayApi == null)
            {
                throw new UserFriendlyException("支付未开放,请联系管理员!");
            }
            var appPayInput = new AppPayInput()
            {
                Body           = input.Body,
                OutTradeNo     = input.OutTradeNo,
                Attach         = input.Key,
                TotalFee       = input.TotalAmount,
                SpbillCreateIp = _clientInfoProvider?.ClientIpAddress
            };

            try
            {
                var appPayOutput = weChatPayApi.AppPay(appPayInput);
                return(await Task.FromResult(appPayOutput));
            }
            catch (Exception ex)
            {
                throw new UserFriendlyException(ex.Message);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 支付
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public override async Task <object> ToPay(PayInputBase input)
        {
            var api = IocResolver.Resolve <IAllinpayAppService>();

            if (api == null)
            {
                throw new UserFriendlyException("支付未开放,请联系管理员!");
            }
            var appPayInput = new WeChatMiniPayInput()
            {
                Body        = input.Body,
                OrderNumber = input.OutTradeNo,
                Amount      = (int)(input.TotalAmount * 100),
                OpenId      = input.OpenId,
                Remark      = input.Key
            };

            try
            {
                var appPayOutput = await api.WeChatMiniPay(appPayInput);

                return(appPayOutput.Response);
            }
            catch (Exception ex)
            {
                throw new UserFriendlyException(ex.Message);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 支付
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public override async Task <object> ToPay(PayInputBase input)
        {
            var api = IocResolver.Resolve <IAlipayAppService>();

            if (api == null)
            {
                throw new UserFriendlyException("支付未开放,请联系管理员!");
            }
            var appPayInput = new AppPayInput()
            {
                Body           = input.Body,
                Subject        = input.Subject,
                TradeNo        = input.OutTradeNo,
                PassbackParams = input.CustomData,
                TotalAmount    = input.TotalAmount
            };

            try
            {
                var appPayOutput = await api.AppPay(appPayInput);

                return(appPayOutput.Response.Body);
            }
            catch (Exception ex)
            {
                throw new UserFriendlyException(ex.Message);
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 创建交易日志
        /// </summary>
        /// <returns></returns>
        private async Task <TransactionLog> CreateToPayTransactionInfo(PayInputBase input, Exception exception = null)
        {
            var transactionInfo = new TransactionInfo()
            {
                Amount           = input.TotalAmount,
                CustomData       = input.CustomData,
                OutTradeNo       = input.OutTradeNo ?? GenerateOutTradeNo(),
                PayChannel       = input.PayChannel,
                Subject          = input.Subject,
                TransactionState = TransactionStates.NotPay,
                //TransactionId = "",
                Exception = exception
            };
            TransactionLog transactionLog = null;

            transactionLog = _transactionLogHelper.CreateTransactionLog(transactionInfo);
            await _transactionLogHelper.SaveAsync(transactionLog);

            return(transactionLog);
        }
Esempio n. 5
0
        public async Task Pay_Test()
        {
            //请配置正确的支付参数后在移除异常校验
            await Assert.ThrowsAsync <UserFriendlyException>(async() =>
            {
                var input = new PayInputBase()
                {
                    Body        = "缴费支付",
                    CustomData  = "{\"Name\":\"张6\",\"IdCard\":\"430626199811111111\",\"Phone\":\"18975061111\",\"Amount\":0.01,\"Remark\":\"\",\"OpenId\":\"ouiSX5OJ0OX-5W_1g4du5QZx-wsE\",\"PayChannel\":7}",
                    Key         = "缴费支付",
                    OpenId      = "ouiSX5OJ0OX-5W_1g4du5QZx-wsE",
                    OutTradeNo  = "ouiSX5OJ0OX-5W_1g4du5QZx-wsE",
                    PayChannel  = Abp.TransactionLogs.PayChannels.AllinJsApiPay,
                    Subject     = "缴费",
                    TotalAmount = 0.01m
                };
                await payAppService.Pay(input);

                //交易日志校验
                UsingDbContext(context => context.TransactionLogs.Any(p => p.Currency.CurrencyValue == 88 && p.PayChannel == Pay.Abp.TransactionLogs.PayChannels.AllinWeChatMiniPay && p.TransactionState == Pay.Abp.TransactionLogs.TransactionStates.NotPay && p.OutTradeNo == input.OutTradeNo).ShouldBeTrue());
            });
        }
Esempio n. 6
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("支付异常,请联系客服人员或稍后再试!");
        }
Esempio n. 7
0
 /// <summary>
 /// 支付
 /// </summary>
 /// <param name="input"></param>
 /// <returns></returns>
 public virtual Task <object> ToPay(PayInputBase input)
 {
     throw new NotImplementedException();
 }