Laravel: Как получить доступ к функции контроллера из веб-перехватчика, который я создал для перехвата событий Stripe? - PullRequest
1 голос
/ 06 мая 2020

Для новых кредитных карт я токенизировал карту, а затем снимал с нее деньги. У меня была функция внутри моего CheckoutController.php, которая запускает поток:

public function checkoutWithNewCard(Request $request) {
  $total = $request->input('total');
  $customer = $request->user();
  $customer->checkout()->createOrder($request->input('total')
}

createOrder() также создает заказ на моем бэкэнде и очищает корзину, поэтому ее нужно запустить.

Я не переключался на использование новой размещенной Checkout Stripe, поэтому клиент теперь отправляется на собственную форму оформления Stripe и после успеха отправляется обратно на мой сайт, и я использую веб-перехватчик, чтобы поймать событие checkout.session.completed.
У меня есть StripeController.php для моих веб-перехватчиков, и я правильно его протестировал. У меня был оператор журнала внутри checkout.session.completed при оформлении заказа, и он срабатывает правильно.

StripeController. php

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Jobs\CompleteStripeCheckoutWithNewCardJob;


class StripeController extends Controller

{
    public $payload;

    public $event;

    public function __construct()
    {
        $this->payload = @file_get_contents('php://input');
        $this->event = null;
    }

    public function incoming(Request $request)
    {

        try {
            $event = \Stripe\Event::constructFrom(
                json_decode($this->payload, true), $request->all()
            );

        } catch(\UnexpectedValueException $e) {
            // Invalid payload
            return response()->json(['status' => 0, 'message' => 'error']);
        }

        // Handle the event
        switch ($event->type) {
            case 'checkout.session.completed':
                dispatch(new CompleteStripeCheckoutWithNewCardJob();
            default:
                // Unexpected event type

        }
        return response()->json(['success' => "1"], 200);
    }
}

Я удалил свой оператор журнала и создал место Job с именем CompleteStripeCheckoutWithNewCardJob(), потому что теперь мне нужно запустить logi c, который был внутри моего CheckoutController.php для создания порядка (createOrder()), но я не знаю, как я могу запустить их из Job, в другом контексте.

...