/// <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; }
/// <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; }