/// <summary> /// 检查客户端传来的礼品卡数据,并过滤不合法的数据 /// </summary> /// <param name="order"></param> private void PreCheckCalculateGiftCardPay(OrderInfo order) { //去掉卡号重复的礼品卡 order.GiftCardList = order.GiftCardList.Distinct(new GiftCardInfoEqualityComparer()).ToList(); //查询得到礼品卡信息 List <string> giftCardCodeList = order.GiftCardList.Select(g => SafeTrim(g.Code)).ToList(); List <GiftCardInfo> giftCardInfoList = PipelineDA.QueryGiftCardInfoList(giftCardCodeList); List <string> invalidGiftCardCodeList = new List <string>(); StringBuilder giftCardErrorDesc = new StringBuilder(); for (var index = order.GiftCardList.Count - 1; index >= 0; index--) { if (string.IsNullOrWhiteSpace(order.GiftCardList[index].Code)) { giftCardErrorDesc.AppendLine(LanguageHelper.GetText("礼品卡卡号不能为空!请重新输入正确的卡号。", order.LanguageCode)); invalidGiftCardCodeList.Add(order.GiftCardList[index].Code); } else { var giftCardInfo = giftCardInfoList.Find(g => String.Equals(SafeTrim(g.Code), SafeTrim(order.GiftCardList[index].Code), StringComparison.InvariantCultureIgnoreCase)); if (giftCardInfo == null) { giftCardErrorDesc.AppendLine(LanguageHelper.GetText(string.Format("礼品卡【{0}】密码输入错误!请重新输入正确的密码。", order.GiftCardList[index].Code), order.LanguageCode)); invalidGiftCardCodeList.Add(order.GiftCardList[index].Code); } else { giftCardInfo["Crypto"] = "1"; if (giftCardInfo.BindingCustomerSysNo > 0) { if (giftCardInfo.BindingCustomerSysNo != order.Customer.SysNo) { giftCardErrorDesc.AppendLine(LanguageHelper.GetText(string.Format("您输入的礼品卡【{0}】只能由其绑定的客户使用!", giftCardInfo.Code), order.LanguageCode)); invalidGiftCardCodeList.Add(giftCardInfo.Code); continue; } } else { string inputPassword = order.GiftCardList[index].Password; if (order.GiftCardList[index].HasProperty("Crypto") && Convert.ToString(order.GiftCardList[index]["Crypto"]) == "1") { //用户篡改客户端数据导致无法解密,按密码错误处理 try { inputPassword = ECommerce.Utility.CryptoManager.GetCrypto(ECommerce.Utility.CryptoAlgorithm.DES).Decrypt(SafeTrim(inputPassword)); } catch { inputPassword = String.Empty; } } string decryptedPwd = ECommerce.Utility.CryptoManager.GetCrypto(ECommerce.Utility.CryptoAlgorithm.DES).Decrypt(SafeTrim(giftCardInfo.Password)); bool passwordValid = String.Equals(decryptedPwd, SafeTrim(inputPassword), StringComparison.InvariantCultureIgnoreCase); if (!passwordValid) { giftCardErrorDesc.AppendLine(LanguageHelper.GetText(string.Format("礼品卡【{0}】密码输入错误!请重新输入正确的密码。", giftCardInfo.Code), order.LanguageCode)); invalidGiftCardCodeList.Add(giftCardInfo.Code); continue; } } if (giftCardInfo.Status == "D") { giftCardErrorDesc.AppendLine(LanguageHelper.GetText(string.Format("您输入的礼品卡【{0}】还未激活!", giftCardInfo.Code), order.LanguageCode)); invalidGiftCardCodeList.Add(giftCardInfo.Code); continue; } if (giftCardInfo.IsLock) { giftCardErrorDesc.AppendLine(LanguageHelper.GetText(string.Format("您输入的礼品卡【{0}】已被锁定,暂时无法使用!", giftCardInfo.Code), order.LanguageCode)); invalidGiftCardCodeList.Add(giftCardInfo.Code); continue; } if (giftCardInfo.ValidBeginDate > DateTime.Today || giftCardInfo.ValidEndDate < DateTime.Today) { giftCardErrorDesc.AppendLine(LanguageHelper.GetText(string.Format("您输入的礼品卡【{0}】未生效或已过期!", giftCardInfo.Code), order.LanguageCode)); invalidGiftCardCodeList.Add(giftCardInfo.Code); continue; } if (giftCardInfo.AvailableAmount <= 0m) { giftCardErrorDesc.AppendLine(LanguageHelper.GetText(string.Format("您输入的礼品卡【{0}】余额不足!", giftCardInfo.Code), order.LanguageCode)); invalidGiftCardCodeList.Add(giftCardInfo.Code); continue; } order.GiftCardList[index] = giftCardInfo; } } } //去掉没有通过验证的礼品卡 order.GiftCardList.RemoveAll(g => invalidGiftCardCodeList.Any(giftCardCode => string.IsNullOrWhiteSpace(g.Code) || String.Equals(SafeTrim(g.Code), SafeTrim(giftCardCode), StringComparison.InvariantCultureIgnoreCase))); order.GiftCardErrorDesc = giftCardErrorDesc.ToString(); }