예제 #1
0
        public async Task <PayOutput> Pay(PayInput input)
        {
            var orderInfo = _sellAppService.GetOrderInfo(input.OrderId);

            if (orderInfo == null)
            {
                throw new LotteryDataException("下单失败,请稍后重试");
            }
            if (!orderInfo.OrderCost.Equals(input.Price))
            {
                throw new LotteryDataException("订单金额错误,请核对订单信息");
            }
            if (input.IsType != PayType.AliPay && input.IsType != PayType.Wechat)
            {
                throw new LotteryDataException("请选择支付方式");
            }
            var paysApiInfo = _sellAppService.GetPaysApiInfo();
            var payInfo     = new PayOrderDto()
            {
                Uid    = paysApiInfo.Uid,
                Price  = input.Price.ToString("#0.00"),
                Istype = (int)input.IsType,
                //  Goodsname = input.GoodsName,
                Notify_url = paysApiInfo.NotifyUrl,
                Return_url = paysApiInfo.ReturnUrl,
                Orderid    = input.OrderId,
                Orderuid   = _lotterySession.UserName,
            };

            payInfo.Key = GetPayKey(payInfo, paysApiInfo.Token);

            return(_sellAppService.GetPayOrderInfo(payInfo, paysApiInfo.PaysApi));
        }
예제 #2
0
        /// <summary>
        /// 创建交易日志
        /// </summary>
        /// <returns></returns>
        private async Task <TransactionLog> CreateToPayTransactionInfo(PayInput 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;

            if (input.PayChannel == PayChannels.GlobalAlipay)
            {
                //添加货币符号,以支持国际支付
                var config = Magicodes.Alipay.Global.GlobalAlipayAppService.GetPayConfigFunc();
                transactionLog = _transactionLogHelper.CreateTransactionLog(transactionInfo, config.Currency);
            }
            else
            {
                transactionLog = _transactionLogHelper.CreateTransactionLog(transactionInfo);
            }
            await _transactionLogHelper.SaveAsync(transactionLog);

            return(transactionLog);
        }
예제 #3
0
        public async Task <IActionResult> SendPayment(WalletTransactViewModel model, CancellationToken cancellationToken)
        {
            AjaxResult result = new AjaxResult("Error");

            if (ModelState.IsValid)
            {
                PayInput   input = new PayInput();
                CustomUser user  = await UserManager.GetUserAsync(User);

                input.Deposits    = model.Deposits;
                input.Description = "عملیات شارژ حساب";
                input.Redirect    = SiteSetting.CallBackUrl + $"?transactType={TransactType.Creditor}";
                input.PhoneNumber = user.PhoneNumber;
                PaymentRequest response = await Payment.PayAsync(input, cancellationToken);

                if (Assert.NotNull(response) && response.Status == 1 && Assert.NotNull(response.Token))
                {
                    result.Status      = "Success";
                    result.RedirectUrl = SiteSetting.RedirectUrl + response.Token;
                    user.PaymentToken  = response.Token;
                    await UserManager.UpdateAsync(user);

                    return(new JsonResult(result));
                }
                else
                {
                    result.Errors.Add(response.ErrorMessage);
                }

                return(new JsonResult(result));
            }
            result.AddErrors(ModelState);
            return(new JsonResult(result));
        }
예제 #4
0
        public async Task <JsonResult> GetPaySign(PayInput input)
        {
            using (CurrentUnitOfWork.DisableFilter(DataFilters.MustHaveTenant, DataFilters.MayHaveTenant))
            {
                Order        order        = _orderRepository.Get(input.Id);
                TenPayV3Info tenPayV3Info = await GetTenPayV3Info(InfrastructureSession.TenantId.Value);

                string timeStamp = TenPayV3Util.GetTimestamp();
                string nonceStr  = TenPayV3Util.GetNoncestr();

                if (order.PrepayIdCreatedTime.HasValue && order.PrepayIdCreatedTime < DateTime.Now.AddHours(-2))
                {
                    throw new UserFriendlyException(L("TheOrderHasOverTime"));
                }

                if (string.IsNullOrEmpty(order.PrepayId))
                {
                    string body             = order.Title;                 //商品或支付单简要描述
                    string out_trade_no     = order.Number;                //商户系统内部的订单号,32个字符内,可包含字母,其他说明见商户订单号
                    int    totalFee         = (int)(order.PayMoney * 100); //订单总金额,只能是整数。
                    string spbill_create_ip = Request.UserHostAddress;     //APP和网页支付提交用户端IP,Native支付填调用微信支付API的机器IP

                    string openid = WechatUserManager.GetOpenid(order.User.ToUserIdentifier());
                    TenPayV3UnifiedorderRequestData xmlDataInfo = new TenPayV3UnifiedorderRequestData(
                        tenPayV3Info.AppId,
                        tenPayV3Info.MchId,
                        body,
                        out_trade_no,
                        totalFee,
                        Request.UserHostAddress,
                        tenPayV3Info.TenPayV3Notify,
                        //trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。必传,这里需要将去获取openid赋值上去
                        TenPayV3Type.JSAPI,
                        openid,
                        tenPayV3Info.Key,
                        nonceStr);

                    UnifiedorderResult unifiedorderResult = TenPayV3.Unifiedorder(xmlDataInfo, 10000);
                    string             prepay_id          = unifiedorderResult.prepay_id;
                    order.PrepayId            = prepay_id;
                    order.PrepayIdCreatedTime = DateTime.Now;
                    _orderRepository.Update(order);
                }
                nonceStr = TenPayV3Util.GetNoncestr();

                RequestHandler paysignReqHandler = new RequestHandler(null);
                paysignReqHandler.Init();

                //设置支付参数
                paysignReqHandler.SetParameter("appId", tenPayV3Info.AppId);
                paysignReqHandler.SetParameter("timeStamp", timeStamp);
                paysignReqHandler.SetParameter("nonceStr", nonceStr);
                string package = string.Format("prepay_id={0}", order.PrepayId);
                paysignReqHandler.SetParameter("package", package);

                string paySign = TenPayV3.GetJsPaySign(tenPayV3Info.AppId, timeStamp, nonceStr, package, tenPayV3Info.Key);
                paysignReqHandler.SetParameter("paySign", paySign);
                return(Json(paysignReqHandler.GetAllParameters()));
            }
        }
예제 #5
0
        /// <summary>
        /// 支付
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <object> Pay(PayInput input)
        {
            Logger.Debug("准备发起支付:" + input.ToJsonString());
            object    output    = null;
            Exception exception = null;

            if (input.OutTradeNo == null)
            {
                input.OutTradeNo = GenerateOutTradeNo();
            }

            try
            {
                //TODO:添加客户端请求头判断,支持自动使用PC/H5/APP等支付
                switch (input.PayChannel)
                {
                case PayChannels.WeChatPay:
                    output = await WeChatAppPay(input);

                    break;

                case PayChannels.AliPay:
                    output = await AliAppPay(input);

                    break;

                case PayChannels.GlobalAlipay:
                    output = await GlobalAlipay(input);

                    break;

                case PayChannels.BalancePay:
                    await BalancePay(input);

                    return(null);

                default:
                    throw new UserFriendlyException("当前不支持此种类型的支付!");
                }
            }
            catch (Exception ex)
            {
                exception = ex;
            }

            if (input.PayChannel != PayChannels.BalancePay)
            {
                //创建交易日志
                await CreateToPayTransactionInfo(input, exception);

                if (exception != null)
                {
                    Logger.Error("支付失败!", exception);
                    throw new UserFriendlyException("支付异常,请联系客服人员或稍后再试!");
                }
            }

            return(output);
        }
        public IActionResult Pay(PayInput input)
        {
            PaymentRequest result = _Payment.Pay(input);

            if (result != null && result.Status == 100)
            {
                _unitOfWork.OrderRepo.SetTransactionID(input.OrderId, result.Authority);
                return(Redirect("https://sandbox.zarinpal.com/pg/StartPay/" + result.Authority));
            }
            return(View("PayErorr", result));
        }
        public IActionResult Completed(OrderViewModel model)
        {
            PayInput model2 = new PayInput();

            if (ModelState.IsValid)
            {
                model.Lines    = _cart.List;
                model2.OrderId = TempData["OrderId"] != null ? (int)TempData["OrderId"] : 0;
                model2.Amount  = Convert.ToInt32(model.Lines.Sum(c => c.product.Price * c.Quentity));
                _cart.Clear();
            }
            return(View(model2));
        }
        public async Task <PaymentRequest> PayAsync(PayInput input, CancellationToken cancellationToken)
        {
            Dictionary <string, string> post_values = new Dictionary <string, string>
            {
                { "api", siteSetting.Api },
                { "amount", input.Deposits.ToString() },
                { "redirect", input.Redirect },
                { "description", input.Description },
                { "mobile", input.PhoneNumber },
            };
            string response = await RequestSender.RequestAsync(HttpMethod.Post, siteSetting.GatewaySend, post_values, cancellationToken);

            return(response.ToCsharpObject <PaymentRequest>());
        }
예제 #9
0
        /// <summary>
        /// 余额支付
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        protected async Task BalancePay(PayInput input)
        {
            var data = JsonConvert.DeserializeObject <JObject>(input.CustomData);
            var uid  = data["uid"]?.ToString();
            var log  = await CreateToPayTransactionInfo(input);

            if (data["key"]?.ToString() == "系统充值")
            {
                throw new UserFriendlyException("余额支付不支持此业务!");
            }

            var userIdentifer = UserIdentifier.Parse(uid);
            await UserManager.UpdateRechargeInfo(userIdentifer, (int)(-input.TotalAmount * 100));

            await _paymentCallbackManager.ExecuteCallback(data["key"]?.ToString(), log.OutTradeNo, log.TransactionId, (int)(input.TotalAmount * 100), data);
        }
예제 #10
0
        public ApiResult <PayOutput> PaySync(PayInput parameter)
        {
            //if (!this.IsFormValid()) {
            //    return ApiResult.Failure<PayOutput>(this.FormInvalidReason(), MessageCodes.ParameterValidationFailure);
            //}
            //Resolve<IPayService>().Log($"支付参数:{parameter.ToJson()}");
            var result = Resolve <IPayService>().Pay(parameter, HttpContext);

            Resolve <IPayService>().Log($"支付返回结果:{result.Item2.ToJson()}");
            if (result.Item1.Succeeded)
            {
                return(ApiResult.Success(result.Item2));
            }

            return(ApiResult.Failure <PayOutput>(result.Item1.ToString(), MessageCodes.ServiceFailure));
        }
예제 #11
0
        public PaymentRequest Pay(PayInput input)
        {
            _payment = new ZarinpalSandbox.Payment(Convert.ToInt32(input.Amount));
            // var result = _payment.PaymentRequest(input.OrderId + input.Description, "https://localhost:5001/Payment/Verify", input.Email, input.Mobile);
            var            result = _payment.PaymentRequest(input.OrderId + input.Description, "https://localhost:5001/Payment/Verify");
            PaymentRequest pay    = new PaymentRequest();

            if (result.IsCompletedSuccessfully)
            {
                _session.SetInt32(result.Result.Authority, input.Amount);

                pay.Authority = result.Result.Authority;
                pay.Link      = result.Result.Link;
                pay.Status    = result.Result.Status;
            }
            return(pay);;
        }
예제 #12
0
        public ApiResult WechatAppPay([FromBody] PayInput parameter)
        {
            var pay = Resolve <IPayService>().GetSingle(parameter.PayId);
            // 获取前台Url,实现跳转支付完成后跳转功能
            var url = HttpWeb.ClientHost;
            // 后台服务端Url
            var serviceUrl = HttpWeb.ServiceHost;

            var result = Resolve <IPayService>().WechatAppPayment(ref pay, url, serviceUrl); //(parameter, HttpContext);

            if (result.Item1.Succeeded)
            {
                return(ApiResult.Success(result.Item2));
            }

            return(ApiResult.Failure <PayOutput>(result.Item1.ToString(), MessageCodes.ServiceFailure));
        }
예제 #13
0
        public PayOutput GetPayOutput(PayInput input)
        {
            OrderDto order = Get(new OrderGetInput()
            {
                Id = input.Id
            });

            if (order.PaymentStatus == PaymentStatus.Payed)
            {
                throw new UserFriendlyException("the order has payed!");
            }
            PayOutput payOutput = new PayOutput()
            {
                Order = order
            };

            return(payOutput);
        }
예제 #14
0
        public async Task <string> Recharge(RechargeInput input)
        {
            var payInput = new PayInput
            {
                Body        = "系统充值",
                TotalAmount = input.TotalAmount,
                Subject     = "系统充值",
                CustomData  = new
                {
                    key = "系统充值",
                    uid = AbpSession.ToUserIdentifier().ToUserIdentifierString()
                }.ToJsonString()
            };
            //使用统一支付接口
            var result = await _payAppService.Pay(payInput);

            return((string)(result is string?result : result.ToJsonString()));
        }
예제 #15
0
        public virtual async Task <PaymentDto> PayAsync(Guid id, PayInput input)
        {
            var payment = await _repository.GetAsync(id);

            if (payment.UserId != CurrentUser.GetId())
            {
                throw new UsingUnauthorizedPaymentException(CurrentUser.GetId(), payment.Id);
            }

            var configurations = await GetPayeeConfigurationsAsync(payment);

            foreach (var property in input.ExtraProperties)
            {
                configurations.AddIfNotContains(new KeyValuePair <string, object>(property.Key, property.Value));
            }

            await _paymentManager.StartPaymentAsync(payment, configurations);

            return(await MapToGetOutputDtoAsync(payment));
        }
예제 #16
0
 public virtual Task <PaymentDto> PayAsync(Guid id, PayInput input)
 {
     return(_service.PayAsync(id, input));
 }
        public async Task <JsonResult> Pay(string DisCountTitle, string OrderId, CancellationToken cancellationToken)
        {
            AjaxResult     result   = new AjaxResult("Error");
            PayInput       input    = new PayInput();
            PaymentRequest response = new PaymentRequest();
            CustomUser     user     = new CustomUser();
            DisCount       DisCount = new DisCount();

            if (string.IsNullOrEmpty(OrderId))
            {
                result.Errors.Add("اطلاعات ارسالی صحیح نیس");
                return(new JsonResult(result));
            }

            Order order = await orderRepository.GetByIdAsync(Guid.Parse(OrderId), cancellationToken);

            if (order == null)
            {
                result.Errors.Add("اطلاعات ارسالی صحیح نیس");
                return(new JsonResult(result));
            }

            input.Deposits = order.TotalPrice;

            if (!string.IsNullOrEmpty(DisCountTitle))
            {
                DisCount = await disCountRepository.GetByTitle(DisCountTitle.Trim(), cancellationToken);

                input.Deposits = DisCount != null?DisCountHelper.ComputeDisCount(DisCount, order.TotalPrice) : order.TotalPrice;
            }

            if (User.Identity.IsAuthenticated)
            {
                user = await customUserManager.GetUserAsync(User);
            }
            else
            {
                string anonymousUserId = cookieManager.Get <string>("LocalhostCart");

                user = await orderRepository.GetAnonymousUser(anonymousUserId, cancellationToken);
            }

            input.Deposits = DisCountHelper.WithdrawFromWallet(user, input.Deposits);

            input.PhoneNumber = user?.PhoneNumber;

            if (input.Deposits >= 1000)
            {
                input.Redirect    = siteSetting.BuyCourseCallBackUrl;
                input.Description = "تصویه صورت حساب با احتساب تخفیف و کسر از کیف پولتان";
                response          = await payment.PayAsync(input, cancellationToken);
            }
            else
            {
                result.Status               = "Success";
                result.RedirectUrl          = "";
                result.MessageWhenSuccessed = " مبلغ با محاسبه تخفیف و کسر از کیف پول پرداخت شد";
                DisCount.Count              = DisCount.Count > 0 ? --DisCount.Count : DisCount.Count;
                await customUserManager.UpdateAsync(user);

                order.IsBought = true;
                await disCountRepository.UpdateAsync(DisCount, cancellationToken);

                return(new JsonResult(result));
            }
            if (Assert.NotNull(response) && response.Status == 1 && Assert.NotNull(response.Token))
            {
                result.Status      = "Success";
                result.RedirectUrl = siteSetting.RedirectUrl + response.Token;
                user.PaymentToken  = response.Token;
                DisCount.Count     = DisCount.Count > 0 ? DisCount.Count-- : DisCount.Count;
                await customUserManager.UpdateAsync(user);

                order.IsBought = true;
                await disCountRepository.UpdateAsync(DisCount, cancellationToken);

                return(new JsonResult(result));
            }
            else
            {
                result.Errors.Add("عملیات پرداخت با شکست مواجه شد لطفا بعدا امتحان کنید");
                result.Errors.Add(response.ErrorMessage);
            }

            return(new JsonResult(result));
        }
예제 #18
0
        /// <inheritdoc />
        /// <summary>
        ///     网站支付
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public Task <PayOutput> Pay(PayInput input)
        {
            //把请求参数打包成数组
            var sParaTemp = new SortedDictionary <string, string>
            {
                { "service", "create_forex_trade" },
                { "partner", _alipaySettings.Partner },
                { "_input_charset", _alipaySettings.CharSet.ToLower() },
                { "sign_type", _alipaySettings.SignType },
                { "notify_url", input.NotifyUrl ?? _alipaySettings.Notify },
                { "return_url", input.ReturnUrl ?? _alipaySettings.ReturnUrl },
                { "currency", input.Currency ?? _alipaySettings.Currency },
                { "out_trade_no", input.TradeNo ?? Guid.NewGuid().ToString("N") },
                { "subject", input.Subject },
                { "body", input.Body }
            };

            if (input.RmbFee > 0)
            {
                sParaTemp.Add("rmb_fee", input.RmbFee.ToString());
            }
            else
            {
                sParaTemp.Add("total_fee", input.TotalFee.ToString());
            }

            if (!string.IsNullOrWhiteSpace(input.TimeoutRule))
            {
                sParaTemp.Add("timeout_rule", input.TimeoutRule);
            }

            if (!string.IsNullOrWhiteSpace(input.AuthToken))
            {
                sParaTemp.Add("auth_token", input.AuthToken);
            }

            if (!string.IsNullOrWhiteSpace(input.Supplier))
            {
                sParaTemp.Add("supplier", input.Supplier);
            }

            if (!string.IsNullOrWhiteSpace(input.SecondaryMerchantId))
            {
                sParaTemp.Add("secondary_merchant_id", input.SecondaryMerchantId);
            }

            if (!string.IsNullOrWhiteSpace(input.SecondaryMerchantName))
            {
                sParaTemp.Add("secondary_merchant_name", input.SecondaryMerchantName);
            }

            if (!string.IsNullOrWhiteSpace(input.SecondaryMerchantIndustry))
            {
                sParaTemp.Add("secondary_merchant_industry", input.SecondaryMerchantIndustry);
            }

            if (input.OrderGmtCreate.HasValue)
            {
                sParaTemp.Add("order_gmt_create", input.OrderGmtCreate.Value.ToString("yyyy-MM-dd hh:mm:ss"));
            }

            if (input.OrderValidTime.HasValue && input.OrderValidTime > 0)
            {
                sParaTemp.Add("order_valid_time", input.OrderValidTime.Value.ToString());
            }

            if (input.SplitFundInfo != null && input.SplitFundInfo.Count > 0)
            {
                foreach (var splitFundInfoDto in input.SplitFundInfo)
                {
                    if (input.RmbFee > 0)
                    {
                        splitFundInfoDto.Currency = "CNY";
                    }
                    else
                    {
                        splitFundInfoDto.Currency = input.Currency ?? _alipaySettings.Currency;
                    }
                }
                //分账信息
                sParaTemp.Add("split_fund_info", Newtonsoft.Json.JsonConvert.SerializeObject(input.SplitFundInfo));
            }

            //过滤签名参数数组
            sParaTemp.FilterPara();
            var dic  = sParaTemp.BuildRequestPara(_alipaySettings);
            var html = dic.GetHtmlSubmitForm(_alipaySettings.Gatewayurl, _alipaySettings.CharSet);

            return(Task.FromResult(new PayOutput
            {
                FormHtml = html,
                Parameters = dic
            }));
        }
        /// <inheritdoc />
        /// <summary>
        ///     网站支付
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public Task <PayOutput> Pay(PayInput input)
        {
            //把请求参数打包成数组
            var sParaTemp = new SortedDictionary <string, string>
            {
                { "service", "create_forex_trade" },
                { "partner", _alipaySettings.Partner },
                { "_input_charset", _alipaySettings.CharSet.ToUpper() },
                { "sign_type", _alipaySettings.SignType },
                { "notify_url", input.NotifyUrl ?? _alipaySettings.Notify },
                { "return_url", input.ReturnUrl ?? _alipaySettings.ReturnUrl },
                { "currency", input.Currency ?? _alipaySettings.Currency },
                { "out_trade_no", input.TradeNo ?? Guid.NewGuid().ToString("N") },
                { "subject", input.Subject },
                { "product_code", "NEW_OVERSEAS_SELLER" },
            };

            if (!string.IsNullOrWhiteSpace(input.Body))
            {
                //商品信息,不支持特殊字符。格式:[{"goods_name":"名称1","quantity":"数量1"},{"goods_name":"名称2","quantity":"数量2"}]。
                if (!input.Body.StartsWith("["))
                {
                    input.Body = JsonConvert.SerializeObject(new List <object>()
                    {
                        new
                        {
                            goods_name = input.Body,
                            quantity   = 1
                        }
                    });
                }
                sParaTemp.Add("body", input.Body);
            }
            if (input.RmbFee > 0)
            {
                sParaTemp.Add("rmb_fee", input.RmbFee.ToString());
            }
            else
            {
                sParaTemp.Add("total_fee", input.TotalFee.ToString());
            }

            if (!string.IsNullOrWhiteSpace(input.TimeoutRule))
            {
                sParaTemp.Add("timeout_rule", input.TimeoutRule);
            }

            if (!string.IsNullOrWhiteSpace(input.AuthToken))
            {
                sParaTemp.Add("auth_token", input.AuthToken);
            }

            if (!string.IsNullOrWhiteSpace(input.Supplier))
            {
                sParaTemp.Add("supplier", input.Supplier);
            }

            if (!string.IsNullOrWhiteSpace(input.SecondaryMerchantId))
            {
                sParaTemp.Add("secondary_merchant_id", input.SecondaryMerchantId);
            }

            if (!string.IsNullOrWhiteSpace(input.SecondaryMerchantName))
            {
                sParaTemp.Add("secondary_merchant_name", input.SecondaryMerchantName);
            }

            if (!string.IsNullOrWhiteSpace(input.SecondaryMerchantIndustry))
            {
                sParaTemp.Add("secondary_merchant_industry", input.SecondaryMerchantIndustry);
            }

            if (input.OrderGmtCreate.HasValue)
            {
                sParaTemp.Add("order_gmt_create", input.OrderGmtCreate.Value.ToString("yyyy-MM-dd hh:mm:ss"));
            }

            if (input.OrderValidTime.HasValue && input.OrderValidTime > 0)
            {
                sParaTemp.Add("order_valid_time", input.OrderValidTime.Value.ToString());
            }

            #region 设置分账信息
            if (input.SplitFundInfo != null && input.SplitFundInfo.Count > 0)
            {
                foreach (var splitFundInfoDto in input.SplitFundInfo)
                {
                    if (input.RmbFee > 0)
                    {
                        splitFundInfoDto.Currency = "CNY";
                    }
                    else
                    {
                        splitFundInfoDto.Currency = input.Currency ?? _alipaySettings.Currency;
                    }
                }
                //分账信息
                sParaTemp.Add("split_fund_info", Newtonsoft.Json.JsonConvert.SerializeObject(input.SplitFundInfo));
            }
            else if (_alipaySettings.SplitFundInfo != null && _alipaySettings.SplitFundInfo.Count > 0)
            {
                input.SplitFundInfo = new List <SplitFundInfoDto>();
                foreach (var splitFundInfo in _alipaySettings.SplitFundInfo)
                {
                    var splitFundInfoDto = new SplitFundInfoDto()
                    {
                        Desc    = splitFundInfo.Desc,
                        TransIn = splitFundInfo.TransIn
                    };
                    if (input.RmbFee > 0)
                    {
                        splitFundInfoDto.Currency = "CNY";
                    }
                    else
                    {
                        splitFundInfoDto.Currency = input.Currency ?? _alipaySettings.Currency;
                    }

                    if (splitFundInfo.AmountRate > 0)
                    {
                        var amount = input.TotalFee > 0 ? input.TotalFee : input.RmbFee;
                        //日元取整数,其他的保留两位小数
                        splitFundInfoDto.Amount = splitFundInfoDto.Currency == "JPY" ? decimal.Floor(splitFundInfo.AmountRate * amount) : decimal.Round(splitFundInfo.AmountRate * amount, 2);
                    }
                }
                //分账信息
                sParaTemp.Add("split_fund_info", Newtonsoft.Json.JsonConvert.SerializeObject(input.SplitFundInfo));
            }
            #endregion

            //过滤签名参数数组
            sParaTemp.FilterPara();
            var dic = sParaTemp.BuildRequestPara(_alipaySettings);
            LoggerAction?.Invoke("Debug", "支付参数:" + JsonConvert.SerializeObject(dic));
            var html = dic.GetHtmlSubmitForm(_alipaySettings.Gatewayurl, _alipaySettings.CharSet);
            return(Task.FromResult(new PayOutput
            {
                FormHtml = html,
                Parameters = dic
            }));
        }
예제 #20
0
        public ActionResult Index(PayInput input)
        {
            PayOutput PayOutput = _orderAppService.GetPayOutput(input);

            return(View(PayOutput));
        }