我最近对我正在为客户完成的一个 ASP.NET MVC 项目有这个确切的担忧。
我学到了两件事:
您处理这种情况的方式类似于企业处理个人支票的方式:
- 个人支票看起来像货币(通常是),但许多企业希望银行在接受付款之前对资金可用进行某种形式的验证——因此他们使用一台机器询问银行是否有实际可用的资金。
- 如果机器说资金可用,则企业信任它并且您完成交易。 但是,机器可能会发出错误消息,通常意味着“资金不可用或出现问题”,并且企业需要做出以下决定:
- 我们可以信任客户并接受支票,交付产品,并希望在以后将支票存入银行时做到最好。
- 或者我们可以告诉客户,支票清算、存入支票、等待资金实际到达我们的账户以及(如果成功)在企业收到资金后交付产品需要时间。
对于当今许多企业的运营方式而言,这听起来效率低下,但确实会出现这种情况。事实上,这就是为什么许多企业不接受个人支票的原因,与其他付款方式相比,它们不可靠。
现在这与处理 Paypal 付款有什么关系?
- Paypal 付款看起来像货币(通常是),但许多企业希望在接受付款之前从 Paypal 进行某种验证以确保资金可用 - 因此他们使用 Paypal PDT、IPN 或其他方法来检查交易得到了妥善处理。
- 如果 Paypal 正确响应了其中一个验证请求,则企业可以信任它并完成交易。 但是,您的网站可能会抛出某种错误(即 Paypal 可能会回复 IPN 响应
NOTVALID
,或者您永远无法从 Paypal 获得回复)。企业需要做出以下决定:
- 企业可以信任客户并接受他们已经支付了 Paypal 付款,一切都应该没问题(在 Paypal 交易的情况下,这是一个非常糟糕的决定)
- 或者企业可以在结账时告诉客户,Paypal 付款可能有 72 小时的处理期。
这听起来可能不是经营您的业务的最佳方式,但它是我们必须处理不完善的互联网的方式。
我会设置类似这样的 Paypal 支付流程:
- 用户 A 想使用 Paypal 向另一个用户 B 发送 100 美元
- UserA 在“结帐字段”中输入值,然后发送到 Paypal 以验证交易。
- UserA 从 Paypal 发送回您的网站,您的网站使用 Paypal 已发布到您网站的详细信息执行 IPN 检查(在这种情况下,我选择了 IPN - 就好像我们使用的是Express Checkout而不是 Paypal 的其他支付网关优惠)。
- 如果 IPN 是
VALID
,则按预期处理事务。
- 如果 IPN 不是
VALID
,请向客户说明处理可能会延迟,让您的应用程序向您发送通知,告知您可能发生了 Paypal 交易问题(您可能需要包含参考 ID,以便您可以快速找到哪个此通知引用的交易),并将交易标记pending
为相对complete
或类似的东西。
- 处理这些通知的网站管理员将手动调查交易(或强制网站再次与 Paypal 核对 - 有关详细信息,请参阅 Paypal API 文档)并手动将交易标记为
complete
或failed
。
- 通知相关人员交易状态。
令人讨厌的是,我们必须采取额外的步骤来确保资金转移,但是,如前所述,我们使用的系统不完善,我们希望非常确定金融交易的成功/失败。
此过程的另一个好处是,当有人篡改 Paypal 支付系统时可能会收到通知 - 让您在未来更好地应对作恶者。