неизвестный статус 419 Payfast уведомить URL в Laravel - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь интегрировать платежный шлюз PayFast в мое приложение laravel, и я получаю ошибку 419, которая мне кажется очень странной, и ниже приведен код.

Я настроил все, как в документации PayFast ия проверяю его на ngrok и при уведомлении URL получаю 419 неизвестный статус, и я не знаю, что мне не хватает. Пожалуйста, посмотрите мой код и дайте мне знать, что мне не хватает.

Просмотр формы PayFast

<form target="_blank" action="https://sandbox.payfast.co.za/eng/process" method="POST">
    <input type="hidden" name="merchant_id" value="10015150">
    <input type="hidden" name="merchant_key" value="aaid6ctdo8lxz">
    <input type="hidden" name="custom_str1" value="{{$business->id}}">
    <input type="hidden" name="amount" value="200.00">
    <input type="hidden" name="name_first" value="">
    <input type="hidden" name="name_last" value="">
    <input type="hidden" name="email_address" value="">
    <input type="hidden" name="cell_number" value="0823456789">
    <input type="hidden" name="item_name" value="Making your business Featured on our Website">
    <input type="hidden" name="return_url" value="http://95d16c17.ngrok.io/return">
    <input type="hidden" name="cancel_url" value="http://95d16c17.ngrok.io/cancel">
    <input type="hidden" name="notify_url" value="http://95d16c17.ngrok.io/notify">
    <button type="submit" title="You will have to pay to make your business featured" class="btn btn-primary">Make Business Featured</button>
</form>

web.php

Route::post('notify','HomeController@updatedBusiness');

Домашний контроллер

public function updatedBusiness(Request $request){
    header('HTTP/1.0 200 OK');
    flush();
    $business = Business::find($request->get('custom_str1'));
    $business->featured_business = 1;
    $business->save();
    return 'success';
}

любая помощь будет очень признательна.

1 Ответ

1 голос
/ 07 ноября 2019

Это была проблема csrf, так как laravel применяет промежуточное ПО VerifyCsrfToken на каждом маршруте, и когда PayFast отправляет запрос POST на URL-адрес уведомления, тогда Laravel плачет, как @ delboy1978uk, упомянутый в комментарии. Отключение его в промежуточном программном обеспечении VerifyCsrfToken сделало трюк, как показано ниже

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

 class VerifyCsrfToken extends Middleware
{
    /**
     * Indicates whether the XSRF-TOKEN cookie should be set on the response.
     *
     * @var bool
     */
    protected $addHttpCookie = true;

    /**
    * The URIs that should be excluded from CSRF verification.
    *
    * @var array
    */
    protected $except = [
     'notify',
    ];
}
...