How to handle incoming POST data from external server in Laravel

sai*_*eto 4 php api post sendgrid laravel

I have a route for handling incoming POST data in laravel:

Route::get('/sendgrid/api', 'SendGrid\EmailEventsController@parse');
Run Code Online (Sandbox Code Playgroud)

Here's my controller:

namespace App\Http\Controllers\SendGrid;

use App\Http\Controllers\Controller;
use App\Models\SendGrid\EmailEvents;

class EmailEventsController extends Controller
{
    public function parse()
    {
        $contents = file_get_contents("php://input");
        $requests = json_decode($contents);

        $data = array();

        foreach ($requests as $request)
        {
            array_push($data, array(
                'email' => $request->email,
                'event' => $request->event,
                'category' => $request->category
            ));
        }

        EmailEvents::insert($data);
    }
}
Run Code Online (Sandbox Code Playgroud)

But still doesn't work. What did I do wrong?

小智 5

首先,你可以改变你的路线看起来像这样

Route::any('/sendgrid/api', 'SendGrid\EmailEventsController@parse');
Run Code Online (Sandbox Code Playgroud)

然后,您必须在 Middleware > VerifyCsrfToken 中忽略未使用的 csrf

并添加您的代码如下所示

protected $except = [
     '/sendgrid/api',
];
Run Code Online (Sandbox Code Playgroud)

你可以使用和改变

$contents = file_get_contents("php://input");
Run Code Online (Sandbox Code Playgroud)

$contents = $request->getContent();
Run Code Online (Sandbox Code Playgroud)

我希望这段代码可以帮助您解决问题。谢谢