Example #1
0
        /// <summary>
        /// 支付成功 支付订单(充值订单、商城订单)更新操作
        /// </summary>
        /// <param name="view">支付单信息</param>
        /// <returns>操作结果</returns>
        public ResultModel PaymentOrder(PaymentOrderView view)
        {
            var result = new ResultModel()
            {
                IsValid = false
            };

            PaymentOrderView tempPaymentOrder =
                base._database.Db.PaymentOrder.Find(base._database.Db.PaymentOrder.paymentOrderId == view.PaymentOrderID);

            if (tempPaymentOrder != null && (OrderEnums.PaymentFlag)tempPaymentOrder.Flag == OrderEnums.PaymentFlag.NonPaid)
            {
                view.PayType = tempPaymentOrder.PayType;
                switch ((OrderEnums.PaidType)tempPaymentOrder.PayType)
                {
                //商城订单处理
                case OrderEnums.PaidType.Mall:
                    result = this.PaymentMallOrder(view);
                    break;

                //充值订单处理
                case OrderEnums.PaidType.Recharge:
                default:
                    ZJ_UserBalanceServiceWeb zjbsw = new ZJ_UserBalanceServiceWeb();
                    result = zjbsw.AccountRechargeWeb(view.PaymentOrderID, view.outOrderId);
                    break;
                }
            }
            return(result);
        }
Example #2
0
        /// <summary>
        /// 更新支付单
        /// </summary>
        /// <param name="view">支付单</param>
        /// <param name="db">数据Db</param>
        /// <returns></returns>
        private ResultModel UpdatePrivate(PaymentOrderView view, dynamic db)
        {
            ResultModel resultModel = new ResultModel()
            {
                IsValid = db.PaymentOrder.Update(view) > 0
            };

            return(resultModel);
        }
Example #3
0
        /// <summary>
        /// 获取支付单信息
        /// </summary>
        /// <param name="paymentOrderView">查询支付对象(需提供PaymengOrderId,UserID)</param>
        /// <param name="db">数据Db</param>
        /// <returns></returns>
        private ResultModel GetPaymentOrderPrivate(PaymentOrderView paymentOrderView, dynamic db)
        {
            ResultModel result = new ResultModel()
            {
                IsValid = false
            };
            PaymentOrderView view =
                db.PaymentOrder.Find(db.PaymentOrder.PaymentOrderID == paymentOrderView.PaymentOrderID &&
                                     db.PaymentOrder.UserID == paymentOrderView.UserID);

            result.IsValid = view != null;
            result.Data    = view;
            return(result);
        }
Example #4
0
        /// <summary>
        /// 货到付款 支付处理
        /// </summary>
        /// <param name="view">支付单信息(PaymentOrderID,UserID)</param>
        /// <returns></returns>
        public ResultModel PaymentCODOrder(PaymentOrderView view)
        {
            ResultModel result = new ResultModel();

            dynamic orderDetails = base._database.Db.PaymentOrder.All()
                                   .Join(base._database.Db.PaymentOrder_Orders,
                                         PaymentOrderID: base._database.Db.PaymentOrder.PaymentOrderID)
                                   .Join(base._database.Db.Order, OrderID: base._database.Db.PaymentOrder_Orders.OrderID)
                                   .Join(base._database.Db.OrderDetails, OrderID: base._database.Db.PaymentOrder_Orders.OrderID)
                                   .Where(base._database.Db.PaymentOrder.PaymentOrderID == view.PaymentOrderID &&
                                          base._database.Db.PaymentOrder.UserID == view.UserID &&
                                          base._database.Db.Order.OrderStatus == (int)OrderEnums.OrderStatus.Obligation
                                          )
                                   .Select(base._database.Db.OrderDetails.ProductId, base._database.Db.OrderDetails.Quantity, base._database.Db.OrderDetails.OrderID).ToList();

            List <string> sqls     = new List <string>();
            List <string> orderIds = new List <string>();

            foreach (var orderDetail in orderDetails)
            {
                sqls.Add(
                    productService.GenerateUpdateSaleCountSql(new ProductView()
                {
                    ProductId = orderDetail.ProductId,
                    SaleCount = orderDetail.Quantity
                }));
                if (!orderIds.Any(x => x == orderDetail.OrderID))
                {
                    orderIds.Add(orderDetail.OrderID);
                }
            }
            foreach (string orderId in orderIds)
            {
                sqls.Add(orderService.GenerateUpdateOrderStatusSql(new OrderView()
                {
                    OrderID = orderId, OrderStatus = (int)OrderEnums.OrderStatus.WaitDeliver
                }));
            }

            string sql = SqlTransactionUtil.GenerateTransSql(sqls);

            //执行sql
            var     queryResult = _database.RunSqlQuery(x => x.ToResultSets(sql));
            dynamic source      = queryResult[0][0];

            result.IsValid = source.Count > 0;
            return(result);
        }
Example #5
0
        /// <summary>
        /// 根据支付通道、第三方订单号获取支付单
        /// </summary>
        /// <param name="payChannel">支付通道</param>
        /// <param name="outerOrderId">第三方订单号</param>
        /// <param name="userId">用户Id</param>
        /// <returns>Data:PaymentOrderView</returns>
        public ResultModel GetPaymentOrderBy(OrderEnums.PayChannel payChannel, string outerOrderId, long userId)
        {
            ResultModel result = new ResultModel()
            {
                IsValid = false
            };
            PaymentOrderView view =
                _database.Db.PaymentOrder.Find(_database.Db.PaymentOrder.PayChannel == (int)payChannel &&
                                               _database.Db.PaymentOrder.outOrderId == outerOrderId &&
                                               _database.Db.PaymentOrder.UserID == userId
                                               );

            result.IsValid = view != null;
            result.Data    = view;
            return(result);
        }
Example #6
0
        /// <summary>
        /// 根据订单ID,用户ID获取支付单
        /// </summary>
        /// <param name="paymentOrderView">查询支付单对象(需提供 PaymentOrderID,UserID)</param>
        /// <returns>Data:PaymentOrderView</returns>
        public ResultModel GetPaymentOrderByOrderNO(PaymentOrderView paymentOrderView)
        {
            ResultModel result = new ResultModel()
            {
                IsValid = false
            };
            string sql = string.Format(
                "SELECT TOP 1 * FROM dbo.PaymentOrder WHERE OrderNO  IN (SELECT b.OrderID FROM PaymentOrder AS a INNER JOIN PaymentOrder_Orders AS b ON a.PaymentOrderID=b.PaymentOrderID WHERE a.PaymentOrderID={0} AND a.UserID={1}) AND UserID={1}", paymentOrderView.PaymentOrderID, paymentOrderView.UserID);

            //执行sql
            var queryResult = _database.RunSqlQuery(x => x.ToResultSets(sql));
            PaymentOrderView paymentOrder = queryResult[0].Count > 0 ? queryResult[0][0] : null;

            result.IsValid = paymentOrder != null;
            result.Data    = paymentOrder;
            return(result);
        }
Example #7
0
        /// <summary>
        /// 获取支付单数据
        /// </summary>
        /// <param name="view">支付单查找条件(需要提供 PaymentOrderID,UserID)</param>
        /// <param name="languageID">Id</param>
        /// <returns></returns>
        public ResultModel GetPaymentActionData(PaymentOrderView view, int languageID)
        {
            ResultModel resultModel = new ResultModel()
            {
                IsValid = false
            };

            PaymentActionPageView paymentAction = null;

            view.Flag = (int)OrderEnums.PaymentFlag.NonPaid;
            string sql = string.Format(@"SELECT TOP 1 a.PaymentOrderID, a.PayChannel, a.Flag,a.UserID, a.ProductAmount,
                                         c.OrderID,c.OrderAddressId,c.PostalCode,c.Mobile,c.THAreaID,c.Email,c.DetailsAddress,c.Receiver  
                                         FROM PaymentOrder AS a 
                                         INNER JOIN PaymentOrder_Orders AS b 
                                         ON a.PaymentOrderID=b.PaymentOrderID 
                                         INNER JOIN OrderAddress AS c 
                                         ON b.OrderID=c.OrderID
                                         WHERE a.PaymentOrderID='{0}' AND a.Flag={1} AND a.UserID={2}
                                        ", SqlFilterUtil.ReplaceSqlChar(view.PaymentOrderID), view.Flag, view.UserID);
            //执行sql
            var queryResult = _database.RunSqlQuery(x => x.ToResultSets(sql));

            if (queryResult[0].Count > 0)
            {
                resultModel.IsValid = true;
                dynamic paymentData = queryResult[0][0];

                paymentAction = new PaymentActionPageView();
                paymentAction.PaymentOrderView =
                    new PaymentOrderView()
                {
                    PaymentOrderID = paymentData.PaymentOrderID,
                    ProductAmount  = paymentData.ProductAmount,
                    PayChannel     = paymentData.PayChannel,
                    Flag           = paymentData.Flag,
                    UserID         = paymentData.UserID
                };


                paymentAction.OrderAddressView = new OrderAddressView()
                {
                    OrderID        = paymentData.OrderID,
                    OrderAddressId = paymentData.OrderAddressId,
                    PostalCode     = paymentData.PostalCode,
                    Mobile         = paymentData.Mobile,
                    THAreaID       = paymentData.THAreaID,
                    Email          = paymentData.Email,
                    DetailsAddress = paymentData.DetailsAddress,
                    Receiver       = paymentData.Receiver
                };

                //获取 省、市、区
                Dictionary <string, string> userAreas = thAreaService.GetSingleTierAreaNames(new SearchUserAddressModel()
                {
                    THAreaID = paymentAction.OrderAddressView.THAreaID
                }, languageID).Data;

                paymentAction.OrderAddressView.DetailsAddress = AddressHelper.ShowUserAddress(userAreas["Country"], userAreas["Sheng"], userAreas["Shi"], userAreas["Qu"],
                                                                                              paymentAction.OrderAddressView.DetailsAddress, languageID);

                paymentAction.OrderDetailsForPayResultView = orderService.GetOrderDetailsByPaymentOrderId(paymentAction.PaymentOrderView.PaymentOrderID).Data;
            }

            resultModel.Data = paymentAction;
            return(resultModel);
        }
Example #8
0
        /// <summary>
        /// 余额支付
        /// </summary>
        /// <param name="view">支付单信息(需提供 PaymentOrderID,UserID)</param>
        /// <param name="userInfo">>用户信息(用户支付 需提供 UserId,PayPassword,LanguageID)</param>
        /// <param name="isCheckPayPassword">是否检查交易密码(如果是混合支付,充值回来,无需检查交易密码)</param>
        /// <returns></returns>
        public ResultModel PaymentBalanceOrder(PaymentOrderView view, UserInfoViewForPayment userInfo, bool isCheckPayPassword)
        {
            var resultModel = new ResultModel()
            {
                IsValid = false,
                //"服务器繁忙,请稍候再试"
                Messages = new List <string>()
                {
                    CultureHelper.GetAPPLangSgring("PAYMENT_NETWORK_BUSY", userInfo.LanguageId)
                }
            };

            using (var trans = _database.Db.BeginTransaction())
            {
                try
                {
                    //获取用户数据
                    UserInfoViewForPayment userInfoView = userService.GetYH_UserForPayment(userInfo.UserID, trans).Data;

                    //检查用户是否删除、锁定等
                    ResultModel userInfoResultModel = userService.GetYH_UserForPaymentMessage(userInfoView, isCheckPayPassword ? userInfo : null, trans);


                    //用户、交易密码错误等信息
                    if (!userInfoResultModel.IsValid)
                    {
                        trans.Rollback();
                        resultModel.Messages = new List <string>()
                        {
                            userInfoResultModel.Messages[0]
                        };
                        return(resultModel);
                    }

                    //从数据库中获取支付单
                    PaymentOrderView paymentOrder = this.GetPaymentOrderPrivate(view, trans).Data;

                    //余额不足
                    if (paymentOrder.ProductAmount > userInfoView.ConsumeBalance)
                    {
                        trans.Rollback();
                        resultModel.Messages = new List <string>()
                        {
                            CultureHelper.GetAPPLangSgring("MONEY_ORDER_NSUFFICIENT_BALANCE", userInfo.LanguageId)
                        };
                        return(resultModel);
                    }

                    //查询该支付单下,所有订单
                    List <OrderView> orderViews = base._database.Db.PaymentOrder.Query()
                                                  .LeftJoin(_database.Db.PaymentOrder_Orders,
                                                            PaymentOrderID: base._database.Db.PaymentOrder.PaymentOrderID)
                                                  .LeftJoin(_database.Db.Order, OrderID: _database.Db.PaymentOrder_Orders.OrderID)
                                                  .Where(base._database.Db.PaymentOrder.PaymentOrderID == view.PaymentOrderID &&
                                                         base._database.Db.PaymentOrder.UserID == view.UserID)
                                                  .Select(
                        _database.Db.Order.UserID,
                        _database.Db.Order.OrderID,
                        _database.Db.Order.TotalAmount).ToList <OrderView>();

                    //循环订单 扣除余额
                    foreach (OrderView orderView in orderViews)
                    {
                        ZJ_UserBalanceModel zjmodel = new ZJ_UserBalanceModel();
                        zjmodel.Account        = userInfoView.Account;
                        zjmodel.AddOrCutAmount = -orderView.TotalAmount.Value;
                        zjmodel.AddOrCutType   = 2;
                        zjmodel.CreateBy       = userInfoView.Account;
                        zjmodel.IsDisplay      = 1;
                        zjmodel.Remark         = "购物消费";
                        zjmodel.UserID         = view.UserID;
                        zjmodel.OrderNo        = orderView.OrderID;
                        userBalanceService.UpdateZJ_UserBalance(zjmodel, trans);
                    }

                    trans.Commit();
                    resultModel.IsValid = true;
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                }
            }

            return(resultModel);
        }
Example #9
0
        /// <summary>
        /// 支付商城订单
        /// </summary>
        /// <param name="view">支付单实体</param>
        /// <returns>支付结果</returns>
        private ResultModel PaymentMallOrder(PaymentOrderView view)
        {
            var           result = new ResultModel();
            DateTime      now    = DateTime.Now; //操作时间
            List <string> sqls   = new List <string>();

            //查询需要更新的商品集合
            List <OrderDetailsViewT1> orderDetails = base._database.Db.PaymentOrder.Query()
                                                     .LeftJoin(_database.Db.PaymentOrder_Orders,
                                                               PaymentOrderID: base._database.Db.PaymentOrder.PaymentOrderID)
                                                     .LeftJoin(_database.Db.OrderDetails, OrderID: _database.Db.PaymentOrder_Orders.OrderID)
                                                     .Where(base._database.Db.PaymentOrder.PaymentOrderID == view.PaymentOrderID)
                                                     .Select(
                _database.Db.OrderDetails.OrderID,
                _database.Db.OrderDetails.ProductId,
                _database.Db.OrderDetails.Quantity).ToList <OrderDetailsViewT1>();


            if (orderDetails != null && orderDetails.Count > 0)
            {
                List <string> orderIds = orderDetails.Select(x => x.OrderID).Distinct().ToList();

                //更新订单状态
                foreach (var orderId in orderIds)
                {
                    sqls.Add(orderService.GenerateUpdateOrderStatusSql(new OrderView()
                    {
                        OrderID = orderId, OrderStatus = (int)OrderEnums.OrderStatus.WaitDeliver, PaidDate = now
                    }));
                    sqls.Add(orderTrackingLogService.GenerateInsertSql(new OrderTrackingLogView()
                    {
                        CreateBy        = "用户",
                        CreateTime      = now,
                        OrderID         = orderId,
                        OrderTrackingId = MemCacheFactory.GetCurrentMemCache().Increment("commonId"),
                        TrackingContent = "用户付款",
                        OrderStatus     = (int)OrderEnums.OrderStatus.WaitDeliver
                    }));
                }

                //更新产品销售量
                foreach (var orderDetail in orderDetails)
                {
                    sqls.Add(productService.GenerateUpdateSaleCountSql(new ProductView()
                    {
                        SaleCount = orderDetail.Quantity, ProductId = orderDetail.ProductId
                    }));
                }
            }

            view.PaymentDate = now;
            view.Flag        = (int)OrderEnums.PaymentFlag.Paid;

            //更新支付单状态
            sqls.Add(this.GenerateUpdatePaymentSuccessSql(view));
            string sql = SqlTransactionUtil.GenerateTransSql(sqls);

            //执行sql
            var     queryResult = _database.RunSqlQuery(x => x.ToResultSets(sql));
            dynamic source      = queryResult[0][0];

            result.IsValid = source.Count > 0;
            return(result);
        }
Example #10
0
 /// <summary>
 /// 根据支付单号查找支付单
 /// </summary>
 /// <param name="paymentOrderView">支付单实体(需提供PaymengOrderId,UserID)</param>
 /// <returns>支付单实体</returns>
 public ResultModel GetPaymentOrderBy(PaymentOrderView paymentOrderView)
 {
     return(this.GetPaymentOrderPrivate(paymentOrderView, this._database.Db));
 }
Example #11
0
        /// <summary>
        /// 生成支付单 支付成功Sql
        /// </summary>
        /// <param name="view">订单支付信息</param>
        /// <returns>语句</returns>
        internal string GenerateUpdatePaymentSuccessSql(PaymentOrderView view)
        {
            string sql = string.Format(" UPDATE [PaymentOrder] SET [RealAmount] = {0},[Flag] = {1},[PaymentDate] ='{2}',[outOrderId] = '{3}' WHERE [PaymentOrderID] ='{4}'", view.RealAmount, view.Flag, view.PaymentDate.Value.DateTimeToString(), SqlFilterUtil.ReplaceSqlChar(view.outOrderId), SqlFilterUtil.ReplaceSqlChar(view.PaymentOrderID));

            return(sql);
        }
Example #12
0
 /// <summary>
 /// 更新支付单
 /// </summary>
 /// <param name="view">支付单</param>
 /// <returns></returns>
 public ResultModel Update(PaymentOrderView view)
 {
     return(this.UpdatePrivate(view, this._database.Db));
 }
Example #13
0
        /// <summary>
        /// Omise 泰国支付
        /// </summary>
        /// <param name="omisePaymentModel">omise支付对象</param>
        /// <returns>处理结果</returns>
        public static ResultModel OmisePayment(OmisePaymentService.OmisePaymentModel omisePaymentModel)
        {
            Logger.Error("Omise_Log", string.Format("进入OmisePayment PaymentOrderID:{0}", omisePaymentModel.PaymentOrderId));
            PaymentOrderView requestPaymentOrder = new PaymentOrderView()
            {
                PaymentOrderID = omisePaymentModel.PaymentOrderId,
                UserID         = Convert.ToInt64(omisePaymentModel.UserId)
            };

            //处理结果
            OmisePaymentResultType resultCode = OmisePaymentResultType.Fail;
            ResultModel            result     = _paymentOrderService.GetPaymentOrderBy(requestPaymentOrder);

            if (!result.IsValid || result.Data == null || result.Data.Flag != (int)(OrderEnums.PaymentFlag.NonPaid) || omisePaymentModel.Amount != result.Data.ProductAmount)
            {
                resultCode = OmisePaymentResultType.ParamError;
                Logger.Error("Omise_Log", string.Format("参数异常 PaymentOrderID={0},UserId={1},Amount={2}", requestPaymentOrder.PaymentOrderID, requestPaymentOrder.UserID, omisePaymentModel.Amount));
            }
            else
            {
                requestPaymentOrder = result.Data;
                var chargeInfo = new ChargeCreateInfo();
                chargeInfo.Amount      = (int)(requestPaymentOrder.ProductAmount * 100); //Create a charge with amount 100 THB, here we are passing with the smallest currency unit which is 10000 satangs  交易金额 必须是整数(真实金额*100)。
                chargeInfo.Currency    = "THB";
                chargeInfo.Description = requestPaymentOrder.PaymentOrderID;             //目前这个参数很有可能是我们的订单号或支付单号用这个。
                chargeInfo.Capture     = true;                                           //TRUE means auto capture the charge, FALSE means authorize only. Default is FALSE
                chargeInfo.CardId      = omisePaymentModel.Token;                        //Token generated with Omise.js or Card.js
                //var client = new Omise.Client(YOUR_SECRET_KEY, [YOUR_PUBLIC_KEY]);
                //chargeInfo.ReturnUri = "http://localhost:54741/Home/complete";



                try
                {
                    Client c = new Client(GetConfig.OmiseSecretKey());//new Client("skey_test_50xql6uiv02pemu8z9o");
                    //chargeInfo
                    //c.ChargeService.CreateCharge(chargeInfo);
                    var charge = c.ChargeService.CreateCharge(chargeInfo);
                    //charge.Description
                    //charge.FailureCode
                    //charge.Captured
                    if (charge.Captured && string.IsNullOrEmpty(charge.FailureCode))
                    {
                        var paymentOrder = new PaymentOrderView()
                        {
                            PaymentOrderID = charge.Description,
                            outOrderId     = charge.TransactionId,
                            RealAmount     = charge.Amount / 100.00m
                        };

                        requestPaymentOrder.RealAmount = paymentOrder.RealAmount;

                        if (paymentOrder.RealAmount != requestPaymentOrder.ProductAmount)
                        {
                            Logger.Error("Omise_Log", string.Format("支付成功,但是支付金额小于需要支付的金额 PaymentOrderID={0},outOrderId={1},RealAmount={2}", paymentOrder.PaymentOrderID, paymentOrder.outOrderId, paymentOrder.RealAmount));
                            resultCode = OmisePaymentResultType.LessAmount;
                        }
                        else
                        {
                            //支付成功
                            Logger.Error("Omise_Log", string.Format("支付成功  PaymentOrderID={0},outOrderId={1},RealAmount={2}", paymentOrder.PaymentOrderID, paymentOrder.outOrderId, paymentOrder.RealAmount));

                            ResultModel updateResult = _paymentOrderService.PaymentOrder(paymentOrder);
                            //日志记录
                            if (updateResult.IsValid)
                            {
                                //支付成功,更新数据库成功
                                Logger.Error("Omise_Log", string.Format("支付成功,更新数据库成功 PaymentOrderID={0},outOrderId={1},RealAmount={2}", paymentOrder.PaymentOrderID, paymentOrder.outOrderId, paymentOrder.RealAmount));
                                resultCode = OmisePaymentResultType.Success;
                            }
                            else
                            {
                                //支付成功,更新数据库失败
                                Logger.Error("Omise_Log", string.Format("支付成功,更新数据库失败  PaymentOrderID={0},outOrderId={1},RealAmount={2}", paymentOrder.PaymentOrderID, paymentOrder.outOrderId, paymentOrder.RealAmount));
                                resultCode = OmisePaymentResultType.UpdateDataError;
                            }
                        }
                    }
                    else
                    {
                        resultCode = OmisePaymentResultType.Fail;
                        Logger.Error("Omise_Log", string.Format("支付失败 PaymentOrderID:{0}", requestPaymentOrder.PaymentOrderID));
                    }

                    //var result = c.ChargeService.Capture(charge.Id);
                    //Client.ChargeService.CreateCharge(chargeInfo);
                    //charge.Id //是否是交易ID(这个字段可能性大一些)
                    //charge.TransactionId  是否是交易ID
                    // charge.LiveMode是否是生产环境
                    //charge.FailureCode错误代码
                    //charge.FailureMessage错误信息
                    //var result = c.ChargeService.GetCharge("chrg_test_4xso2s8ivdej29pqnhz");
                }
                catch (Exception ex)
                {
                    resultCode = OmisePaymentResultType.Fail;
                    Logger.Error("Omise_Log", string.Format("支付异常 Error:{0} PaymentOrderID:{1}", ex.Message, requestPaymentOrder.PaymentOrderID));
                }
            }
            ResultModel resultModel = new ResultModel()
            {
                Status = (int)resultCode,
                Data   = requestPaymentOrder
            };

            resultModel.Messages.Add(EnumDescription.GetFieldText(resultCode));
            return(resultModel);
        }