【问题标题】:Paypal notify_url and return_url. Receiving variables without IPN using PHP贝宝 notify_url 和 return_url。使用 PHP 接收没有 IPN 的变量
【发布时间】:2012-11-05 03:23:44
【问题描述】:

我正在尝试为 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-notcompleted.php。

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

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

为什么 paypal 没有将预期的全部内容(如下所示:Notify url of Paypal)发布回页面?

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

【问题讨论】:

    标签: php paypal paypal-ipn


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我有一个简短的问题。我的代码成功地通过贝宝正常付款,我正在使用 notify_url 来获取 IPN。但是,我的客户创建了贝宝付款按钮,并且我在 html 中使用该按钮,例如 &lt;input type="hidden" name="hosted_button_id" value="XZXZXZXZXZX"&gt;。所以这里的问题是,我的客户也创建了订阅按钮,所以客户每周都会从他们的贝宝账户中扣除,在这种情况下,notify_url 会调用每周完成的每个付款活动吗?如果是这样,我们如何从 POST 参数中识别自动付款?
    • 很遗憾,未来的订阅付款将不会使用原始设置中传递的 notify_url 值。相反,它将取决于接收付款的 PayPal 帐户配置文件中配置的任何内容,因此您可以让您的客户将他们的帐户配置为指向您的 URL,如果您需要他们让一切按您的意愿工作。
    • 谢谢安德鲁!我会要求我的客户在配置文件中设置 notify_url。 :)
    • @AndrewAngell。如果确保只发生一次,那么对return_urlnotify_url 使用相同的 URL 是可以的,这对于 IPN 来说无论如何都是必须做的,因为消息可以被多次接收,特别是如果它们被搁置了某些原因。也就是说,需要保留本地事务状态,并与该状态进行比较 IPN 消息以确定需要执行的操作。
    • 嗨 Drew,这期间情况会发生变化吗?你的答案是 8 岁,根据IPN vs PDT PayPal 建议使用PDT,如果你可以确保网站正在运行 这应该不是问题。您提到了关于 ... 的问题,即使在您的 PayPal 帐户中启用了自动退货。 - 在付款 URL 中使用 notify_url 的情况如何?被贝宝调用可靠吗?
    【解决方案2】:

    支付数据传输 (PDT)

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

    即时付款通知 (IPN)

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

    它们的目的不同,因此所涉及的信息和安全性也不同。对于pros and cons

    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 消息的首选项,否则 IPN 消息将始终发送到您的通知 URL。即使您没有在您的个人资料中启用接收 IPN 消息,或者您通过关闭 IPN 消息重置了您的偏好,PayPal 仍会向您为特定付款指定的通知 URL 发送 IPN 消息。 IPN 消息不会当您启用接收 IPN 时,因为您禁用了个人资料中的首选项而发送的信息将出现在 IPN 历史记录中。当它们出现在历史记录中后,您可以选择是否重新发送它们。

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

    【讨论】:

    • 有关这方面的贝宝文档不完整,但据我所知,您对 notify_url 的看法是错误的。初始响应(例如待处理的电子支票或定期付款设置)发送到 notify_url 后变量(如果存在)中的 URL,所有期货响应(例如一周后清除的电子支票或定期付款)都发送到在paypal帐户中配置的单个ipn url。
    • @kritzikratzi。你需要为你的断言“你错了”提供一些证据,否则你只是在拖钓。
    【解决方案3】:

    你的 notify-url 和 return url 都不同。成功付款后,您的退货网址会引导您的客户并提供一些退货信息。顺便说一下,通知 url 是为了获取您的客户购买的完整交易详情,您的客户无法访问这些交易详情,这是为了您的数据库或存储目的。

    【讨论】:

    • notify_url 与配置文件中的 IPN 值相同...但 notify_url 可以使其更具动态性,以便贝宝与 notify_url 通信,而不是配置文件中的 IPN url。希望这是有道理的..
    猜你喜欢
    • 1970-01-01
    • 2012-01-07
    • 2015-06-16
    • 2014-01-16
    • 2012-07-22
    • 2016-05-27
    • 2014-06-30
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多