【问题标题】:Possible to log form submission?可以记录表单提交吗?
【发布时间】:2013-04-17 05:56:45
【问题描述】:

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

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

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

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

将不胜感激有关如何记录此事件的更好解决方案,或针对此混乱的一般建议!


对 cme​​ts 的回应:

致 Sam Dufel: 很想换到另一个提供商,比如 Paypal。不幸的是,我的公司实际上是一所大学的一部分,我们都必须使用相同的支付网关。

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

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

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

致拉克斯玛: 我们使用的是发回的唯一标识符。我所说的握手是支付网关验证他们已经与我们的服务器建立连接的某种方式。也许我用错了这个词。感谢您在接收页面上对日志的建议-我已添加。

致尼诺特莱普: 我知道我说没有 AJAX,但我想更多地了解您的想法。对日志页面的调用会完全干扰表单提交吗?我假设它会被设置为触发表单按钮的“onclick”事件,然后表单提交会正常进行?如果它很容易设置,那么也许这将是一个很好的方法。

我正在考虑尝试 Sanjeev 的解决方案,因为无论如何这与我计划做的类似,但我实际上想了解更多关于 AJAX 想法的信息,如果它真的那么简单,主要是因为它不会完全改变客户体验(与看到重定向屏幕不同)。

对史蒂夫的补充回应:

感谢您的意见,通常我喜欢自学新事物,但我现在实在是太不知所措了,甚至无法考虑处理新技术。

【问题讨论】:

  • 我打算推荐一个简单的 AJAX 记录器,但是很好。构建它确实是一件非常简单的事情;最简单的 GET 请求对一个 URL 有一个参数,如“site.fi/log?msg=UserFoobarSentPostThing”,服务器端直接将消息强制输入您的日志记录系统。好的,也许一些原始数据过滤在恶意请求的情况下可能很有用,但实际上,即使它是 AJAX 构建类似的东西也非常非常简单:)
  • 您的信用卡处理站点应该已经有交易日志。如果没有......我强烈建议你找一个更好的供应商。
  • 您也许可以让“用信用卡付款”按钮指向您自己网站上的 URL,当它被点击时记录,然后发送 HTTP 301 or 302 以将浏览器重定向到实际信用卡网站。见stackoverflow.com/questions/2503300/…
  • 你也许可以用 cfhttp 做点什么,但即使你成功了,你仍然处于“是的,我做了,不,你没有”的情况。
  • 存储订单,但将其标记为“未付款”、“待抄送付款”,而不是“已付款”。间歇性问题听起来很可疑 - 我会继续关注付款供应商并在管理员中检查他们的付款日志。

标签: coldfusion e-commerce


【解决方案1】:

我在支付网关上工作,遇到了和你一样的问题。这是我的解决方案 -

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

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

  3. 继续创建一个
    ,将所有需要的值作为。放置一个提交按钮和 JavaScript 以在 2 秒内触发“提交”。另请注意,“如果页面在一段时间内没有刷新,请单击提交按钮”。由于您不会对表单进行任何验证,因此“提交”按钮只会在 JavaScript 处于活动状态或不处于活动状态的情况下提交表单。
  4. 信用卡公司将处理信息并将值回复到“responseHandler.cfm”页面。
  5. 我将根据发送给他们的“primarykeyvalue”更新我的数据。 (或者任何可以识别用户的参考资料)

数据库表示例

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

【讨论】:

  • 2 秒似乎比必要的要长。
  • 使用状态码 302 重定向请求是执行此操作的 HTTP 方式。你不需要 javascript。
  • 谢谢!这与我的想法相似,但我喜欢添加注释以告诉用户如果没有立即重定向,请按“提交”。
【解决方案2】:

握手:

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

间歇支付成功:

在监听器上,支付提供商返回表单数据的页面,你应该实现一个日志来记录从哪里调用页面以及发送了什么数据。

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

【讨论】:

    猜你喜欢
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多