【发布时间】:2023-03-08 20:47:01
【问题描述】:
我在 Yii2 控制器中设置了一个基本的 Webhook 端点,只是为了测试连接:
class CreditCardController extends Controller
{
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'webhook' => ['post'],
],
],
];
}
public function beforeAction($action)
{
if ($action->id == 'webhook')
$this->enableCsrfValidation = false;
return parent::beforeAction($action);
}
...我只想转储有效负载并返回 HTTP 200(大致基于我遵循的示例 here)
public function actionWebhook()
{
$payload = file_get_contents('php://input');
ob_start();
var_dump($payload);
error_log(ob_get_clean(), 4);
echo json_encode(['status' => 'success']);
}
我安装了 Stripe CLI 并将 Webhook 转发到我的本地测试服务器:
stripe listen -f https://testsite.office/credit-card/webhook
当我触发包含我正在监听的内容的事件时:
stripe trigger invoice.payment_succeeded
我收到这条消息:
[错误] POST 失败:发布“https://testsite.office/credit-card/webhook”:超出上下文期限(等待标头时超出 Client.Timeout)
如果我删除该操作的 POST 规则并在浏览器中对 URL 进行编码,它就可以正常工作。
有什么想法吗?
乔
【问题讨论】:
-
这似乎是您的框架在 Stripe CLI 转发事件时处理 POST 请求的方式存在问题。你能确认你的服务器收到了请求吗?它可以到达控制器吗?您需要在此处提供更详细的调试信息。