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

如何通过Webhooks将WordPress Contact Form7数据发送至Laravel并完成认证

问题:WordPress Contact Form7 表单数据无法通过wp-webhooks提交到Laravel Sanctum API

背景与需求

我是API技术新手,需要实现以下功能:在WordPress中用Contact Form7搭建了包含姓名、联系电话、咨询类型三个字段的基础咨询表单,要将表单数据发送到Laravel应用并保存到线索管理模块,用于后续跟进。

已完成操作

  • 使用wp-webhooks WordPress插件向Laravel API发送数据
  • 在Laravel应用中创建了API路由和AuthController
  • 编写了SalesController处理数据存储逻辑

当前问题

Laravel无法接收到wp-webhooks发送的数据。但在Postman中手动设置Bearer token时API可以正常工作,同一浏览器登录Laravel应用后调用API也正常,不知道如何让wp-webhooks完成用户认证。


Laravel API路由

//API route for register new user
Route::post('/register', [App\Http\Controllers\API\AuthController::class, 'register']);
//API route for login user
Route::post('/login', [App\Http\Controllers\API\AuthController::class, 'login']);


Route::group(['middleware' => ['auth:sanctum']], function() {
    Route::get('/profile', function(Request $request) {
    return auth()->user();
    });

// API route for Cf7 to system
Route::resource('externalsales', App\Http\Controllers\API\SalesController::class);


// API route for logout user
Route::post('/logout', [App\Http\Controllers\API\AuthController::class, 'logout']);
});

AuthController代码

class AuthController extends Controller
{
    public function register(Request $request)
    {
        $validator = Validator::make($request->all(),[
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:8'
        ]);

        if($validator->fails()){
            return response()->json($validator->errors());       
        }

        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password)
         ]);

        $token = $user->createToken('auth_token')->plainTextToken;

        return response()
            ->json(['data' => $user,'access_token' => $token, 'token_type' => 'Bearer', ]);
    }

    public function login(Request $request)
    {
        if (!Auth::attempt($request->only('email', 'password')))
        {
            return response()
                ->json(['message' => 'Unauthorized'], 401);
        }

        $user = User::where('email', $request['email'])->firstOrFail();

        $token = $user->createToken('auth_token')->plainTextToken;

        return response()
            ->json(['message' => 'Hi '.$user->name.', welcome to home','access_token' => $token, 'token_type' => 'Bearer', ]);
    }

    // method for user logout and delete token
    public function logout()
    {
        auth()->user()->tokens()->delete();

        return [
            'message' => 'You have successfully logged out and the token was successfully deleted'
        ];
    }
}

SalesController代码

public function index()
{
    $data = SalesManagement::latest()->get();
    return response()->json([SalesResource::collection($data), 'Leads fetched.']);
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    $validator = Validator::make($request->all(),[
        'fullname' => 'required|string|max:255',
        'mobile' => 'required',
        'description' => 'required'

    ]);

    if($validator->fails()){
        return response()->json($validator->errors());       
    }

    $sales = SalesManagement::create([
        'fullname' => $request->fullname,
        'mobile' => $request->mobile,
        'description' => $request->description,
     ]);
    $token = $request->bearerToken();

    
    return response()->json(['Lead created successfully.','access_token' => $token, 'token_type' => 'Bearer', new SalesResource($sales)]);
}

解决方法

1. 创建wp-webhooks专用Laravel用户与Token

先在Laravel中创建一个专门用于wp-webhooks调用API的用户,通过Artisan Tinker执行:

php artisan tinker
// 创建用户
User::create(['name' => 'WP Webhook User', 'email' => 'wp-webhook@yourdomain.com', 'password' => Hash::make('your-strong-password')]);
// 生成永久Token
$user = User::where('email', 'wp-webhook@yourdomain.com')->first();
$token = $user->createToken('wp-webhook-token')->plainTextToken;
// 复制输出的token保存好

2. 配置wp-webhooks请求头

打开wp-webhooks的发送设置,找到向Laravel API的请求配置,在请求头中添加:

  • 键:Authorization
  • 值:Bearer 你刚才生成的plainTextToken

3. 验证字段映射一致性

确保Contact Form7的字段名与Laravel SalesController验证的字段完全对应:

  • CF7姓名字段 → fullname
  • CF7联系电话字段 → mobile
  • CF7咨询类型字段 → description

4. 可选:配置CORS(跨域场景)

如果WordPress与Laravel域名不同,修改Laravel的config/cors.php,添加WordPress域名到允许列表:

'allowed_origins' => ['https://your-wordpress-domain.com'],
'supports_credentials' => true,

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:18:26