可以记录表单提交吗?

时间:2013-04-23 21:05:57

标签: coldfusion e-commerce

情况如下。我的公司有一家电子商务商店,但我们不会自己收集或处理信用卡信息。当用户选择“使用信用卡付款”时,他们会立即进入付款网站,然后该网站处理他们的信用卡并将状态发回给我们,以便订单可以标记为已付款。我们的站点在ColdFusion上运行,它从站点接收数据作为表单数据,处理表单变量,并为客户创建一个标记为已付款的订单。信用卡网站只发送一次信息,没有“握手”。

在过去的一个半月里,我们遇到了一个问题,偶尔我们没有从信用卡处理网站获取信息,尽管他们说他们已经发送了信息。因此,即使信用卡已被收费,订单也不会被创建,产品也会放在客户的购物车中。这个问题是间歇性的。我们无法将其与我们方面的任何服务器更改联系起来,并且信用卡网站拒绝对其进行更改。

因此,我们尝试做的事情之一是记录客户实际上何时尝试通过信用卡付款(因此我们可以更轻松地捕获错过的那些)。因此,当有人点击“使用信用卡付款”时,我想以某种方式记录事件。问题是表单操作将数据提交到信用卡站点。我能想到的唯一方法是将表单操作更改为我们网站上的页面,记录付款尝试,然后再将表单提交给信用卡公司。我知道我可以使用JavaScript自动提交表单,但这似乎是一个糟糕的解决方案(如果关闭JS会怎样?),但不知道如何做服务器端。

如果可能的话,请尽量避免涉及AJAX的解决方案,因为我对此知之甚少(我是一个非常新手的Web开发人员,只是继承了整个设置)。

非常感谢有关如何记录此事件的更好解决方案或一般性的建议。


回应评论:

致Sam Dufel: 愿意改变像Paypal这样的另一家提供商。不幸的是,我的公司实际上是大学的一部分,我们都必须使用相同的支付网关。

to flup: 使用301或302状态代码会保留表单数据吗?我试着查看它,看起来它与“get”一起使用,但我需要它以“post”发送,因为这是支付网关所期望的。

对于imthepitts: 我们将其作为表单数据接收。

要复活: 问题是订单根本没有创建(因此客户和订单信息只是位于临时购物篮/客户/订单表中)。似乎没有访问应该处理来自支付网关的表单数据的页面。我已经添加了一些日志记录到该页面,但我的公司非常吓坏他们已经禁用信用卡付款,所以我没有得到任何数据。如果我能说服他们我已经实施了一个很好的日志记录解决方案来快速识别错误的订单,他们就会重新开启。

致Laksma: 我们正在使用发回的唯一标识符。握手的意思是支付网关验证他们已经与我们的服务器建立连接的某种方式。也许我错误地使用了这个词。感谢收到页面上登录的建议 - 我已经添加了。

致Nenotlep: 我知道我没有说AJAX,但我想更多地了解你的想法。对日志页面的调用是否会干扰表单提交?我假设它将被设置,以便该函数将触发表单按钮的“onclick”事件,然后表单提交将正常进行?如果它很容易设置,那么这可能是一种很好的方法。

我正在考虑尝试Sanjeev的解决方案,因为这与我计划要做的事情类似,但我真的希望听到更多关于AJAX想法的内容,如果真的那么简单,主要是因为它不会完全改变客户体验(不像看到重定向屏幕)。

对史蒂夫的补充回应:

我很感激你的意见,通常我喜欢自学新东西,但我现在太过不知所措,甚至想到解决一项新技术。

2 个答案:

答案 0 :(得分:4)

我在支付网关上工作并遇到与您相同的问题。这是我的解决方案 -

  1. 将值发布到名为“requestHandler.cfm”的中间页面。

  2. requestHandler.cfm将值保存到数据库表中。

  3. 继续创建< form>将所有必需值作为< input hidden>。放置一个提交按钮和JavaScript,然后在2秒内触发“提交”。另请注意,“如果页面在一段时间内没有刷新,请单击”提交按钮“。由于您不打算对表单进行任何验证,因此“提交”按钮只会提交包含或不启用JavaScript的表单。
  4. Creditcard公司将处理这些信息,并将值与“responseHandler.cfm”页面一起回复。
  5. 我将根据发送给他们的'primarykeyvalue'更新我的数据。 (或者只是可以识别用户的任何参考)
  6. 数据库表示例

    DatabaseDesign

    • 默认情况下,TransactionID将为“0”,并将更改为信用卡公司提供的号码
    • 默认为“N”的付费标志将更改为“Y”
    • 实际金额是我通过用户信用卡收取的费用。
    • 付费金额应与实际金额相匹配。这是为了帮助我找出用户或中间人在任何情况下是否篡改了细节。

答案 1 :(得分:0)

握手:

当用户进入付款网站时,您应该在distingush订单中包含唯一标识符,例如OrderID。您的付款服务提供商必须有一些自定义字段供您自己使用。然后,当用户被带回您的站点时,支付站点响应数据应包含OrderID。这样你就可以匹配它们。换句话说,发生了“握手”。

间歇性成功付款:

在侦听器上,支付提供程序返回表单数据的页面,您应该实现一个日志来记录调用页面的位置以及发送的数据。

“...是将表单操作更改为我们网站上的页面,记录付款尝试,然后再将表单提交给信用卡公司。”这是一个可行的解决方案。