2017-08-01 12 views
0

私はWoocommerce webhooksを使用して、注文が作成/更新/削除されるたびにリッスンします。WoocommerceからLaravelにwebhook経由でデータを送信

私はセットアップ私のLaravelルートで

enter image description here

を次のようにWoocommerceでウェブフックは次のように私はルートを設定しているファイルをしました:

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メソッドは、私がリクエスト$要求に以外のデータを消費するLaravelで他の方法のわからないMethodNotAllowedException

をスローします。

+0

'php artisan dump-autoload'を試しましたか? –

+0

ルートファイルに 'api/v1/orders/create'という名前のルートはありませんか?また、Woocommerceが配信URLに後続の '/'を追加していないかどうかを確認します。 Laravelアクセスログを表示します。 '/ create'の後に何かがあれば、POSTの代わりにGETを試みます。 –

+0

@giollianosulit no。ルート自体は正常に動作します。私がランダムなログエントリを作成した場合、それは動作します。空の配列を返すのは$ request-> all()です。 –

答えて

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', '[email protected]')

OrdersController.phpからapi/v1/orders/createへのすべてのHTTP POST呼び出しとそのコントローラ内のcreate()方法をリダイレクトするために、あなたのルーティングを伝えます。

コントローラでは、$request変数を入力引数として使用することができます。これは動作するはずです。 OrdersController.php中のSO

class OrdersController extends Controller { 

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

} 

グッドラック!

+0

**編集**心配しないでください。はい、上記のようにコントローラであなたの機能を持つように動作します。 –

関連する問題