【问题标题】:sending data to payment gateway and back - possible problems将数据发送到支付网关并返回 - 可能的问题
【发布时间】:2011-03-16 03:26:42
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php payment-gateway shopping-cart


    【解决方案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();
    

    【讨论】:

    • 或者您可以配置 PHP 以拥有更长的会话 cookie(可以在运行时使用 session_set_cookie_params() 来完成)。
    • @Lèse majesté 非常好。修改答案以显示示例。
    • 从托管支付页面返回的哈希会很棒,但我选择的支付网关似乎没有返回类似的东西。我是不是完全搞砸了,如果不自己托管表单页面就无法实现它,同时又遇到 PCI 合规问题?
    • 他们必须返回一堆信息给你。如果您可以验证多个数据点是否正确匹配,则可以假设响应来自它们。如果他们有自定义字段,则传递您自己的哈希并寻找将其返回给您。您还可以验证发送响应的 IP 地址是他们的 IP 地址之一。
    • 不幸的是,验证 IP 地址将不起作用,因为支付服务器的 IP 显然可能在不同时间发生变化。可以选择将其他参数传递给网关,并在用户付款后返回这些参数。但是问题是这些参数可以很容易地查找,因为它们可以在隐藏的输入字段中使用。我担心有人可以查看所有参数并向我发送“假”付款确认,而无需支付一分钱。似乎没有任何方法可以传递可以识别网关并且在某些时候对用户不可用的数据。
    【解决方案2】:

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

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

    • 如果用户在处理过程中断开连接怎么办?
    • 某些 CC 处理器强制您打开一个弹出窗口进行处理,如果用户关闭它会怎样?
    • 如果服务器崩溃了怎么办?
    • 如果付款方式失败,用户想用另一种付款方式重试怎么办?

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

    • 一些处理商延迟验证购买,他们会返回您的网站,表明付款已被接受,但您必须使用他们的网络服务来检查最终状态;
    • 某些处理商要求您捕获购买,这意味着即使它被批准您也可以在以后取消或完成它,这很好地避免了从您的站点购买东西,您可以检查用户的信息以确保它是全部让他们抓住或取消购买,避免退款。
    • 如果您的信用卡处理器允许您访问 Web 服务,或者他们进行服务器到服务器购买身份验证,这将需要有效的 ssl 证书,因此请注意。

    我现在能记得的就这些了。

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 1970-01-01
      • 2011-03-13
      • 2011-02-25
      • 2012-11-11
      • 1970-01-01
      • 2020-02-04
      • 2015-03-10
      • 1970-01-01
      相关资源
      最近更新 更多