我正在尝试为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>
正如你可以看到表单发布到paypal,然后根据结果返回,如果失败/取消它将转到paypal-notcompleted.php。
如果成功则转到paypal-completed.php。这是我无法理解的地方,我还没有设置IPN,我想要做的就是把一些变量paypal帖子拿回给我,运行一个简单的插入查询并在确认消息中显示一些细节给客户。
我是否允许将notify_url和return_url作为同一页面?
为什么paypal没有将完整的预期(如此处所见:Notify url of Paypal)发回页面?
我知道有一些与XML有关的事情,但我只是认为我能够$ _GET paypal发回的变量。有没有人这样做过,他们可以告诉我哪里出错了吗?
答案 0 :(得分:18)
要将详细信息返回到您的返回网址,您需要使用PDT。它与IPN非常相似,但它仅用于返回网址,而IPN则用于服务器上的第三方IPN侦听器脚本。
PDT可以简单地在返回URL页面上向用户显示交易,但不建议使用PDT进行任何后付款处理(即数据库更新,发送电子邮件)收据等)因为无法保证用户将其返回此页面,即使您的PayPal帐户启用了自动退货功能。
每次交易发生时都会触发IPN,无论用户是否在完成付款后将其返回到您的网站。
通知URL仅用于IPN,它将覆盖您在IPP的PayPal配置文件中的任何设置。需要在您的PayPal帐户配置文件中配置PDT,以便将数据返回到您的返回URL。
您将要使用不同的URL进行返回和通知,否则相同的代码将运行两次:一次是用户返回您的站点,另一次是来自PayPal IPN POST。
答案 1 :(得分:9)
付款数据传输(PDT)
return
和cancel_return
个网址是一次性付款数据传输(PDT),主要是因为用户完成了您网站上的交易。它只传递信息以合理地帮助您的网站完成该任务。无法保证买家在退货前不会退出,因此您不能依赖于能够使用这些进行任何交易后处理。
即时付款通知(IPN)
即时付款通知(IPN)流程使用 notify_url
,并在事务状态中使用每次更改进行调用。它是在事务生命周期中采取的所有操作的完整记录,您可以依赖它来驱动后端进程,如记帐,订单履行或取消。 IPN流程采取措施确保流程的完整性。
他们的目的不同,因此涉及的信息和安全性也不同。对于pros and cons。
IPN消息可能会严重延迟,因此请使用所有三个变量
请注意,虽然大多数IPN消息是在PayPal交易完成后的几秒钟内发送的,但我经历了长达数小时的延迟,因此它们可靠,但不一定及时。
我建议使用return
,return_cancel
和notify_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仍会将IPN消息发送到您为特定付款指定的通知URL。 IPN消息不是因为您禁用了配置文件中的首选项而发送的内容将在您启用接收IPN时显示在IPN历史记录中。它们出现在历史记录中后,您可以选择是否重新发送它们。
我不确定相关交易(如争议或后续订阅付款)是否仍会使用原始notify_url
。也许真正知道的人可以提供答案。
答案 2 :(得分:5)
您的notify-url和返回网址都不同。您的返回网址会在成功付款后通过一些退货信息指导您的客户。顺便说一句,通知网址是为了获取客户购买的完整交易详情,以及客户无法访问的详细信息,这是出于数据库或存储目的。