我已根据条带文档建立了一个基本的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
?>
答案 0 :(得分:0)
你有一些潜在的问题。作为一个快速的经验法则,调试此方法的最佳方法是首先自己触发事件,只需在浏览器中自行加载webhook网址即可。然后你可以直接测试它并确保它正在做你期望它做的事情。显然有两种可能性:
后者首先:可能是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);