Beispiel #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;
        }