PayPal Webhook 不发送 POST 数据

Posted

技术标签:

【中文标题】PayPal Webhook 不发送 POST 数据【英文标题】:PayPal Webhook sends no POST data 【发布时间】:2020-06-23 23:18:36 【问题描述】:

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

?>

【问题讨论】:

什么是$_SERVER['HTTP_CONTENT_TYPE'] 【参考方案1】:

我想通了……

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

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

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

file_get_contents('php://input');

获取数据。

因此,对于 PayPal PHP webhook,您可以这样做......

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

这行得通,现在我正在获取所有数据。

这确实应该记录在某个地方......任何地方......但它不是......对于初级 PHP 程序员来说并不明显。

【讨论】:

好吧,如果您阅读了php.net/manual/en/reserved.variables.post.php 的 PHP 文档,关于 $_POST :“使用 application/x-www-form- 时通过 HTTP POST 方法传递给当前脚本的变量关联数组urlencoded 或 multipart/form-data 作为请求中的 HTTP Content-Type。” 但是 PayPal Webhook 不使用该内容类型;它发送 JSON 格式的数据。有很多地方都在讨论如何使用 PHP 通过 HTTP 读取 JSON;看来你找到了其中一个来解决这个问题。

以上是关于PayPal Webhook 不发送 POST 数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 webhook 将客户发送到 PayPal 支付页面? C#

Paypal 自适应支付和 Webhook 事件未注册

从 paypal webhook 获取事件数据

接收不到shopify webhook 发送post请求

如何通过 webhook 在 PayPal API 中确认每月订阅的计费?

Facebook 向 webhook 发送空 POST