Example #1
0
        public void GoPay(decimal amount,string tradeNo)
        {
            
            if (amount <= 0)
                return;
            //如果tradeno有值,则是从用户中心过来
            if (string.IsNullOrEmpty(tradeNo))
            {
                var user = Session[SessionKey.User] as UserInfo;
                //创建捐款订单
                var order = new Order();
                order.OrderId = System.Guid.NewGuid();
                order.TradeNo = WebUtils.GenTradeNo(new Random());
                order.OrderType = (int)Ichari.Model.Enum.OrderType.Donation;
                if (user != null)
                    order.UserId = user.Id;
                else
                    order.UserId = StaticKey.AnonymousUserId;
                order.Total = amount;
                order.PayWay = (int)Ichari.Model.Enum.PayWay.UnionPay;
                order.Ip = Request.UserHostAddress;
                order.Status = (int)Ichari.Model.Enum.OrderState.Create;
                order.CreateTime = DateTime.Now;
                //订单明细
                order.OrderDetail.Add(new OrderDetail()
                {
                    OrderId = order.OrderId,
                    ProductId = VirtualProduct.Donation,
                    ProductName = StaticKey.VirtualProdDonation,
                    Price = amount,
                    ProductCount = 1
                });

                _uow.OrderService.Add(order);
                _uow.Commit();

                Response.Redirect(string.Format(
                    WebUtils.GetAppSettingValue(StaticKey.PayUrlFormatter)
                        ,order.OrderId,order.TradeNo,PaySource.Donation)
                );
            }
            var oldOrder = _uow.OrderService.Get(t => t.TradeNo == tradeNo);
            if (oldOrder == null)
                return;
            Response.Redirect(string.Format(
                    WebUtils.GetAppSettingValue(StaticKey.PayUrlFormatter)
                        ,oldOrder.OrderId,oldOrder.TradeNo,PaySource.Donation)
                );
        }
Example #2
0
 /// <summary>
 /// 用于向 Order EntitySet 添加新对象的方法,已弃用。请考虑改用关联的 ObjectSet&lt;T&gt; 属性的 .Add 方法。
 /// </summary>
 public void AddToOrder(Order order)
 {
     base.AddObject("Order", order);
 }
Example #3
0
        /// <summary>
        /// 支付成功的后续操作
        /// </summary>
        private void OnAfterPay(Order order,SrvResponse resp)
        {   
            var paylog = new PayLog();
            paylog.OrderId = order.OrderId;
            paylog.TransactionId = resp.Fields["qid"];
            paylog.UserId = order.UserId;
            paylog.PayWay = (int)PayWay.UnionPay;
            paylog.PayMoney = order.Total;
            paylog.PayUrl = resp.OrigPostString;
            paylog.BackUrl = Request.RawUrl;
            paylog.CreateTime = DateTime.Now;
            paylog.PayResult = "支付成功";
            //如果支付失败
            if (resp.ResponseCode != SrvResponse.RESP_SUCCESS)
                paylog.PayResult = "支付失败";
            else { 
                //账户操作
                var acc = _uow.AccountService.Get(t => t.UserId == order.UserId);
                if (acc == null)
                {
                    acc = new Account() { 
                        UserId = order.UserId,
                        Amount = 0,
                        IsStop = false,
                        CreateTime = DateTime.Now,
                        FrozenAmount = 0
                    };
                    //新增账户
                    _uow.AccountService.Add(acc);
                }
                //账户日志--充值
                var acclog = new AccountLog();
                acclog.UserId = order.UserId;
                acclog.OrderId = order.OrderId;
                acclog.Amount = order.Total;
                acclog.AccountWay = (int)AccountWay.In;
                acclog.Ip = Request.UserHostAddress;
                acclog.CreateTime = DateTime.Now;
                acclog.PayWay = (int)PayWay.UnionPay;
                _uow.AccountLogService.Add(acclog);
                //充值
                acc.Amount += order.Total;
                //账户日志--扣款
                var acclog2 = new AccountLog();
                acclog2.UserId = order.UserId;
                acclog2.OrderId = order.OrderId;
                acclog2.Amount = order.Total;
                acclog2.AccountWay = (int)AccountWay.Out;
                acclog2.Ip = Request.UserHostAddress;
                acclog2.CreateTime = DateTime.Now;
                acclog2.PayWay = (int)PayWay.UnionPay;
                _uow.AccountLogService.Add(acclog2);
                //修改账户余额
                acc.Amount -= order.Total;
                acc.UpdateTime = DateTime.Now;
                //写支付日志
                _uow.PayLogService.Add(paylog);
                //修改订单状态
                order.Status = (int)OrderState.Paid;
                order.UpdateTime = DateTime.Now;
                order.PayTime = DateTime.Now;

            }
            _uow.Commit();
        }
Example #4
0
 /// <summary>
 /// 创建新的 Order 对象。
 /// </summary>
 /// <param name="orderId">OrderId 属性的初始值。</param>
 /// <param name="orderType">OrderType 属性的初始值。</param>
 /// <param name="userId">UserId 属性的初始值。</param>
 /// <param name="total">Total 属性的初始值。</param>
 /// <param name="payWay">PayWay 属性的初始值。</param>
 /// <param name="ip">Ip 属性的初始值。</param>
 /// <param name="status">Status 属性的初始值。</param>
 /// <param name="createTime">CreateTime 属性的初始值。</param>
 /// <param name="isGame">IsGame 属性的初始值。</param>
 public static Order CreateOrder(global::System.Guid orderId, global::System.Int32 orderType, global::System.Int64 userId, global::System.Decimal total, global::System.Int32 payWay, global::System.String ip, global::System.Int32 status, global::System.DateTime createTime, global::System.Boolean isGame)
 {
     Order order = new Order();
     order.OrderId = orderId;
     order.OrderType = orderType;
     order.UserId = userId;
     order.Total = total;
     order.PayWay = payWay;
     order.Ip = ip;
     order.Status = status;
     order.CreateTime = createTime;
     order.IsGame = isGame;
     return order;
 }