PayPal IPN 模拟器工作正常,但 IPN 不响应沙盒支付

Posted

技术标签:

【中文标题】PayPal IPN 模拟器工作正常,但 IPN 不响应沙盒支付【英文标题】:PayPal IPN simulator works fine but IPN not responding to sandbox payments 【发布时间】:2018-08-14 21:18:59 【问题描述】:

如果我从这里https://developer.paypal.com/developer/ipnSimulator/ 发送 IPN,它可以正常工作。

如果我使用 PayPal 沙盒帐户和 PayPal 标准按钮直接从我的网站付款,IPN 侦听器不会接收任何内容。这是我网站上的 PayPal 按钮(请注意,它确实链接到 PayPal 的沙箱,并且正确指定了 notify_url):

                <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
                    <input type="hidden" name="cmd" value="_xclick">
                    <input type="hidden" name="no_shipping" value="1">
                    <input type="hidden" name="no_note" value="1">
                    <input type="hidden" name="currency_code" value="USD">
                    <input type="hidden" name="button_subtype" value="services">

                    <input type="hidden" name="business" value="payments@www.com">
                    <input type="hidden" name="item_number" value="21-2360-4" id="itemNumber">
                    <input type="hidden" name="item_name" value="Listing Fee">
                    <input type="hidden" name="return" value="https://www.com/Market">
                    <input type="hidden" name="cancel_return" value="https://www.com/Seller">
                    <input type="hidden" name="amount" value="10" id="amount">

                    <input type="hidden" name="notify_url" value="https://www.com/IPN">
                    <p><button type="submit" id="sellButton">Pay fee and list</button></p>
                </form>

这是我的 IPN 侦听器代码,它适用于从 PayPal IPN 模拟器页面制作的 IPN,但不适用于使用上述表单进行的沙箱付款(请注意,它也在侦听 PayPal 的沙箱):

if($_SERVER['REQUEST_METHOD'] != 'POST')
    exit();


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://ipnpb.sandbox.paypal.com/cgi-bin/webscr');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "cmd=_notify-validate&" . http_build_query($_POST));
$response = curl_exec($ch);
curl_close($ch);

if($response == "VERIFIED")
     // Successful purchase code.

任何关于它为什么不接收 IPN 的线索将不胜感激。

【问题讨论】:

对不起,看错了。 【参考方案1】:

修改信息 登录收款人 Paypal 账户并设置 IPN

步骤 个人资料 -> 个人资料和设置 -> 我的销售工具 -> 即时付款通知 -> 更新

点击“选择IPN设置”

将“通知 URL”字段设置为 html 表单中“notify_url”上的内容。

选择“接收 IPN 消息”

保存

注意:如果您查看 IPN 历史记录,它可能会显示为 Queued。这似乎是沙盒故障,或者可能是它处理了许多请求并且队列很长。您可以尝试以较小的价值(例如 1 美元)进行实时支付。 见这里:Paypal IPN Status - Queued

现在无关紧要--- 这应该是一个评论,但我没有制作 cmets 的许可。 你有&lt;button name="submit"&gt;Purchase with PayPal&lt;/button&gt; 那应该是&lt;button type="submit"&gt;Purchase with PayPal&lt;/button&gt; 请在&lt;form&gt;&lt;/form&gt; 标签内提供完整的 Paypal html 代码。

【讨论】:

我已经更改了按钮类型并添加了完整代码。 希望我修改后的答案有帮助 我已经在收件人帐户上启用了 IPN,尽管这不是一个长期的解决方案,因为它不会总是使用相同的电子邮件接收付款。贝宝还说指定 notify_url 将起作用。第二段很有用,尽管根本没有弹出通知 - 甚至没有“排队”。

以上是关于PayPal IPN 模拟器工作正常,但 IPN 不响应沙盒支付的主要内容,如果未能解决你的问题,请参考以下文章

PayPal IPN 错误和自定义端口 IPN URL

PayPal IPN 沙盒不工作,但模拟器可以

PayPal 没有向听众发送 IPN

接收 PayPal IPN 时不获取任何参数

PayPal IPN 已验证握手但 IPN 无效

(Laravel)无法从PayPal IPN获得响应,但模拟的响应返回已经过验证