Ejemplo n.º 1
0
        /// <summary>
        /// 查询支付情况
        /// </summary>
        /// <param name="quickPayment_Object"></param>
        /// <returns></returns>
        public TVMResult <TVMPayInfo> QueryPay(QuickPayment_Object quickPayment_Object)
        {
            var result = new TVMResult <TVMPayInfo>
            {
                ResultCode = 1,
                SysDate    = DateTime.Now,
                Message    = "查询失败"
            };
            TVMPayInfo payInfo = quickPayment_Object.PayData;

            if (quickPayment_Object.PayData == null)
            {
                result.Message = "查询失败,信息丢失";
                return(result);
            }

            var tbl_Order = _orderService.Get(payInfo.m_PayPassOrderID);

            if (tbl_Order == null)
            {
                result.Message = "订单不存在";
                return(result);
            }
            result.ResultCode = 0;
            result.Message    = "成功";
            result.Data       = payInfo;
            return(result);
        }
        /// <summary>
        /// 查询支付情况
        /// </summary>
        /// <param name="quickPayment_Object"></param>
        /// <returns></returns>
        public TVMResult <TVMPayInfo> QueryPay(QuickPayment_Object quickPayment_Object)
        {
            var result = new TVMResult <TVMPayInfo>
            {
                ResultCode = 1,
                SysDate    = DateTime.Now,
                Message    = "查询失败"
            };
            TVMPayInfo payInfo = quickPayment_Object.PayData;

            if (quickPayment_Object.PayData == null)
            {
                result.Message = "查询失败,信息丢失";
                return(result);
            }

            //确认支付是否成功,每隔一段时间查询一次订单,共查询5次--订单有效时间10秒
            int queryTimes = 5;//查询次数计数器

            while (queryTimes-- > 0)
            {
                var tbl_Order = _orderService.GetByAuthCode(payInfo.ScannerPayCode);
                if (tbl_Order == null)
                {
                    Thread.Sleep(2000);
                    continue;
                }
                result.ResultCode = 0;
                result.Message    = "成功";
                result.Data       = new TVMPayInfo()
                {
                    payResult        = true,
                    payType          = tbl_Order.PayType.ToString(),
                    PayMsg           = "支付成功",
                    return_trade_no  = tbl_Order.PayTradeNo,
                    m_PayPassOrderID = tbl_Order.OrderNo,
                    merchantCode     = quickPayment_Object.PayData.merchantCode,   //商户id
                    terminalNo       = quickPayment_Object.PayData.terminalNo,     //终端编号
                    TerminalType     = quickPayment_Object.PayData.TerminalType,   //终端类型
                    strPaymoney      = tbl_Order.TotalAmount.ToString(),           //支付金额
                    ScannerPayCode   = quickPayment_Object.PayData.ScannerPayCode, //支付码
                    postOrder        = quickPayment_Object.PayData.postOrder
                };
                return(result);
            }
            result.Message = "订单不存在";
            return(result);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 销售门票请求票务详情
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public TVMResult <List <SaleTicket_Result> > SaleTicket(QuickPayment_Object quickPayment_Object)
        {
            var result = new TVMResult <List <SaleTicket_Result> >
            {
                ResultCode = 1,
                SysDate    = DateTime.Now,
                Message    = "失败",
                Data       = new List <SaleTicket_Result>()
            };
            TVMPayInfo payInfo = quickPayment_Object.PayData;

            if (quickPayment_Object.PayData == null)
            {
                result.Message = "查询失败,信息丢失";
                return(result);
            }
            var tbl_Order = _orderService.Get(payInfo.m_PayPassOrderID);

            if (tbl_Order == null)
            {
                result.Message = "订单不存在";
                return(result);
            }
            var orderDetails = _orderDetailService.GetList(payInfo.m_PayPassOrderID);

            try
            {
                _orderService.BeginTran();
                foreach (var row in orderDetails)
                {
                    var tbl_OrderDetail = _orderDetailService.UpdatePrintTicketStatus(row.OrderDetailId);
                    _noticeOrderConsumedService.Update(tbl_OrderDetail);
                }
                //提交事物
                _orderService.CommitTran();
            }
            catch
            {
                _orderService.RollbackTran();
            }
            foreach (var row in orderDetails)
            {
                string code = SecurityExtension.DesEncrypt(row.QRcode, AppSettingsConfig.QrCodeKey);
                result.Data.Add(new SaleTicket_Result
                {
                    OrderID        = row.OrderNo, //订单详情id
                    StrInvoiceCode = code,        //交易号
                    TicketName     = row.TicketName,
                    TicketId       = row.TicketId.ToString(),
                    TypeName       = "",
                    StartDate      = row.ValidityDateStart,
                    EndDate        = row.ValidityDateEnd,
                    Price          = Convert.ToDouble(row.Price),
                    GeneralPrice   = Convert.ToDouble(row.Price * row.Quantity),
                    PeopleCount    = row.Quantity,
                    ENSBARCODE     = code,              //加密的条码
                    Sbarcode       = row.CertificateNO, //凭证号
                    Remarks        = "限当日有效"
                });
            }
            result.ResultCode = 0;
            result.Message    = "成功";
            return(result);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 创建订单并支付
        /// </summary>
        /// <param name="quickPayment_Object"></param>
        /// <returns></returns>
        public TVMResult <TVMPayInfo> QuickPayment(QuickPayment_Object quickPayment_Object)
        {
            var result = new TVMResult <TVMPayInfo>
            {
                ResultCode = 1,
                SysDate    = DateTime.Now,
                Message    = "订单创建异常,订单创建失败"
            };
            TVMPayInfo payInfo = quickPayment_Object.PayData;

            if (payInfo.postOrder.Count == 0)
            {
                result.Message = "未找到门票信息";
                return(result);
            }
            if (string.IsNullOrEmpty(payInfo.ScannerPayCode))
            {
                result.Message = "支付码未被扫描到,请联系管理员";
                return(result);
            }
            int payType = 0;//道控支付类型 0:支付宝 1:微信

            if (!int.TryParse(payInfo.payType, out payType) || payType < 0 || payType >= 2)
            {
                result.Message = "支付方式不明确,请联系管理员";
                return(result);
            }
            payType = payType == 1 ? (int)PayStatus.Wechat : (int)PayStatus.Alipay;
            var orderInfo = new OrderInfoModel
            {
                Code           = payInfo.ScannerPayCode, //支付码
                PayType        = payType,                //支付类型 1:支付宝 2:微信
                ValidityDate   = DateTime.Now.Date,
                Mobile         = "",
                Linkman        = "",
                TicketCategory = (int)TicketCategoryStatus.QrCodePrintTicket,
                TicketSource   = (int)TicketSourceStatus.ScenicSpot,
                TicketItem     = new List <TicketItemModel>()
            };

            foreach (var row in payInfo.postOrder)
            {
                orderInfo.TicketItem.Add(new TicketItemModel
                {
                    TicketId  = row.ProductID,
                    BookCount = row.ProductCount
                });
            }

            var tbl_Tickets      = _ticketService.GetTickets(payInfo.postOrder.Select(a => a.ProductID).ToList());
            var tbl_Order        = _orderService.AddOrderForNoPay(orderInfo);
            var tbl_OrderDetails = _orderDetailService.AddOrderDetailForQrCodeNoPay(orderInfo, tbl_Order);

            _orderService.UpdateOrder(tbl_Order, tbl_OrderDetails);
            var tbl_Ticket_Testing = _ticketTestingService.addTicketTestings(tbl_Order, tbl_OrderDetails);

            _ticketService.UpdateTicketBySellCount(tbl_Tickets, tbl_OrderDetails);
            var tbl_SaleLog = _saleLogService.addSaleLog(tbl_Order);


            if (orderInfo.PayType == (int)PayStatus.Wechat)
            {
                var payResult = _wxPayGateway.OrderPay(tbl_Order.TicketName, tbl_Order.TotalAmount, payInfo.ScannerPayCode);
                if (!payResult.Success)
                {
                    result.Message = payResult.Message;
                    return(result);
                }
                tbl_Order.PayTradeNo = payResult.OutTradeNo;
            }
            else if (orderInfo.PayType == (int)PayStatus.Alipay)
            {
                var payResult = _alipayPayGateway.OrderPay(tbl_Order.TicketName, tbl_Order.TotalAmount.ToString(), payInfo.ScannerPayCode);
                if (!payResult.Success)
                {
                    result.Message = payResult.Message;
                    return(result);
                }
                tbl_Order.PayTradeNo = payResult.OutTradeNo;
            }

            try
            {
                using (SqlConnection connection = new SqlConnection(DbConfig.TicketConnectionString))
                {
                    connection.Open();
                    var trans = connection.BeginTransaction();
                    SqlBulkInsert.Inert(tbl_Order, connection, trans);
                    SqlBulkInsert.Inert(tbl_OrderDetails, connection, trans);
                    SqlBulkInsert.Inert(tbl_Ticket_Testing, connection, trans);
                    _ticketService.UpdateTicket(tbl_Tickets, connection, trans);
                    SqlBulkInsert.Inert(tbl_SaleLog, connection, trans);
                    trans.Commit();
                }
                result.ResultCode = 0;
                result.Message    = "成功";
                result.Data       = new TVMPayInfo()
                {
                    payResult        = true,
                    payType          = tbl_Order.PayType.ToString(),
                    PayMsg           = "支付成功",
                    return_trade_no  = tbl_Order.PayTradeNo,
                    m_PayPassOrderID = tbl_Order.OrderNo,
                    merchantCode     = quickPayment_Object.PayData.merchantCode,   //商户id
                    terminalNo       = quickPayment_Object.PayData.terminalNo,     //终端编号
                    TerminalType     = quickPayment_Object.PayData.TerminalType,   //终端类型
                    strPaymoney      = tbl_Order.TotalAmount.ToString(),           //支付金额
                    ScannerPayCode   = quickPayment_Object.PayData.ScannerPayCode, //支付码
                    postOrder        = quickPayment_Object.PayData.postOrder
                };
                return(result);
            }
            catch (Exception ex)
            {
                if (orderInfo.PayType == (int)PayStatus.Wechat && !string.IsNullOrEmpty(tbl_Order.PayTradeNo))
                {
                    var isCancel = _wxPayGateway.Cancel(tbl_Order.PayTradeNo);
                    if (!isCancel)
                    {
                        result.Message = "系统异常,订单创建失败,请联系景区人员进行退款!";
                    }
                }
                else if (orderInfo.PayType == (int)PayStatus.Alipay && !string.IsNullOrEmpty(tbl_Order.PayTradeNo))
                {
                    var isCancel = _alipayPayGateway.Cancel(tbl_Order.PayTradeNo, tbl_Order.TotalAmount.ToString());
                    if (!isCancel)
                    {
                        result.Message = "系统异常,订单创建失败,请联系景区人员进行退款!";
                    }
                }
            }
            return(result);
        }