Paypal notify_url和return_url.使用PHP接收没有IPN的变量

Boh*_*hdi 17 php paypal paypal-ipn

我正在尝试为paypal设置一个简单的付款选项,但我对返回和通知URL有一些麻烦/困惑.我是一个相当新的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>
Run Code Online (Sandbox Code Playgroud)

正如你可以看到表单发布到paypal,然后根据结果返回,如果失败/取消它转到paypal-notcompleted.php.

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

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

为什么paypal没有发布完整的预期(如此处所示:通知Paypal的URL)回到页面?

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

Dre*_*ell 19

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

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

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

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

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


Pat*_*ali 9

付款数据传输(PDT)

这些returncancel_return网址是一次性付款数据传输(PDT)调用,主要是因为用户完成您网站上的交易.它只传递信息以合理地帮助您的网站完成该任务.不保证买家在退货前不会退出,因此您不能依赖于能够使用这些进行任何交易后处理.

即时付款通知(IPN)

notify_url由即时付款通知(IPN)流程使用,并在事务状态的每次更改时调用.它旨在成为事务生命周期中所有操作的完整记录,您可以依赖它来驱动后端进程,如会计,订单履行或取消.IPN流程采取措施确保流程的完整性.

他们的目的是不同的,因此所涉及的信息和安全是不同的.为了利弊.

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

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

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

只需要管理订单状态,这样如果PDT已经这样做,IPN就不会触发履行,这基本上就是为了确保重复的CompletedIPN消息在第一次之后不重新触发履行而必须做的事情.

Notify_url 继续用于同一事务的后续消息

同一事务的IPN消息继续转到同一notify_url地址.我查看了我们的IPN历史记录,并将RefundIPN消息发送到原始版本notify_url.

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

除非您已禁用首选项以接收IPN消息,否则IPN消息始终会发送到您的通知URL.即使您未在配置文件中启用接收IPN消息,或者您已通过关闭IPN消息重置首选项,PayPal仍会将IPN消息发送到您为特定付款指定的通知URL.由于您在配置文件中禁用了首选项而未发送的IPN邮件将在启用接收IPN时显示在IPN历史记录中.它们出现在历史记录中后,您可以选择是否重新发送它们.

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


小智 6

你的notify-url和return url都不同.您的返回网址会在成功付款后通过一些退货信息指导您的客户.顺便说一句,通知网址是为了获取客户购买的完整交易详情,以及客户无法访问的详细信息,这是出于数据库或存储目的.