如何通过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
相关产品推荐
相关产品推荐

