Exemplo n.º 1
0
        /// <summary>
        /// 订单支付成功
        /// </summary>
        /// <param name="sType"></param>
        /// <param name="userId"></param>
        /// <param name="uid"></param>
        /// <param name="getData"></param>
        /// <param name="postData"></param>
        /// <returns></returns>
        public static MResult <string> OrderPaymentSuccess(SystemType sType, int userId, string uid, string getData, string postData)
        {
            var result = new MResult <string>();

            try
            {
                if (!string.IsNullOrWhiteSpace(getData))
                {
                    var getDataForNameValue = HttpUtility.ParseQueryString(getData);

                    #region 解析 query 参数集合 组成 SortedDictionary
                    var sortDict = new SortedDictionary <string, string>();
                    foreach (string name in getDataForNameValue)
                    {
                        sortDict.Add(name, getDataForNameValue.Get(name));
                    }
                    #endregion

                    #region 解析参数
                    var outTradeNo   = getDataForNameValue.Get("out_trade_no");
                    var requestToken = getDataForNameValue.Get("request_token");
                    var resultStatus = getDataForNameValue.Get("result");
                    var tradeNo      = getDataForNameValue.Get("trade_no");
                    #endregion

                    #region 验证 签名是否合法
                    var alipayPayment  = new AlipayWapPayment();
                    var validationPass = alipayPayment.ValidationSign(sortDict);
                    #endregion

                    #region 解析订单编号和用户编号
                    var orderCode = string.Empty;
                    var userCode  = string.Empty;

                    var tradeNosplit = (outTradeNo ?? "").Split('-');
                    if (tradeNosplit.Length == 2)
                    {
                        orderCode = tradeNosplit[0];
                        userCode  = tradeNosplit[1];
                    }
                    #endregion

                    if (!string.IsNullOrEmpty(orderCode) &&
                        !string.IsNullOrEmpty(userCode) &&
                        resultStatus.Equals("success", StringComparison.InvariantCultureIgnoreCase) &&
                        validationPass)
                    {
                        #region 更新订单状态
                        var orderDal  = DALFactory.Order();
                        var orderInfo = orderDal.GetOrderInfo(orderCode);
                        if (orderInfo != null && orderInfo.orderNo > 0)
                        {
                            if (orderInfo.payStatus == 2 || orderInfo.payStatus == 1)
                            {
                                result.status = MResultStatus.LogicError;
                                result.msg    = "该订单已经支付 或正在支付中!";
                            }
                            else
                            {
                                result.info = orderCode;
                                orderDal.UpdateOrderPayStatusSuccess(orderCode, userCode);
                                result.status = MResultStatus.Success;
                            }
                        }
                        #endregion
                    }
                    else
                    {
                        result.status = MResultStatus.LogicError;
                        result.msg    = "支付失败!";
                    }
                }
            }
            catch (Exception)
            {
                result.status = MResultStatus.ExceptionError;
                result.msg    = "处理订单支付成功 出现异常!";
            }
            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 订单支付
        /// </summary>
        /// <param name="sType"></param>
        /// <param name="userId"></param>
        /// <param name="uid"></param>
        /// <param name="oCode"></param>
        /// <param name="payId"></param>
        /// <returns></returns>
        public static MResult <string> OrderPayment(SystemType sType, int userId, string uid, string oCode, int payId)
        {
            var result = new MResult <string>();

            try
            {
                if (userId > 0 && !string.IsNullOrEmpty(oCode) && payId > 0)
                {
                    var orderDal    = DALFactory.Order();
                    var baseDataDal = DALFactory.BaseData();
                    var memberDal   = DALFactory.Member();

                    var memberInfo = memberDal.GetMemberInfo(userId);
                    #region 验证用户id
                    if (memberInfo == null || memberInfo.membNo <= 0)
                    {
                        result.status = Core.Enums.MResultStatus.LogicError;
                        result.msg    = "用户不存在!";
                        return(result);
                    }
                    #endregion

                    var orderInfo = orderDal.GetOrderInfo(oCode);
                    //订单编码正确
                    if (orderInfo != null && orderInfo.orderNo > 0)
                    {
                        #region 验证订单创建用户
                        if (orderInfo.userCode != memberInfo.userCode)
                        {
                            result.status = Core.Enums.MResultStatus.LogicError;
                            result.msg    = "该订单不属于次用户!";
                            return(result);
                        }
                        #endregion

                        #region 验正 订单状态
                        if (orderInfo.flowStatus < 0)
                        {
                            result.status = Core.Enums.MResultStatus.LogicError;
                            result.msg    = "订单状态错误!";
                            return(result);
                        }
                        #endregion

                        #region 验证 订单支付状态
                        if (orderInfo.payStatus != 0)
                        {
                            result.status = Core.Enums.MResultStatus.LogicError;
                            result.msg    = "订单支付状态错误!";
                            return(result);
                        }
                        #endregion

                        var payInfo = baseDataDal.GetPaymentInfo(payId);

                        #region 验证支付信息
                        if (payInfo == null)
                        {
                            result.status = Core.Enums.MResultStatus.LogicError;
                            result.msg    = "支付方式错误!";
                            return(result);
                        }
                        #endregion

                        var payCofnig = new PayConfigs()
                        {
                            OutTradeNo      = string.Format("{0}-{1}", orderInfo.orderCode, orderInfo.userCode),
                            OutUser         = memberInfo.email,
                            Subject         = "母婴之家订单支付",
                            RequestIdentity = string.Format("{0}_{1}", orderInfo.userCode, memberInfo.email),
                            //TotalFee = MCvHelper.To(orderInfo.shouldPay, "0.00")
                            //TODO: 测试支付的时候请取消注视
                            TotalFee = MCvHelper.To("0.01", "0.00")
                        };

                        switch (payInfo.intPayID)
                        {
                            #region 支付宝(手机)支付
                        case 20049:
                        {
                            var paymentManage = new AlipayWapPayment(payCofnig);
                            result.info   = paymentManage.Init().CreateRequestUrl();
                            result.status = Core.Enums.MResultStatus.Success;
                            break;
                        }
                            #endregion

                            #region 默认值
                        default:
                            result.status = Core.Enums.MResultStatus.LogicError;
                            result.msg    = "该支付方式wcf 不支持! 请联系客服!";
                            break;
                            #endregion
                        }
                    }
                    else
                    {
                        result.status = Core.Enums.MResultStatus.LogicError;
                        result.msg    = "订单编码错误!";
                    }
                }
                else
                {
                    result.status = Core.Enums.MResultStatus.ParamsError;
                    result.msg    = "参数错误!";
                }
            }
            catch (Exception)
            {
                result.status = Core.Enums.MResultStatus.ExceptionError;
                result.msg    = "订单支付 执行出现异常!";
            }

            return(result);
        }