接受付款最佳实践

Posted

技术标签:

【中文标题】接受付款最佳实践【英文标题】:Accepting payment best practices 【发布时间】:2011-03-13 15:54:14 【问题描述】:

我正在创建一个使用支付网关 DPS 的电子商务网站。支付网关只获取用户的详细信息并返回支付是否成功。

我只是想知道是否有人有任何好的资源来制作一个可以安全处理大量交易的真正强大的支付页面。大容量支付页面是否有经过充分测试的技术和策略?

【问题讨论】:

“大量交易”是什么意思?你能给我们一个粗略的估计吗? 帮您的用户一个忙,并与 Paypal、Google Checkout 等集成...... 目前每天只有大约 200 个,但预计很快就会增加到 1000 个左右。所以仍然很小,但足够大,我们需要采取一些预防措施并编写健壮的代码来处理服务器超时和并发问题等意外问题。 我们必须使用 DPS 作为它在新西兰唯一值得信赖的信用卡网关。我们过去使用过贝宝,不会再使用它。对于我们的用例,我们更喜欢 DPS。 【参考方案1】:

我不是支付处理和开发电子商务应用程序方面的专家,但我的一些(常识)指南是:

    强制使用 HTTPS 来提交用户的 CC 信息(几乎所有支付处理网关在与其网关通信时都强制使用 SSL); 处理后不要将信用卡信息存储在数据库中;* 遵循一般安全准则(例如,不要保存纯文本密码或电子邮件密码);

*注意:

PCI 确实允许在处理后存储信用卡详细信息,但您需要符合 PCI 标准的托管,这通常非常昂贵。即便如此,你也面临着巨大的风险。因此,如果您决定为您的客户提供该选项(我知道这非常诱人,因为像亚马逊这样的大网站都提供“一键式”结帐),您最好确保您的应用程序和服务器已锁定紧。

我对支付处理的可扩展性问题了解不多,因为我没有这方面的经验。我所有的应用程序每天只处理大约 5-25 个订单。

【讨论】:

您好,感谢您的快速回复。我们使用一个名为 DPS 的支付网关,它负责处理许多必需品,其余的基本工作我们自己处理。我们目前每天进行大约 200 笔交易,并且增长非常迅速。我更关心的是并发问题、postgres 事务和服务器超时。如果有人知道一个真正强大的开源支付页面或任何资源如何安全地处理大量交易,将不胜感激! 啊,听起来您更关心的是应用程序自己的支付处理(生成/存储发票),而不是与支付网关的交互;对吗?【参考方案2】:

使用 SagePay(以前称为 Protx),它支持 PayPal 并允许您使用卡付款。它还集成到 Sage Suite(会计师的梦想)中,可以自动执行大量耗时的数据输入。

www.sagepay.com

正如其他人所说 - 有时对于较小的网站,不值得冒险自己存储卡片。我更喜欢在我被重定向到知名支付服务(例如 paypal、sagepay 或 google checkout)的网站上付款,因为我知道在保护这个软件上花费了很多钱。如果你是我第一次使用的网站,那我会被推迟。

【讨论】:

【参考方案3】:

您需要设计代码以使您的数据保持有效状态。

您面临的最大责任是您发送数据以进行身份​​验证/捕获,然后,无论出于何种原因,您最终的某些事情都会失败。您已向客户收费,但无论出于何种原因,您都不知道这一事实!最终,一些愤怒的顾客会开始通过电话对你大喊大叫。那是一段糟糕的时光。

总体思路是设置一些保护措施,以便您识别此类问题。这个问题应该是非常罕见的,即使它曾经发生过,所以修复混乱可能是一个手动过程。

我会这样做:

    设计一个跟踪付款的数据库表(我们称之为“付款”),并将其与您的“订单”表相关联(因此 payment.order_id 引用 order.id)。 当需要与您的网关交互时,请设置一条新的支付记录,其中包含您将要传递到支付网关的所有非敏感数据。在您的付款表中有一个“状态”列,并将其设置为“待处理” 尝试使用您的网关进行身份验证/捕获事务。收到回复后,将付款记录状态更新为“已批准”、“已拒绝”或“错误”,并保存任何相关元数据(拒绝原因、交易 ID 等)。如果网关超时,这可能只是一种“错误”,尽管您可能会重试一两次。

时不时地运行一个 cron 作业,查找“待定”且超过 30 秒的付款记录。如果您发现任何问题,请惊慌并告诉开发人员/运营人员。

当然还有其他可能出错的事情,但这是我想到的最大的问题,我所描述的策略是我在多个场合使用过的降低风险的策略。

【讨论】:

这听起来是一个很好的方法,可以让您的支付记录与您的支付网关实际处理的内容保持同步。在不久的将来我会需要这样的东西,并且可能会再次研究这种模式。

以上是关于接受付款最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

Django Rest Framework 和 Stripe,最佳实践?

最佳实践:在 MVC 控制器中使用多个存储库是不是可以接受?

在普罗米修斯的标签中使用标识。标签的最佳实践

iOS中应用内购买的服务器端验证最佳实践

最小化 PCI DSS 暴露的最佳实践

记录与 print() + 记录最佳实践的优势