示例#1
0
        /// <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();
        }