Php 向支付网关发送数据并返回-可能存在的问题

Php 向支付网关发送数据并返回-可能存在的问题,php,payment-gateway,shopping-cart,Php,Payment Gateway,Shopping Cart,我将使用其中一个支付网关,因此我网站的用户将被重定向到网关托管页面,以提供所有CC详细信息。网关会将结果返回到我指定的页面(我们称之为paymentProcessed.php)。但现在我担心的是: 有人可能会伪造它。我的意思是,有人可能会被重定向到支付网关,然后将结果返回到我的网站paymentProcessed.php页面,并确认所有已支付,而不是支付。此确认将由用户自己通过普通邮件发送,然后我的网站将向用户交付产品,尽管实际上没有付款。避免这种情况的常见做法是什么 有人被重定向到网关托管页面

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

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

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

  • 我还应该考虑哪些其他可能的问题


  • 我试图尽可能清楚地解释,我希望所有这些都有意义。如果我需要澄清一些事情,请告诉我。顺便说一句,我在php/mysql中编写了代码,我已经实现了一些支付网关,它们的一个共同点是,卡处理器总是会为您返回交易状态,其中一些使用弱重定向中继用户来完成,另一些允许您使用他们的Web服务来验证交易。无论哪种方式,您都需要获得处理者文档,以了解如何对您这边的事务进行身份验证

    现在,关于避免会话过期的其他可能性,您可能希望将所有事务数据存储在一个表中,您也可以使用会话来加快进程,但您无需进一步了解仅在会话上中继的问题:

      如果用户在进程中间断开了什么?
    • 一些CC处理器强迫您打开一个弹出窗口进行处理,如果用户关闭它怎么办
    • 如果服务器崩溃怎么办
    • 如果付款方式失败,用户希望使用其他类型的付款重试,该怎么办
    现在,关于支付网关实施的一些随机想法:

    • 一些处理者延迟验证购买,他们将返回您的网站,说明付款已被接受,但您必须使用他们的Web服务检查最终状态
    • 一些处理者要求您捕获购买,这意味着即使获得批准,您也可以稍后作废或最终确定,这有助于避免持卡人在您的网站外购买物品,您可以检查用户信息,确保他们捕获或作废购买,避免退单
    • 如果您的信用卡处理程序允许您访问Web服务,或者他们进行服务器到服务器的购买身份验证,这将需要有效的ssl证书,因此请注意

    这就是我现在能回忆起的一切。

    事实上,这比你意识到的更容易、更安全。当使用托管支付页面时,例如,会包含某种只有您和处理者知道的散列。不可能伪造,因为生成它需要只有您和处理者拥有的私人信息。因此,您所需要做的就是验证支付处理器发送到返回页的哈希值是否与您为该交易所拥有的哈希值匹配。如果有,您可以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();
    

    或者,您可以将PHP配置为具有更长的会话cookie(可以在运行时使用session_set_cookie_params()完成)。修改答案以显示示例。从托管支付页面返回的哈希将非常好,但我选择的支付网关似乎并没有返回类似的内容。我完全完蛋了吗?如果不亲自托管表单页面,同时又遇到PCI合规性方面的问题,就无法实现它?他们必须向您返回大量信息。如果可以验证多个数据点是否正确匹配,则可以假定响应来自这些数据点。如果他们有自定义字段,请将您自己的哈希传递给他们,并寻找返回给您的哈希。您还可以验证发送响应的IP地址是否属于他们的IP地址。不幸的是,验证IP地址不起作用,因为支付服务器的IP地址可能会在不同的时间发生变化。有一个选项可以将附加参数传递给网关,并在用户付款后返回这些参数。但问题是,这些参数可以很容易地查找,因为它们在隐藏的输入字段中很容易找到。我担心有人会查找所有参数并向我发送“假”付款确认,而无需支付任何费用