Laravel 没有收到 paypal webhook 事件
Laravel not receiving paypal webhook events
你好,我是 laravel 的新人,我建立了一个电子商务平台(细节不重要)
无论如何,我的问题是我创建了一条可以从 paypal webhook 捕获所有事件的路由,但是当我直接访问它时它正在工作但是当我从 paypal webhook 模拟器尝试时或者即使沙盒付款没有通过
我知道问题出在 csrf 验证上,我尝试排除路由但没有成功,还尝试创建一个新的 RouteServiceProvider
这是我在控制器中的代码,所以我可以从请求中捕获任何内容
$headers = getallheaders();
file_put_contents("/home/username/public_html/test.txt", json_encode($headers));
这是我的路线
Route::domain(env("APP_DOMAIN"))->group(function () {
Route::get('/paypal/n', 'HomeController@notifications');
});
我使用了 domain(env("APP_DOMAIN")) 因为每个人都可以添加自己的域,我希望它只在主域中工作。
RouteServiceProvider中的代码
public function map()
{
$this->mapApiRoutes();
$this->mapWebRoutes();
$this->mapPaymentRoutes();
//
}
protected function mapPaymentRoutes()
{
Route::middleware('payment')
->namespace($this->namespace)
->group(base_path('routes/payment.php'));
}
当然我确实在文件 Kernel.php 中定义了支付中间件并评论了 VerifyCsrfToken class
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'payment' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
// \App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
即使有了这一切,并且进行了大量测试,我还是无法让它工作
如果我向纯 php 文件发送请求,它工作正常。
你能帮我解决这个问题吗?我试图自己找到一个解决方案,但我花了 15 天的时间,没有任何运气
我使用 laravel 6 .
如果其他人遇到这个问题,我必须通过在 public 中创建一个纯 php 文件并向该文件发送 webhook 请求来完成一轮工作 url/file .php 和文件捕获数据并将其发送到我在 laravel 中创建的命令来处理它,因此与数据库有关的所有内容都在 laravel 和 file.php 就像一个管道。
我知道这不是最好的主意,但也不是最糟糕的
并感谢所有试图帮助我的人。
你好,我是 laravel 的新人,我建立了一个电子商务平台(细节不重要) 无论如何,我的问题是我创建了一条可以从 paypal webhook 捕获所有事件的路由,但是当我直接访问它时它正在工作但是当我从 paypal webhook 模拟器尝试时或者即使沙盒付款没有通过 我知道问题出在 csrf 验证上,我尝试排除路由但没有成功,还尝试创建一个新的 RouteServiceProvider 这是我在控制器中的代码,所以我可以从请求中捕获任何内容
$headers = getallheaders();
file_put_contents("/home/username/public_html/test.txt", json_encode($headers));
这是我的路线
Route::domain(env("APP_DOMAIN"))->group(function () {
Route::get('/paypal/n', 'HomeController@notifications');
});
我使用了 domain(env("APP_DOMAIN")) 因为每个人都可以添加自己的域,我希望它只在主域中工作。
RouteServiceProvider中的代码
public function map()
{
$this->mapApiRoutes();
$this->mapWebRoutes();
$this->mapPaymentRoutes();
//
}
protected function mapPaymentRoutes()
{
Route::middleware('payment')
->namespace($this->namespace)
->group(base_path('routes/payment.php'));
}
当然我确实在文件 Kernel.php 中定义了支付中间件并评论了 VerifyCsrfToken class
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'payment' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
// \App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
即使有了这一切,并且进行了大量测试,我还是无法让它工作 如果我向纯 php 文件发送请求,它工作正常。 你能帮我解决这个问题吗?我试图自己找到一个解决方案,但我花了 15 天的时间,没有任何运气 我使用 laravel 6 .
如果其他人遇到这个问题,我必须通过在 public 中创建一个纯 php 文件并向该文件发送 webhook 请求来完成一轮工作 url/file .php 和文件捕获数据并将其发送到我在 laravel 中创建的命令来处理它,因此与数据库有关的所有内容都在 laravel 和 file.php 就像一个管道。 我知道这不是最好的主意,但也不是最糟糕的 并感谢所有试图帮助我的人。