【发布时间】:2018-11-19 17:30:50
【问题描述】:
正如我们许多人所做的那样,我正在实施 PayPal 解决方案。通读开发者文档,我了解到 IPN 是异步消息协议,它触发支付履行。
PayPal 有一个官方方式来响应这些消息,以及如何在您的 IPN 侦听器上验证 IPN 消息的来源。侦听器从 PayPal 收到的每条 IPN 消息都包含一个 User-Agent HTTPS 请求标头,其值为 PayPal IPN (https://www.paypal.com/ipn) 他们强调不要使用此标头进行验证IPN 确实来自 PayPal,并且没有被篡改。相反,要验证这些事情,您必须使用下面概述的 IPN 身份验证协议,该协议包含四个步骤。
- PayPal HTTPS 向您的侦听器发布一条 IPN 消息,通知它发生了事件。
- 您的侦听器向 PayPal 返回一个空的 HTTP 200 响应。
- 您的侦听器 HTTPS 将完整的、未更改的消息发送回 PayPal;消息必须包含与原始消息相同的字段(以相同的顺序),并以与原始消息相同的方式进行编码。
- PayPal 会返回一个单词 - 已验证(如果消息与原始消息匹配)或无效(如果消息与原始消息不匹配)。
下图中的步骤 2、3、4 和 5 显示了此协议。
正如您在上面看到的,他们推荐了一些东西,用一条 [VERIFIED] 或 [INVALID] 消息进行响应,以防止欺诈。
我的想法是,任何假的 IPN 模拟器都可以将“已验证”状态消息回传给侦听器,因此没有任何意义。因此,我的问题是:
- 这种解决方案真的安全吗?
- 如果不是,什么方法可以真正防止欺诈并确保付款?
我想知道,如果我们可以交换一个密钥,它会更可靠。
欢迎提出任何想法。谢谢。
【问题讨论】:
标签: paypal paypal-sandbox paypal-ipn