通过webhook从Woocommerce发送数据到Laravel

问题描述:

我使用Woocommerce webhooks来侦听每次订单创建/更新/删除。通过webhook从Woocommerce发送数据到Laravel

我设置网络挂接在Woocommerce如下

enter image description here

在我Laravel routes文件我已经设置了路线如下:

use Illuminate\Http\Request; 

// API routes... 
Route::post('api/v1/orders/create', function (Request $request) { 
    Log::debug($request->all()); 
    return $request->all(); 
}); 

然而,当我查看日志以及POSTMAN中的返回数据,我得到的只是一个空数组。

不是'GET以外的任何HTTP方法抛出MethodNotAllowedException

我不知道在Laravel任何其他方式消耗比请求$要求的其他数据。

+0

你尝试过'php artisan dump-autoload'吗? –

+0

路径文件中没有其他路径命名'api/v1/orders/create'?同时检查Woocommerce是否不在传递URL添加尾随'/'。查看您的Laravel访问日志。如果'/ create'后面有任何东西,那么它将尝试GET而不是POST。 –

+0

@giollianosulit no。该路线本身工作正常。如果我做一个随机日志条目,它就可以工作。它只是$ request-> all()返回一个空数组。 –

根据我对Laravel路由的理解,你传递给函数的输入实际上是你的路由变量。

因此,如果您的API中有路由: api/v1/orders/{id}/create那么在路由功能中,您将传入ID作为方法参数。所以这是正确的:

Route::post('api/v1/orders/{id}/create', function ($id) { 
    Log::debug($id); 
    return $id; 
}); 

它正在寻找您的路线定义请求。

宁可创建一个控制器。然后在你的routes.php使用这样的: Route::post('api/v1/orders/create', '[email protected]')

这告诉你的路由重定向所有的HTTP POST调用api/v1/orders/createOrdersController.php和控制器内的create()方法。

在你的控制器中,你将能够使用$request变量作为输入参数,它应该工作。

所以在OrdersController.php

class OrdersController extends Controller { 

    public function create(Request $request) { 
    Log::debug($request->all()); 
    return $request->all(); 
    } 

} 

祝您好运!

+0

**编辑**没关系。是的,在控制器中使用你的功能将如上所述。 –