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#