通过 webhook 将数据从 Woocommerce 发送到 Laravel

Send data from Woocommerce to Laravel via webhook

我正在使用 Woocommerce webhooks 来监听每次订单 created/updated/deleted。

我在 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 中查看日志和 return 数据时,我得到的只是一个空数组。

除 'GET' 之外的任何 HTTP 方法都会抛出 MethodNotAllowedException

我不确定 Laravel 除了请求 $request 之外还有什么其他方法可以使用数据。

根据我对 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')

这告诉您的路由将所有对 api/v1/orders/create 的 HTTP POST 调用重定向到该控制器中的 OrdersController.phpcreate() 方法。

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

所以在 OrdersController.php:

class OrdersController extends Controller {

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

}

祝你好运!

这对我有用。我在 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]);
}