/// <summary>
        /// 订单支付
        /// </summary>
        /// <returns></returns>
        public ActionResult OrderPay()
        {
            PointCommodityOrderPayArgs args = RequestArgs <PointCommodityOrderPayArgs>();

            if (args == null)
            {
                return(RespondResult(false, "参数无效。"));
            }

            args.DomainId       = DomainContext.Domain.Id;
            args.AppId          = DomainContext.AppId;
            args.MemberId       = MemberContext.Member.Id;
            args.OpenId         = MemberContext.Member.OpenId;
            args.SpbillCreateIp = Request.UserHostAddress;

            NormalResult <PointCommodityOrderPayResult> result = _pointCommodityManager.OrderPay(args, DomainContext.AuthorizerPay);

            return(RespondDataResult(result));
        }
        /// <summary>
        /// 发起订单支付
        /// 0 支付成功 1 积分不足 2 账户余额不足(小于想使用的金额)
        /// 3 需要微信支付,微信支付下单成功(返回微支付订单号需转入微信支付画面)
        /// 4 订单状态不是待支付 5 订单已经过期 6 订单不存在 7 微信支付下单失败
        /// 8 已经有待支付的微信支付订单了且微信支付金额同这次一样(返回微支付订单号需转入微信支付画面)
        /// </summary>
        /// <returns></returns>
        public NormalResult <PointCommodityOrderPayResult> OrderPay(PointCommodityOrderPayArgs args, AuthorizerPayConfig config)
        {
            NormalResult <PointCommodityOrderPayResult> result = new NormalResult <PointCommodityOrderPayResult>(false);

            //判断订单状态
            PointCommodityOrderEntity order = GetOrder(args.OrderId);

            if (order == null)
            {
                result.Reason = 6;
                return(result);
            }

            if (order.Status != PointCommodityOrderStatus.NoPayment)
            {
                result.Reason = 4;
                InsertOrderLog(order, 4);
                return(result);
            }

            //判断订单是否已经过期
            if (order.ExpireTime <= DateTime.Now)
            {
                result.Reason = 5;
                InsertOrderLog(order, 5);
                return(result);
            }

            //积分是否足够在前端提交时就判断了,到这里后不会再次判断
            //在存储过程中判断即可

            //判断账户余额是否足够,是否大于想使用的金额
            //这里初步判断,存储过程中还要判断(行锁定)
            int cashAccount = _memberManager.GetMemberCashAccountBalances(args.MemberId);

            if (cashAccount < args.CashAccountFee)
            {
                result.Reason = 2;
                InsertOrderLog(order, 2);
                return(result);
            }

            //判断是否已经有待支付的微信支付订单了
            //如果有,但已过期,则关闭原订单
            //如果有,但金额和这次不一样,则关闭原订单
            //如果有,且未过期且金额与本次一致,返回微支付订单号需转入微信支付画面
            string outTradeNo = args.OrderId.ToString().Replace("-", "");
            List <PayOrderEntity> existPayOrderList = _payManager.GetPayOrderByOutTradeNo(outTradeNo);

            foreach (PayOrderEntity existPayOrder in existPayOrderList)
            {
                if (existPayOrder.TimeExpire <= DateTime.Now)
                {
                    _payManager.ClosePayOrder(existPayOrder.OutTradeNo, config);
                    continue;
                }

                if (existPayOrder.TotalFee != args.WeixinPayFee)
                {
                    _payManager.ClosePayOrder(existPayOrder.OutTradeNo, config);
                    continue;
                }

                result.Reason          = 8;
                result.Data            = new PointCommodityOrderPayResult();
                result.Data.PayOrderId = existPayOrder.Id;
                result.Success         = true;
                return(result);
            }

            //判断是否需要微信支付,如果需要则直接生成微信支付订单并返回订单号到前端跳转
            //订单的完成在支付成功的回调中处理
            //微信支付成功后,还是先把钱存到账户余额,然后再从余额中下帐成单
            if (args.WeixinPayFee > 0)
            {
                #region 创建微信支付定单

                CreatePayOrderArgs createPayOrderArgs = new CreatePayOrderArgs();

                createPayOrderArgs.MemberId       = args.MemberId;
                createPayOrderArgs.OpenId         = args.OpenId;
                createPayOrderArgs.Fee            = args.WeixinPayFee;
                createPayOrderArgs.SpbillCreateIp = args.SpbillCreateIp;

                createPayOrderArgs.OrderType  = EnumPayOrderType.PointCommodity;
                createPayOrderArgs.Body       = order.OrderNumber;
                createPayOrderArgs.OutTradeNo = outTradeNo;
                NormalResult <CreatePayOrderResult> createPayOrderResult = _payManager.CreatePayOrder(createPayOrderArgs, config);

                if (createPayOrderResult.Success == false)
                {
                    InsertOrderLog(order, 7, createPayOrderResult.Message);
                    result.Reason  = 7;
                    result.Message = createPayOrderResult.Message;
                    return(result);
                }

                InsertOrderLog(order, 3);
                result.Reason          = 3;
                result.Data            = new PointCommodityOrderPayResult();
                result.Data.PayOrderId = createPayOrderResult.Data.PayOrderId;
                result.Success         = true;
                return(result);

                #endregion
            }

            //如果不需要微信支付,则转到存储过程开始处理
            NormalResult checkoutResult = Checkout(order);
            result.Reason = checkoutResult.Reason;

            if (result.Reason == 0)
            {
                result.Success = true;
            }

            return(result);
        }