0

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

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

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

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

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


对评论的回应:

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

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

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

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

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

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

我正在考虑尝试 Sanjeev 的解决方案,因为这与我打算做的类似,但如果它真的那么简单,我实际上想更多地了解 AJAX 的想法,主要是因为它不会改变客户完全没有体验(不像看到重定向屏幕)。

对史蒂夫的补充回应:

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

4

2 回答 2

4

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

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

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

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

数据库表示例

数据库设计

  • TransactionID 默认为“0”,并将更改为信用卡公司提供的数字
  • 默认为“N”的付费标志应更改为“Y”
  • 实际金额是我发送的要在用户信用卡上收取的金额。
  • 支付金额应与实际金额相符。这是为了帮助我找出用户或中间人是否在任何情况下篡改了详细信息。
于 2013-04-24T03:00:55.090 回答
0

握手:

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

间歇成功支付:

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

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

于 2013-04-24T05:39:08.723 回答