Paypal 自适应支付和 IPN

Posted

技术标签:

【中文标题】Paypal 自适应支付和 IPN【英文标题】:Paypal adaptive payments and IPN 【发布时间】:2014-06-23 13:28:36 【问题描述】:

我正在使用 AngellEye library 使用 Paypal 自适应付款。

除了 IPN,一切都很好。在沙盒模式下使用 Paypal 时,我会收到一条通知到我的 URL。但是,一旦我上线,我就没有收到对我的服务器的 IPN POST 请求。我检查了我的 Apache access.log。

我需要在某处启用 Paypal IPN 以进行实时自适应付款吗?

在我的 Paypal 帐户中,在销售偏好下,IPN 显示为禁用。要启用它,我还需要提供一个 URL。但是,我的 URL 是动态的,我假设因为我使用的是 Paypal API,所以不需要更改它?

IPN 的使用:

    $PayRequestFields = array(
        'ActionType' => 'CREATE',                                               
        'CancelURL' => base_url() . 'd/cancel/' . $this->transactionID,                                    
        'CurrencyCode' => $this->product->currency, 
        'ReturnURL' => base_url() . 'd/success/' . $this->transactionID,
        'FeesPayer' => 'PRIMARYRECEIVER',
        'IPNNotificationURL' => base_url() . 'ipn/status/' . $this->transactionID,  
        );

【问题讨论】:

您是否已经在您的真实 PayPal 账户中启用了即时付款通知?如果您需要说明,请告诉我。 @pp_MSI_Jenn 您指的是我的 Paypal 帐户中的设置吗?如果是这样,我没有启用它,因为它需要一个对我的应用程序来说是动态的 URL。不能以编程方式启用吗? 我已经更新了我的问题,以展示我如何使用 Andrew 的库。 【参考方案1】:

我联系了 Paypal 支持,他们是这样说的:

我检查了您当前帐户的 IPN 设置并显示 IPN 设置为“关闭”,而不是“禁用”。这是一个非常重要的 区别,因为 IPN 被禁用会阻止 IPN 消息被 发送。如果 IPN 被简单地关闭,PayPal 将只发送 IPN 如果在支付请求中指定了 notify_url,则消息。为了 自适应支付,notify_URL 是触发 IPN 的唯一方式 消息,因此 IPN 可以处于“关闭”设置并正常工作,但是 没有被禁用。

这是我自己随机解决问题后收到的。我让它工作的方式只是玩弄我的帐户设置。我在我的帐户中启用了 IPN,然后将其禁用,此后我的所有 IPN 请求都涌入了我在 Adaptive Payments API 调用中设置的 IPN URL。

【讨论】:

我会选择我的答案作为正确答案,因为它确实解决了我的问题,但不知道为什么。此外,我将奖励 Andrew,感谢他的持续帮助以及我使用了一年多的出色库。 啊,我应该记得的。很高兴他们帮助了你,我很高兴你喜欢图书馆!【参考方案2】:

Adaptive Payments IPN 稍有不同,因为应用程序会收到一个(如果已配置),然后商家/卖家帐户也会根据他们收到的实际交易收到一个。

例如,如果您的应用代表第 3 方用户生成支付请求,并且您在支付请求中设置了 NotificationURL,则应用特定的 IPN 将被发送到该 URL。交易特定的 IPN 将被发送到卖家账户在他们自己的 PayPal 账户中配置的 URL。

您还需要确保您的 IPN 脚本已配置为正确处理自适应 IPN。它发送的参数名称类似于 some.name,而 .不适用于常规 $_POST['paramname'] 逻辑。查看此IPN template 了解它是如何处理它的……您可能只想使用它。

这是我刚才运行支付请求时收到的应用程序 IPN 示例。

Array
(
    [transaction] => 
    [payment_request_date] => Tue May 06 12:49:35 PDT 2014
    [return_url] => http://paypal.angelleye.com/paypal/class/1.2/Pay_Return.php
    [fees_payer] => EACHRECEIVER
    [ipn_notification_url] => http://sandbox.angelleye.com/paypal/ipn/ipn-listener.php
    [sender_email] => tester@angelleye.com
    [verify_sign] => AFcWxV21C7fd0v3bYYYRCps-s-rl31ArVBOvsxhUiZ-m0M3mFjhNWWaRjM
    [test_ipn] => 1
    [cancel_url] => http://paypal.angelleye.com/paypal/class/1.2/Pay_Cancel.php
    [pay_key] => AP-8YH799874R4873815
    [action_type] => PAY
    [transaction_type] => Adaptive Payment PAY
    [status] => INCOMPLETE
    [log_default_shipping_address_in_transaction] => false
    [charset] => windows-1252
    [notify_version] => UNVERSIONED
    [reverse_all_parallel_payments_on_error] => false
)

【讨论】:

非常感谢您的回复。 :-) 我正在处理第 3 方用户的付款。我在 Apache access.logs 中进行了搜索,但对于通过 IPNNotificationURL 设置的 IPN URL,我根本没有收到访问服务器的请求。很高兴看到对我的服务器的 POST 请求。谢谢你的模板。 你确定你的配置正确吗?我刚刚从我的图书馆测试了支付请求并添加了 IPNNotificationURL。我按预期收到了 IPN。我已经用 IPN 示例更新了我的答案。 好吧,我刚刚在我的 Paypal 帐户中使用我的主页 URL 启用了 IPN?!这似乎已经成功了,我正在接收 POST 请求!文档中没有说要这样做吗?! 这应该没有必要。这样,当该帐户收到交易时,它会将数据发布到您的主页 URL,但我假设该 URL 实际上没有处理 IPN 的逻辑,对吗?这将浪费资源,甚至可能导致错误返回到 PayPal 的 IPN 服务器。您可能需要查看您的 IPN 历史记录。 我查看了我的 IPN 历史记录,我可以看到大量过去的交易处于禁用状态。然后是SentRetrying。已发送到正确的 URL,重试到错误的 URL(主页)。一个是Transaction made 类型,另一个是Adaptive payment made。我再次在我的帐户上禁用了 IPN,因为我不喜欢这些错误!关闭 IPN 时,消息很清楚,我不会收到 IPN 消息。

以上是关于Paypal 自适应支付和 IPN的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 IPN 使用 Paypal 自适应支付?

paypal自适应支付IPN中的自定义字段

Paypal 自适应支付 - IPN 和成功的返回响应

Paypal 自适应支付 IPN 回调:如何返回完整未更改的 ipn 消息

自适应支付 IPN 交易 ID 未出现

自适应支付 paypal - 没有支付 api 操作的 pdt 数据