每次创建/更新/删除订单时,我都会使用Woocommerce webhooks来收听。
我在Woocommerce中设置webhook如下
在我的Laravel路线文件中,我按如下方式设置了路线:
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中的任何其他方式使用除Request $请求之外的数据。
答案 0 :(得分:1)
根据我对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', 'OrdersController@create')
告诉您的路由将所有HTTP POST调用重定向到api/v1/orders/create
到该控制器内的OrdersController.php
和create()
方法。
在你的控制器中,你将能够使用$request
变量作为输入参数,它应该可以工作。
所以在OrdersController.php
:
class OrdersController extends Controller {
public function create(Request $request) {
Log::debug($request->all());
return $request->all();
}
}
祝你好运!
答案 1 :(得分:0)
这对我有用。我在api.php中的路线如下。
Route::post('/woocommerce/webhook/', 'Api\WoocommerceController@test');
我的控制器动作如下。
public function test()
{
$payload = @file_get_contents('php://input');
$payload = json_decode( $payload, true);
\Log::info(json_encode( $payload));
return response()->json([ 'data' => $payload, 'status' => \Symfony\Component\HttpFoundation\Response::HTTP_OK]);
}