PayPal Webhook未发送任何POST数据。

5

我成功地配置了我的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");

?>

1
$_SERVER['HTTP_CONTENT_TYPE'] 是什么? - Barmar
1个回答

8

我弄清楚了...

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

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

在这种情况下,你必须使用

file_get_contents('php://input');

获取数据。

因此,对于PayPal PHP Webhooks,您需要执行以下操作....

$json = file_get_contents('php://input');
$data = json_decode($json);

这个可行,现在我可以获取所有数据。

这真的应该在某个地方进行记录...任何地方...但并没有...对于初学者的PHP程序员来说并不明显。


1
如果您阅读 https://www.php.net/manual/en/reserved.variables.post.php 上关于 $_POST 的 PHP 文档,会发现:"当使用 application/x-www-form-urlencoded 或 multipart/form-data 作为请求的 HTTP Content-Type 时,通过 HTTP POST 方法传递给当前脚本的变量的关联数组。" 但 PayPal Webhook 并不使用该内容类型;它发送 JSON 格式的数据。有很多地方讨论如何使用 PHP 读取 HTTP 中的 JSON;看来您已经找到其中之一来解决这个问题了。 - Preston PHX
你绝对救了我的一天!!!! - Ponzio Pilato

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接