将数据发送到支付网关并返回可能的问题

时间:2010-07-14 23:17:57

标签: php payment-gateway shopping-cart

我将使用其中一个支付网关,因此我网站上的用户将被重定向到网关托管页面,以提供所有CC详细信息。网关将结果返回到我指定的页面(让我们称之为paymentProcessed.php)。但现在我担心的是:

  1. 有人可能会假装它。我的意思是有人可能被重定向到支付网关,然后将结果返回到我的网站paymentProcessed.php页面,并确认所有已付款。此确认将由用户自己通过正常POST发送,然后我的网站将向用户提供产品,尽管实际上没有付款。避免这种情况的常见做法是什么?

  2. 有人被重定向到网关托管页面,付费,重定向回我的网站,他登录的会话已过期。通常我会依赖会话来查看是否应允许用户访问网站的某些部分,但现在我是否需要实施其他类型的检查确认页面?现在我想在数据库中存储订单ID和随机生成的值,当用户重定向时将其传递给网关(连同总数,总数将传递给网关,然后返回,以便我可以确认已支付了适当的金额)。然后,当确认与订单ID一起出现时,我的随机生成的值(和总数)而不是像我通常对正常购物车页面那样依赖会话,我应该检查此值与匹配的订单ID并根据需要更改订单状态。处理这类问题的常见做法是什么?

  3. 我应该考虑哪些其他可能的问题?

  4. 我试图尽可能清楚地解释,我希望以上所有都有道理。如果我需要澄清一些事情,请告诉我。顺便说一下我在php / mysql中编码

2 个答案:

答案 0 :(得分:1)

我已经实现了一些支付网关,其中一个共同点是卡处理器将始终为您返回交易状态,其中一些使用弱重定向中继用户完成,其他允许您使用他们的web服务来验证交易。无论哪种方式,您都需要让处理器文档知道如何验证您的交易。

现在关于避免会话过期的其他可能性您可能希望将所有事务数据存储在表中,您也可以使用会话来加速该过程,但是您不需要进一步查看会话的问题仅转发会话:

  • 如果用户在流程中间断开连接怎么办?
  • 某些CC处理器强制您打开要处理的弹出窗口,如果用户关闭它会怎样?
  • 如果服务器崩溃怎么办?
  • 如果付款方式失败并且用户想要使用其他类型的付款重试,该怎么办?

现在关于支付网关实施的一些随机想法:

  • 某些处理器延迟验证购买,他们将返回您的网站已接受付款,但您必须使用他们的网络服务来检查最终状态;
  • 某些处理器要求您捕获购买,这意味着即使它被批准您可以在以后取消或最终确定,这样可以避免购物者从您的网站上购买东西,您可以检查用户的信息以确保它是全部善于捕获或取消购买,避免退款。
  • 如果您的信用卡处理器允许您访问网络服务,或者他们执行服务器到服务器购买身份验证,则需要有效的证书,因此请注意。

这就是我现在所能想到的。

答案 1 :(得分:1)

它实际上比你意识到的更容易,也更安全。使用托管付款页面时,例如Authorize.Net's SIM API,会包含某种类型的哈希值,只有您和处理者才知道。因为生成它只需要您和处理器所需的私人信息是不可能的。因此,您需要做的就是验证支付处理器发送到您的返回页面的哈希是否与您用于交易的哈希匹配。如果是这样,您可以100%确定交易没有被欺骗。

会话往往持续时间更长,然后通常需要完成远程结账表格的访问,即使用户离开您的网站,会话也会持续。但是,如果您担心会话在返回到您的站点之前到期,只需将会话信息存储在数据库中并使用cookie来跟踪用户。然后,当他们回来时,使用cookie来识别它们并从数据库中检索它们的会话信息。

<强>更新

以下是使用PHP将会话cookie延长的时间:

// Makes the cookie last two hours. Make it a higher number to last longer.
session_set_cookie_params(7200); 
session_start();