Esempio n. 1
0
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="model"></param>
        /// <param name="paylineType"></param>
        /// <returns></returns>
        protected virtual ActionResult Create(PaylineModel model, PaylineType paylineType)
        {
            var info = CreatePayline(model, paylineType);

            model.Payline = info;
            if (string.IsNullOrEmpty(info.Request))
            {
                return(Result(model));
            }
            var request = info.Request.ToLower();

            if (request.StartsWith("http://") || request.StartsWith("https://"))
            {
                return(Redirect(info.Request));
            }
            if (!string.IsNullOrEmpty(Request["createhandle"]))
            {
                var builder = new StringBuilder();
                builder.AppendFormat("<script  type=\"text/javascript\" >document.domain='{0}';{1}('{2}');</script>",
                                     ConfigurationManager.GetSetting <string>("Domain"), Request["createhandle"], info.Id);
                builder.Append(info.Request);
                return(Content(builder.ToString()));
            }
            return(Content(info.Request));
        }
Esempio n. 2
0
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="model"></param>
        /// <param name="paylineType"></param>
        /// <returns></returns>

        protected virtual PaylineEntity CreatePayline(PaylineModel model, PaylineType paylineType)
        {
            var info = new PaylineEntity
            {
                Account = new AccountEntity {
                    Id = Identity.Id
                },
                ChannelType  = model.ChannelType,
                Status       = PaylineStatusType.Create,
                Remark       = "",
                Type         = paylineType,
                SaveType     = SaveType.Add,
                PaylineItems = new List <PaylineItemEntity>(),
                Forms        = model.Forms ?? new Dictionary <string, string>()
            };
            var orders = GetOrders(model);

            FillPaylineItems(info, orders);
            if (model.Amount.HasValue)
            {
                info.Amount = model.Amount.Value;
            }
            GetPaylineApp(paylineType).Create(info);
            return(info);
        }
Esempio n. 3
0
        /// <summary>
        /// 处理
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        protected virtual ActionResult Result(PaylineModel model)
        {
            model.IsSuccess = model.Payline != null && model.Payline.Status == PaylineStatusType.Success;
            var request = model.Payline == null || model.Payline.Request == null ? "" : model.Payline.Request.ToLower();

            if (model.Payline != null && (request.StartsWith("http://") || request.StartsWith("https://")))
            {
                return(Redirect(model.Payline.Request));
            }
            if (model.IsSuccess && !string.IsNullOrEmpty(Request["successhandle"]))
            {
                var builder = new StringBuilder();
                builder.AppendFormat("<script  type=\"text/javascript\" >document.domain='{0}';{1}('{2}');</script>",
                                     ConfigurationManager.GetSetting <string>("Domain"), Request["successhandle"], model.Payline?.Id);
                builder.Append(model.Payline?.Request);
                return(Content(builder.ToString()));
            }
            if (!model.IsSuccess && !string.IsNullOrEmpty(Request["failhandle"]))
            {
                var builder = new StringBuilder();
                builder.AppendFormat("<script  type=\"text/javascript\" >document.domain='{0}';{1}('{2}');</script>",
                                     ConfigurationManager.GetSetting <string>("Domain"), Request["failhandle"], model.Payline?.Errors?.FirstOrDefault()?.Message);
                builder.Append(model.Payline?.Request);
                return(Content(builder.ToString()));
            }
            return(model.IsSuccess ? View("Success", model) : View("Failure", model));
        }
Esempio n. 4
0
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="model"></param>
        /// <param name="paylineType"></param>
        /// <returns></returns>
        protected virtual ActionResult Refund(PaylineModel model, PaylineType paylineType)
        {
            var info    = CreateRefund(model, paylineType);
            var request = info == null || info.Request == null ? "" : info.Request.ToLower();

            if (info != null && (request.StartsWith("http://") || request.StartsWith("https://")))
            {
                return(Redirect(info.Request));
            }
            if (model.IsSuccess && !string.IsNullOrEmpty(Request["successhandle"]))
            {
                var builder = new StringBuilder();
                builder.AppendFormat("<script  type=\"text/javascript\" >document.domain='{0}';{1}('{2}');</script>",
                                     ConfigurationManager.GetSetting <string>("Domain"), Request["successhandle"], info?.Id);
                builder.Append(info?.Request);
                return(Content(builder.ToString()));
            }
            if (!model.IsSuccess && !string.IsNullOrEmpty(Request["failhandle"]))
            {
                var builder = new StringBuilder();
                builder.AppendFormat("<script  type=\"text/javascript\" >document.domain='{0}';{1}('{2}');</script>",
                                     ConfigurationManager.GetSetting <string>("Domain"), Request["failhandle"], info?.Errors?.FirstOrDefault()?.Message);
                builder.Append(info?.Request);
                return(Content(builder.ToString()));
            }
            return(model.IsSuccess ?View("~/Views/Pay/RefundSuccess.cshtml", model): View("~/Views/Pay/RefundFailure.cshtml", model));
        }
Esempio n. 5
0
        /// <summary>
        /// 返回
        /// </summary>
        /// <param name="paylineType"></param>
        /// <returns></returns>
        protected virtual ActionResult Process(PaylineType paylineType)
        {
            var model = new PaylineModel();

            model.Payline = GetPaylineApp(paylineType).Process();
            return(Result(model));
        }
Esempio n. 6
0
        public virtual ActionResult Success(string number)
        {
            PaylineModel model = new PaylineModel();
            var          query = new QueryInfo();

            query.Query <PaylineEntity>().Where(it => it.Number == number && it.Status == PaylineStatusType.Success);
            model.Payline = this.GetEntities <PaylineEntity>(query)?.FirstOrDefault();
            return(View("~/Views/Pay/Success.cshtml"));
        }
Esempio n. 7
0
        /// <summary>
        /// 得到金额
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        protected virtual OrderPayEntity GetOrderPay(PaylineModel model)
        {
            if (string.IsNullOrEmpty(model.OrderPayId))
            {
                return(null);
            }
            var query = new QueryInfo();

            query.Query <OrderPayEntity>()
            .Where(it => it.Id == model.OrderPayId.Convert <long>())   // && it.Order.Account.Id == Identity.Id
            .Select(it => new object[] { it.Amount, it.Order.Id, it.Key, it.Order.TotalPayAmount, it.Order.PayAmount, it.Number });
            var orders = this.GetEntities <OrderPayEntity>(query);

            return(orders?.FirstOrDefault());
        }
Esempio n. 8
0
        /// <summary>
        /// 得到金额
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        protected virtual IList <OrderEntity> GetOrders(PaylineModel model)
        {
            if (string.IsNullOrEmpty(model.OrderIds))
            {
                return(null);
            }
            var orderIds = model.OrderIds.Split(',').Select(s => s.Convert <long>()).ToList();
            var query    = new QueryInfo();

            query.Query <OrderEntity>()
            .Where(it => orderIds.Contains(it.Id) &&  it.Account.Id == Identity.Id)
            .Select(it => new object[] { it.Id, it.TotalInvoiceAmount, it.TotalPayAmount, it.PayAmount, it.Deposit });
            var orders = this.GetEntities <OrderEntity>(query);

            return(orders);
        }
Esempio n. 9
0
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="model"></param>
        /// <param name="paylineType"></param>
        /// <returns></returns>
        protected virtual ActionResult Refund(PaylineModel model, PaylineType paylineType)
        {
            var info    = CreateRefund(model, paylineType);
            var request = info.Request.ToLower();

            if (request.StartsWith("http://") || request.StartsWith("https://"))
            {
                return(Redirect(info.Request));
            }
            if (!string.IsNullOrEmpty(Request["createhandle"]))
            {
                var builder = new StringBuilder();
                builder.AppendFormat("<script  type=\"text/javascript\" >document.domain='{0}';{1}('{2}');</script>",
                                     ConfigurationManager.GetSetting <string>("Domain"), Request["createhandle"], info.Id);
                builder.Append(info.Request);
                return(Content(builder.ToString()));
            }
            var url = string.Format("{0}/Home/Index", info.ChannelType == ChannelType.Website ? this.GetUrl("PresentationWebsiteOrderUrl") : this.GetUrl("PresentationMobileOrderUrl"));

            return(new RedirectResult(url));
        }
Esempio n. 10
0
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="model"></param>
        /// <param name="paylineType"></param>
        /// <returns></returns>

        protected virtual PaylineEntity CreateRefund(PaylineModel model, PaylineType paylineType)
        {
            var info = new PaylineEntity
            {
                Account = new AccountEntity {
                    Id = Identity.Id
                },
                ChannelType  = model.ChannelType,
                Status       = PaylineStatusType.Create,
                Remark       = "",
                Type         = paylineType,
                SaveType     = SaveType.Add,
                PaylineItems = new List <PaylineItemEntity>(),
                Forms        = model.Forms ?? new Dictionary <string, string>()
            };
            var orderPays = GetOrderPays(model);

            FillRefundPaylineItems(info, orderPays);
            info.Amount = info.PaylineItems.Sum(it => it.Amount);
            GetPaylineApp(paylineType).Refund(info);
            return(info);
        }
Esempio n. 11
0
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="model"></param>
        /// <param name="paylineType"></param>
        /// <returns></returns>

        protected virtual PaylineEntity CreateRefund(PaylineModel model, PaylineType paylineType)
        {
            var orderPay = GetOrderPay(model);

            if (orderPay.Order == null)
            {
                return(null);
            }
            var orderId = string.IsNullOrWhiteSpace(model.RefundOrderId)
                ? orderPay.Order.Id
                : model.RefundOrderId.Convert <long>();
            var order = GetRefundOrder(orderId);

            if (order == null || order.Account == null)
            {
                return(null);
            }
            var info = new PaylineEntity
            {
                Account = new AccountEntity {
                    Id = order.Account.Id
                },
                ChannelType  = model.ChannelType,
                Status       = PaylineStatusType.Create,
                Remark       = "",
                Type         = paylineType,
                SaveType     = SaveType.Add,
                PaylineItems = new List <PaylineItemEntity>(),
                Forms        = model.Forms ?? new Dictionary <string, string>()
            };

            FillRefundPaylineItems(info, orderPay, model);
            info.Amount     = info.PaylineItems.Sum(it => it.Amount);
            model.IsSuccess = GetPaylineApp(paylineType).Refund(info);
            return(info);
        }
Esempio n. 12
0
        public virtual ActionResult Create(PaylineModel model)
        {
            if (string.IsNullOrWhiteSpace(Request["code"]))
            {
                var url = Request.Url.ToString();
                url = string.Format("{0}/Wechat/Oauth?url={1}", this.GetUrl("DistributedOutsideReceptionUrl"),
                                    Server.UrlEncode(url));
                var wechat = this.Wechat();
                url = wechat.CreateAuthorityUrl(url, true);
                return(Redirect(url));
            }
            var weinxinUser = this.Wechat().GetAuthorityUser();

            if (weinxinUser != null && weinxinUser.ContainsKey("openid"))
            {
                var openid = weinxinUser["openid"].ToString();
                model.Forms = model.Forms ?? new Dictionary <string, string>
                {
                    { "openid", openid }
                };
                return(Create(model, PaylineType.Wechat));
            }
            return(PayError(null));
        }
Esempio n. 13
0
 /// <summary>
 /// 通知
 /// </summary>
 //[AuthorizeFilter]
 public virtual ActionResult Select(PaylineModel model)
 {
     return(model != null && model.ChannelType == ChannelType.Mobile
         ? View("MobileSelect", model) : View("WebsiteSelect", model));
 }
Esempio n. 14
0
        /// <summary>
        /// 填充明细
        /// </summary>
        protected virtual void FillRefundPaylineItems(PaylineEntity payline, OrderPayEntity orderPay, PaylineModel model)
        {
            if (orderPay == null)
            {
                return;
            }
            if (orderPay.Order == null || orderPay.Amount <= 0)
            {
                return;
            }
            var ammount = model.Amount.HasValue ? model.Amount.Value : orderPay.Amount;

            if (ammount > orderPay.Amount)
            {
                ammount = orderPay.Amount;
            }
            var paylineItem = new PaylineItemEntity
            {
                Order = string.IsNullOrWhiteSpace(model.RefundOrderId) ? orderPay.Order : new OrderEntity {
                    Id = model.RefundOrderId.Convert <long>()
                },
                Payline  = payline,
                Key      = orderPay.Key,
                Amount   = 0 - ammount,
                SaveType = SaveType.Add
            };

            payline.PaylineItems.Add(paylineItem);
            payline.OutNumber = orderPay.Number;
        }
Esempio n. 15
0
 public virtual ActionResult Create(PaylineModel model)
 {
     return(Create(model, PaylineType.Ali));
 }
Esempio n. 16
0
 public virtual ActionResult Refund(PaylineModel model)
 {
     return(Refund(model, PaylineType.Wechat));
 }
Esempio n. 17
0
 public virtual ActionResult Qr(PaylineModel model)
 {
     return(View("Qr"));
 }