You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yii2测试Stripe Webhook提示[ERROR] Failed to Post报错如何解决?

问题原因及解决方案

可能的原因

  • 本地测试域名使用自签名SSL证书,Stripe CLI默认校验SSL证书合法性,未通过校验导致连接超时
  • 本地Web服务(Nginx/Apache)或防火墙配置了POST请求拦截规则,仅允许GET请求访问对应路径
  • Yii2全局或控制器内存在额外的访问控制逻辑,例如身份校验、请求频率限制等,未放开webhook动作的匿名访问权限
  • Stripe CLI未适配本地网络配置,例如走了全局代理导致无法解析本地测试域名
  • 代码未明确设置响应格式和状态码,Yii2自动处理响应时触发异常导致无返回

解决步骤

  1. 优先测试本地POST请求是否正常,使用curl命令直接发起请求验证:
curl -X POST https://testsite.office/credit-card/webhook -v

如果curl请求也超时,说明接口本身对POST请求的处理有问题,优先排查服务端配置;如果curl能正常返回{"status":"success"},则问题出在Stripe CLI配置。
2. 本地测试使用自签名证书的场景,运行Stripe CLI时添加--skip-verify参数跳过SSL校验:

stripe listen --skip-verify -f https://testsite.office/credit-card/webhook
  1. 检查Yii2的访问控制配置,确认webhook动作放开了匿名访问权限,如果控制器配置了AccessControl行为,添加如下规则:
public function behaviors()
{
    return array_merge(parent::behaviors(), [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'actions' => ['webhook'],
                    'allow' => true,
                    'roles' => ['?'], // 允许未登录用户访问
                ],
                // 其他原有规则
            ],
        ],
        // 原有VerbFilter等配置
    ]);
}
  1. 优化webhook动作代码,明确指定响应格式和状态码,避免Yii2自动渲染布局或添加额外响应头:
public function actionWebhook()
{
    $payload = file_get_contents('php://input');
    ob_start();
    var_dump($payload);
    error_log(ob_get_clean(), 4);
    
    \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
    \Yii::$app->response->statusCode = 200;
    return ['status' => 'success'];
}
  1. 检查本地网络代理配置,确认Stripe CLI没有走公网代理,或在Stripe CLI命令中明确指定本地域名解析规则。

内容的提问来源于stack exchange,提问作者Papa Joe Dee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:36:02