贝宝 notify_url 和 return_url。使用PHP接收没有IPN的变量

新手上路,请多包涵

我正在尝试为 paypal 设置一个简单的付款选项,但在返回和通知 URLS 时遇到了一些麻烦/混淆。我是 php 的新手,以前在 asp 中完成过这个,但我现在迷路了。

所以我的基本贝宝表格:

 <form action="https://www.paypal.com/cgi-bin/webscr" method="post" id="PayPalForm" name="PayPalForm"  target="_top">
 <input type="hidden" name="cmd" value="_xclick">
 <input type="hidden" name="business" value="email@hotmail.com">
 <input type="hidden" name="amount" value="0.01">
 <input type="hidden" name="item_name" value="Composite Door">
 <input type="hidden" name="item_number" value="<?php echo $orderID ?>">
 <input type="hidden" name="currency_code" value="GBP">
 <input type="hidden" name="cancel_return" value="http://www.mydomain.co.uk/paypal-notcompleted.php">
<input type="hidden" name="return" value="http://www.mydomain.co.uk/paypal-completed.php">
<input type="hidden" name="notify_url" value="http://www.mydomain.co.uk/paypal-completed.php">
</form>

  <script>
    document.PayPalForm.submit();
   </script>

如您所见,表单发布到 paypal,然后根据结果返回,如果失败/取消,它将转到 paypal-notcompleted.php。

如果成功,它将转到 paypal-completed.php。这是我无法理解的地方,我还没有设置 IPN,我只想获取一些变量 paypal 发回给我,运行一个简单的插入查询并在确认消息中显示一些细节给客户。

我可以将 notify_url 和 return_url 作为同一个页面吗?

为什么 paypal 没有将完整的预期(如此处所示: Notify url of Paypal )发回页面?

我知道这与 XML 等有关,但我只是想我可以 $_GET 贝宝发回的变量。有没有人这样做过,他们能告诉我哪里出错了吗?

原文由 Bohdi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 630
2 个回答

要将详细信息返回到您的返回 URL,您需要使用 PDT 。它与 IPN 非常相似,只是它旨在与您的返回 URL 一起使用,而 IPN 旨在与您服务器上的第 3 方 IPN 侦听器脚本一起使用。

PDT 可以在返回 URL 页面上简单地向用户显示交易,但不建议使用 PDT 进行任何后付款处理(即数据库更新、发送电子邮件收据等),因为不能保证即使在您的 PayPal 帐户中启用了自动返回,用户也会返回此页面。

无论用户是否在完成付款后返回您的网站,每次交易发生时都会触发 IPN

通知 URL 仅用于 IPN,它会覆盖您在 PayPal 配置文件中针对 IPN 的任何设置。需要在您的 PayPal 帐户配置文件中配置 PDT,以便将数据返回到您的返回 URL。

您将要使用不同的 URL 进行返回和通知,否则相同的代码将运行两次:一次是在用户返回您的站点时,另一次是从 PayPal IPN POST。

原文由 Drew Angell 发布,翻译遵循 CC BY-SA 3.0 许可协议

支付数据传输 (PDT)

returncancel_return 网址是一次性支付数据传输 ( PDT ) 调用,主要是为了让 _用户在您的网站上完成交易_。它只是传递信息以合理地帮助您的站点完成该任务。无法保证买家在退货前不会退出,因此您不能指望仅使用这些就可以进行 任何 交易后处理。

即时付款通知 (IPN)

notify_url 由即时支付通知 ( IPN ) 流程使用,并在 每次 交易状态更改时调用。它旨在完整记录交易生命周期中采取的 所有 操作,您可以依靠它来驱动后端流程,例如会计、订单履行或取消。 IPN流程采取措施保证流程的完整性。

它们的目的不同,因此涉及的信息和安全也不同。对于 利弊

IPN 消息可能会严重延迟,因此请使用所有三个变量

请注意,虽然大多数 IPN 消息是在 PayPal 交易完成后的几秒钟内发送的,但我遇到过长达数小时的延迟,因此它们是可靠的,但不一定及时。

我建议使用所有 returnreturn_cancelnotify_url ,因为前两个将立即返回并提供反馈给用户更新后端数据/启动履行流程,但如果用户在返回之前退出 PayPal,则将后者用作备份。指示您的买家返回您的网站,以确保及时处理他们的订单。

只需管理订单状态,以便在 PDT 已经完成时 IPN 不会触发履行,这基本上是您必须做的,以确保重复 Completed IPN 消息不会在之后重新触发履行首先。

Notify_url 继续用于同一交易的后续消息

同一事务的 IPN 消息继续发送到相同的 notify_url 地址。我查看了我们的 IPN 历史记录,一条 Refund IPN 消息转到了原始 notify_url

即使您根据 https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNSetup/ 更改了 IPN 首选项,这种情况仍然存在:

IPN 消息始终发送到您的通知 URL,除非您禁用了接收 IPN 消息的首选项。即使您没有在您的个人资料中启用接收 IPN 消息,或者您通过关闭 IPN 消息重置了您的首选项, PayPal 仍会向您为特定付款指定的通知 URL 发送 IPN 消息。 当您启用接收 IPN 时,由于您在个人资料中禁用首选项而未发送的 IPN 消息将出现在 IPN 历史记录中。它们出现在历史记录中后,您可以选择是否重新发送它们。

我不确定相关交易,如争议或后续订阅付款,是否仍将使用原始 notify_url 。也许真正知道的人可以提供答案。

原文由 Patanjali 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏