18

我正在尝试为贝宝设置一个简单的付款选项,但在退货和通知 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 的通知网址)发布回页面?

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

4

3 回答 3

21

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

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

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

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

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

于 2012-11-16T16:19:03.517 回答
11

支付数据传输 (PDT)

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

即时付款通知 (IPN)

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

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

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

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

我建议使用所有return,return_cancelnotify_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. 也许真正知道的人可以提供答案。

于 2014-12-27T03:17:52.407 回答
6

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

于 2013-05-21T14:09:56.740 回答