Почему не работает handleWebhook Cashier Laravel?

Всем привет, хочу хуки принимать от Stripe, почитал доку
Роут забил такой Route::post('stripe/webhook', '\App\Http\Controllers\WebhookController@handleWebhook');
Контроллер расширяет базовый
use Laravel\Cashier\Http\Controllers\WebhookController as CashierController;

class WebhookController extends CashierController {}

Пытаюсь протестировать и создаю тупо файл
public function handleInvoicePaymentSucceeded($payload)
    {
        //http_response_code(201);
        //$subscription = Subscription::where('stripe_id', $payload);

        $path = 'screenshots/' . time() . '.txt';
        $result = Storage::disk('public')->put($path, 'asdasd');
    }

Но ничего не создается, зато в ответ 200 летит, уже минут 40 не могу причину найти, причем если сделать тупо контроллер отдельный, не расширяющий CashierController, к примеру на индексный метод, то файл создается прекрасно
public function index()
    {
        $input = @file_get_contents('php://input');
        //$event_json = json_decode($input);

// Do something with $event_json
        $path = 'screenshots/' . time() . '.txt';
        $result = Storage::disk('public')->put($path, 'asdasd');

        http_response_code(200); // PHP 5.4 or greater
    }

Я конечно могу юзать вариант со своим контроллером и методом, но решение cashier нравится, а писать что-то подобное нет времени, кто-нибудь сталкивался?
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
@seftomsk Автор вопроса
Я вроде как разобрался, пришлось лезть в класс WebhookController,
а там идет проверка
if (! $this->isInTestingEnvironment() && ! $this->eventExistsOnStripe($payload['id'])) {
            return;
        }

Соответственно она не выполняется, метод isInTestingEnvironment сравнивает CASHIER_ENV c 'testing', прописал это в .env и всё заработало. Странно, что такое в доке не указали...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы