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

Laravel9添加Facebook webhook时报Response::create()未定义错误

环境信息
  • BotMan 版本:2.6.1
  • PHP 版本:8.1
  • 对接消息服务:Facebook
  • 缓存驱动:LaravelCache
  • Laravel 版本:9.18
问题描述

Laravel 9环境下运行BotMan对接Facebook时出现报错,需确认最简便的处理方案。
报错提示create方法不存在,疑问点为是否需要新建继承Request的类自行实现create方法。
已尝试将代码中所有引用的Symfony\Component\HttpFoundation\Response替换为Illuminate\Http\Response (and Request),但未解决问题。

执行如下curl请求模拟Facebook webhook验证:

curl -X GET "https://somedomain.org/botman?hub.verify_token=MySecretTokenFromDotENV&hub.challenge=CHALLENGE_ACCEPTED&hub.mode=subscribe"

返回错误响应:

Error: Call to undefined method Symfony\Component\HttpFoundation\Response::create() in file /var/www/nams/botman/driver-facebook/src/FacebookDriver.php on line 120

#0 /var/www/nams/botman/botman/src/Drivers/DriverManager.php(157): BotMan\Drivers\Facebook\FacebookDriver->verifyRequest()
#1 /var/www/nams/botman/botman/src/BotMan.php(542): BotMan\BotMan\Drivers\DriverManager::verifyServices()
#2 /var/www/nams/botman/botman/src/BotMan.php(421): BotMan\BotMan\BotMan->verifyServices()
#3 /var/www/nams/app/Http/Controllers/BotManController.php(40): BotMan\BotMan\BotMan->listen()
#4 /var/www/nams/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\Http\Controllers\BotManController->handle()...
复现步骤
  1. 在Laravel 9项目中从本地路径仓库安装botman,调整composer.json依赖版本适配Laravel 9;
  2. 按如下代码配置加载Facebook驱动,尝试对接Facebook服务:
$config = [
    'user_cache_time' => 720,
    'config' => [
        'conversation_cache_time' => 720 ,
    ],
    // 驱动专属配置
    'facebook' => [
        'token' => env('FACEBOOK_TOKEN'),
        'app_secret' => env('FACEBOOK_APP_SECRET'),
        'verification' => env('FACEBOOK_VERIFICATION'),
    ]
];
$botman = app('botman');
DriverManager::loadDriver(\BotMan\Drivers\Facebook\FacebookDriver::class);
BotManFactory::create($config, new LaravelCache());
$botman->listen();
  1. 执行上述curl请求模拟Facebook webhook验证请求,即可触发报错。

触发错误的方法代码如下,初步判断适配新版Laravel/Symfony即可解决,但不清楚具体修复方式:

/**
 * @param  Request  $request
 * @return null|Response
 */
public function verifyRequest(Request $request)
{
    if ($request->get('hub_mode') === 'subscribe' && $request->get('hub_verify_token') === $this->config->get('verification')) {
        return Response::create($request->get('hub_challenge'))->send();
    }
}
解决方案

不需要新建继承Request的类,报错核心原因是Laravel 9依赖的Symfony 6版本HttpFoundation组件移除了Response::create()静态方法,当前使用的BotMan Facebook驱动还在沿用旧版Symfony写法,选以下任意一种方案修复即可:

  1. 最快临时修复:直接打开报错文件/var/www/nams/botman/driver-facebook/src/FacebookDriver.php,定位到120行,将原有代码替换为return new \Symfony\Component\HttpFoundation\Response($request->get('hub_challenge'));,注意删除末尾的->send()调用,Laravel路由会自动处理响应发送,手动调用会在新版本中出现输出冲突。该方法缺点是后续composer更新依赖时修改会被覆盖。
  2. 一劳永逸不修改vendor文件:先安装composer补丁包cweagans/composer-patches,把上述代码修改做成补丁存放到项目目录,在composer.json中配置补丁规则,后续执行composer更新时补丁会自动生效。
  3. 适配Laravel原生Response类:打开FacebookDriver.php文件,将头部引用的use Symfony\Component\HttpFoundation\Response;替换为use Illuminate\Http\Response;,Illuminate提供的Response类仍然保留了静态create方法,同样删除代码末尾的->send()即可,无需修改方法内部的create调用逻辑。

内容的提问来源于stack exchange,提问作者NoAd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:09:25