Ejemplo n.º 1
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;
        }
Ejemplo n.º 2
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;
        }