PayPal Webhook 不发送 POST 数据

zda*_*man 5 php paypal

已成功配置我的 PayPal Webhook 以收到所有事件的通知。

当事件发生时,PayPal 会调用我的 webhook(一个简单的脚本)...但不会发送任何 POST 数据...

当然,除了$_SERVER之外,所有 PHP 数组都是空的($_POST、$_GET、$_REQUEST )。

到底是怎么回事?Webhook 模拟器表示事件已成功发送/排队...

$_SERVER数组包含建议的HTTP_PAYPAL_...标头和所有内容...但$_POST数组为空。

我的webhook写成如下...

<?php

require ('./ace-includes/ace_log.php');

ace_log(print_r($_POST, true));
ace_log(print_r($_REQUEST, true));
ace_log(print_r($_GET, true));
ace_log(print_r($_SERVER, true));

ace_sendlog("NOTIFY SCRIPT CALLED");

?>
Run Code Online (Sandbox Code Playgroud)

zda*_*man 8

我想到了....

您不能使用 $_POST 来获取数据......

数据包含在发送到脚本的 HTTP 文件中。

在这种情况下你必须使用

file_get_contents('php://input');
Run Code Online (Sandbox Code Playgroud)

获取数据。

所以对于 PayPal PHP webhooks 你会这样做......

$json = file_get_contents('php://input');
$data = json_decode($json);
Run Code Online (Sandbox Code Playgroud)

这有效,现在我正在获取所有数据。

这确实应该记录在某处……任何地方……但它不是……并且对于 PHP 初学者来说并不明显。