如何在确认页面上存储付款处理数据?

时间:2011-09-28 18:43:51

标签: asp.net-mvc e-commerce credit-card payment-processing

我在我的新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。

4 个答案:

答案 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号,但这是一项微不足道的任务。