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

时间:2017-08-01 05:57:38

标签: php wordpress laravel woocommerce webhooks

每次创建/更新/删除订单时,我都会使用Woocommerce webhooks来收听。

我在Woocommerce中设置webhook如下

enter image description here

在我的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 $请求之外的数据。

2 个答案:

答案 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.phpcreate()方法。

在你的控制器中,你将能够使用$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]);
}