我将使用其中一个支付网关,因此我网站上的用户将被重定向到网关托管页面,以提供所有CC详细信息。网关将结果返回到我指定的页面(让我们称之为paymentProcessed.php)。但现在我担心的是:
有人可能会假装它。我的意思是有人可能被重定向到支付网关,然后将结果返回到我的网站paymentProcessed.php页面,并确认所有已付款。此确认将由用户自己通过正常POST发送,然后我的网站将向用户提供产品,尽管实际上没有付款。避免这种情况的常见做法是什么?
有人被重定向到网关托管页面,付费,重定向回我的网站,他登录的会话已过期。通常我会依赖会话来查看是否应允许用户访问网站的某些部分,但现在我是否需要实施其他类型的检查确认页面?现在我想在数据库中存储订单ID和随机生成的值,当用户重定向时将其传递给网关(连同总数,总数将传递给网关,然后返回,以便我可以确认已支付了适当的金额)。然后,当确认与订单ID一起出现时,我的随机生成的值(和总数)而不是像我通常对正常购物车页面那样依赖会话,我应该检查此值与匹配的订单ID并根据需要更改订单状态。处理这类问题的常见做法是什么?
我应该考虑哪些其他可能的问题?
我试图尽可能清楚地解释,我希望以上所有都有道理。如果我需要澄清一些事情,请告诉我。顺便说一下我在php / mysql中编码
答案 0 :(得分:1)
我已经实现了一些支付网关,其中一个共同点是卡处理器将始终为您返回交易状态,其中一些使用弱重定向中继用户完成,其他允许您使用他们的web服务来验证交易。无论哪种方式,您都需要让处理器文档知道如何验证您的交易。
现在关于避免会话过期的其他可能性您可能希望将所有事务数据存储在表中,您也可以使用会话来加速该过程,但是您不需要进一步查看会话的问题仅转发会话:
现在关于支付网关实施的一些随机想法:
这就是我现在所能想到的。
答案 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();