我在我的新ASP.NET MVC 3项目中添加了“确认您的付款”页面。验证输入后,我会显示一个确认页面,以允许用户确保他们正确输入所有内容。我的下一个问题是如何“存储”输入的数据,以便我可以在点击“确认”后处理付款。显然,我不想创建具有完整信用卡号的隐藏字段。
我正在为我们的购物车使用会话,但这会加密数据,以便信用卡号码无法被黑客攻击吗?对此有何建议?我在谷歌上所做的搜索并没有真正发生太多。
我显示他们在上一页输入的信息(以确认数据输入)。当然要正确掩盖信用卡号码。
付款信息
信用卡上的姓名:姓名
信用卡号码:XXXX XXXX XXXX 1111
到期日期:10/2011
卡验证码:100
总费用:$ 50.86
这篇文章中的所有数字当然都是假的。
这是我目前使用的代码。
//
// POST: /Checkout/AddressAndPayment
[HttpPost]
public ActionResult AddressAndPayment(Cart cart, PaymentForm formData)
{
if (cart.Items.Count() == 0)
{
ModelState.AddModelError("", "Sorry your cart is empty!");
}
if (ModelState.IsValid)
{
var viewModel = new AddressPaymentViewModel
{
FormData = formData,
Cart = cart
};
return View("Confirm", viewModel);
}
else
{
var viewModel = new AddressPaymentViewModel
{
FormData = formData,
Cart = cart,
States = States.GetStatesDDL(),
CreditCardTypes = CreditCartTypes.GetCreditCardTypesDDL()
};
return View(viewModel);
}
}
//
// GET: /Checkout/Confirm
public ViewResult Confirm()
{
return View();
}
所以从那里开始,我跑
//
// POST: /Checkout/Confirm
[HttpPost]
public ViewResult Confirm(Cart cart, PaymentForm formData)
{
return View();
}
我还需要将表单数据发送到信用卡处理器。
有更好的方法吗?什么是“最佳实践”?
Another method我看到的是使用信用卡处理器执行“PreAuth”和“PostAuth”,而不是存储该数据期间,只是订单ID。
答案 0 :(得分:3)
在研究我们的选择之后。我们决定进行预授权交易。因此,我们需要存储的是处理器的订单ID,然后在确认详细信息后,我们将发送授权后交易以实际发布付款。
答案 1 :(得分:0)
您可以在加载确认页面之前将模型存储到会话变量中。请记住,会话变量不一定只是变量,而是整个对象。
Session["submitted_data"] = util.Encrypt(Model); //Util.Encrypt would be your custom Encryption lib
修改
哎呀,错过了CC凭证位。
这有点棘手。您可以在订单确认页面后询问信用卡凭证,也可以在数据库中创建Temp_Confirmation表。从那里,您将加密CC凭证,将其存储在DB中,直到它们经过确认页面(将表GUID存储在隐藏字段中),并在另一端检索它。只需确保加密和解密,并在完成后删除记录。
答案 2 :(得分:0)
实际上并未在该页面上显示信用卡号。只需显示最后四位数字,即可验证他们是否使用了正确的信用卡。
我知道你可能想要显示它以验证它们没有错误输入。除了少数用户会仔细检查整个信用卡号码这一事实,您可以通过验证Luhn Algorithm的信用卡号码来捕获大部分潜在错误。如果信用卡号码输入错误,则超过Luhn算法的可能性非常非常小。然后,您可以在进入摘要页面之前请求他们重新输入卡号。
答案 3 :(得分:0)
从概念上讲,您只需要“保存”信息服务器端以便稍后处理。没有理由将此信息作为隐藏字段,cookie,parms或其他任何内容发送回客户端。现在,鉴于您需要在服务器端保存它,您有几个选择:
1)会话状态 - 优势,它现在在那里,它被自动清理,并且(可能)它只是内存。缺点是,每个会话只有一个。随着标签式浏览的出现,我们发现在会话状态下存储任何事务处理都是有问题的。
2)保存在数据库中 - 优点,它易于保存且易于检索。只要您拥有正确的密钥,就可以在同一会话或其他会话中检索它,甚至可以从其他计算机检索它。缺点,你持久保存信息,你需要清理它。
我选择选项2.只需将信息写入表格,然后在需要时将其读回。你当然应该加密CC号,但这是一项微不足道的任务。