【问题标题】:PayPal Webhook sends no POST dataPayPal Webhook 不发送 POST 数据
【发布时间】: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']

标签: php paypal


【解决方案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;看来你找到了其中一个来解决这个问题。
猜你喜欢
  • 2012-11-06
  • 2016-09-07
  • 2015-11-20
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
相关资源
最近更新 更多