php webhook没有响应Stripe测试事件

时间:2017-05-25 02:00:16

标签: php stripe-payments webhooks

我已根据条带文档建立了一个基本的webhook php页面,如下所示。当我从Stripe webhooks仪表板发送测试事件时,条带响应"测试webhook已成功发送"有一个blankk响应。但是,未写入输出日志文件,未发送电子邮件,并且没有任何内容记录到http服务器错误日志或php错误日志。我的php版本是5.3.3。我做错了什么?

<?php
error_reporting(15);
// Set your secret key: remember to change this to your live secret    key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
require_once('vendor/autoload.php');

\Stripe\Stripe::setApiKey("secret_test_key");

$handle = fopen("webhook.log","a");

// Retrieve the request's body and parse it as JSON
$input = file_get_contents("php://input");

$event_json = json_decode($input);

// Do something with $event_json
if (fwrite($handle, $event_json) === FALSE) {
    mail("mike@example.com","Cannot write to webhook.log","");
    echo "Cannot write to webhook.log";
    exit;
}

mail('mike@example.com','Webhook Event',$event_json);
header(':', true, 200);
//http_response_code(200); // PHP 5.4 or greater
?>

2 个答案:

答案 0 :(得分:0)

你有一些潜在的问题。作为一个快速的经验法则,调试此方法的最佳方法是首先自己触发事件,只需在浏览器中自行加载webhook网址即可。然后你可以直接测试它并确保它正在做你期望它做的事情。显然有两种可能性:

  1. Stripe因某种原因未触发您的webhook处理程序
  2. 您的处理程序未正确记录
  3. 后者首先:可能是Stripe正在触发你的处理程序,但它没有成功记录这个事实。这意味着您的电子邮件日志记录和文件日志记录都失败了。这实际上是非常有可能的。使用邮件功能进行电子邮件记录实际上非常不可靠,除非您知道它有效。使用邮件功能发送的邮件会被大多数现代电子邮件系统(gmail等)静默删除,除非您正确配置了DNS记录,大多数人都没有。因此,除非您确定您的邮件尝试工作正常,否则可能不是。如果您在尝试写入日志文件时也遇到了权限问题(这对于新设置的服务器来说并不罕见),那么您的日志可能会失败。检查的最简单方法是自己在浏览器中加载webhook URL。这样你知道它被触发了,并且可以确定问题是不正确的日志记录还是Stripe没有调用你的webhook。

    如果您确定条带没有调用您的webhook,最可能的罪魁祸首将是无效的HTTPS证书。您的webhook是否通过HTTPS连接(应该是)?如果是这样,它是有效的证书吗?当您浏览自己的站点时,可以告诉浏览器忽略无效的证书,但如果遇到无效的证书,条带将拒绝发送请求。

    如果以上都没有解决问题,那么现在是时候进行更多的挖掘了,但我会从那些开始:它们可能是最可能的问题。

答案 1 :(得分:0)

解决方案是$ event_json是一个对象而fwrite失败了,因为它期望一个字符串不是一个对象。通过转换为数组然后序列化,我能够写入日志并发送电子邮件。

$event_json = (array)json_decode($input);
$event = serialize($event_json);