/// <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); } }
/// <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); } }
/// <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); } }
/// <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); }
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()); }); }
/// <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("支付异常,请联系客服人员或稍后再试!"); }
/// <summary> /// 支付 /// </summary> /// <param name="input"></param> /// <returns></returns> public virtual Task <object> ToPay(PayInputBase input) { throw new NotImplementedException(); }