Полосатые веб-крючки с laravel - PullRequest
0 голосов
/ 19 марта 2020

У меня есть приложение laravel, в котором я хочу включить платежи Stripe, особенно асинхронный поток с использованием веб-хуков! Я еще не пользовался веб-крючками, поэтому я в замешательстве и у меня есть несколько вопросов:

Сначала я создаю paymentIntent на сервере и отправляю секрет PI на клиент.

public function createPaymentIntent(Request $request)
    {

            $intent = PaymentIntent::create([
                'setup_future_usage' => 'off_session',
                'amount' => 1099,
                'currency' => 'usd',
            ]);

            return response()->json([
                'intent_secret' => $intent->client_secret,
            ], 200); 


    }

Теперь в клиенте я выполняю подтверждающую оплату, это возвращает Обещание

this.stripe.confirmCardPayment(
        this.intent_secret,
        {
            payment_method: {card: this.cardNumberElement}
        }
        )
        .then(function(result)
        {
            if (result.error) 
            {
            // Display error.message in your UI.
            }
            else
            {
            // The payment has succeeded
            // Display a success message
            }
        });

Теперь, когда это сбивает с толку, очевидно, мне нужно настроить webhooks для прослушивания, когда авторизация / оплата завершена, я проверил документы и я спас их пример PHP в мой код laravel, но у меня так много вопросов:

public function stripeWebhook(Request $request)
    {

        // You can find your endpoint's secret in your webhook settings
        $endpoint_secret = config('services.stripe.webhooksecret');

        $payload = @file_get_contents('php://input');
        $sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];
        $event = null;

        try
        {
            $event = \Stripe\Webhook::constructEvent($payload, $sig_header, $endpoint_secret);
        } 
        catch(\UnexpectedValueException $e)
        {
                // Invalid payload
                return response()->json([
                    'message' => 'Invalid payload',
                ], 200);
        }
        catch(\Stripe\Exception\SignatureVerificationException $e)
        {
            // Invalid signature
            return response()->json([
                'message' => 'Invalid signature',
            ], 200);
        }

        if ($event->type == "payment_intent.succeeded")
        {
            //As I understand here is where I should do things like send order info by mail and deplete stock accordingly

            $intent = $event->data->object;

            //$this->completeOrderInDatabase()
            //$this->sendMail();

            return response()->json([
                'intentId' => $intent->id,
                'message' => 'Payment succeded'
            ], 200); 
        } 
        elseif ($event->type == "payment_intent.payment_failed")
        {
            //Payment failed to be completed

            $intent = $event->data->object;
            $error_message = $intent->last_payment_error ? $intent->last_payment_error->message : "";

            return response()->json([
                'intentId' => $intent->id,
                'message' => 'Payment failed: '.$error_message
            ], 400); 
        }


    }

Итак, сначала я должен создать POST-маршрут domain.com/webhook, откуда я буду звонить мой метод webhookController?

Во-вторых, что такое полезная нагрузка и подпись? это похоже на обязательные параметры, но я не знаю, что именно они ...

Где я должен прикрепить способ оплаты к клиенту? В документах я должен получить способ оплаты от объекта PaymentIntent, но он есть у клиента или сервера.

https://stripe.com/docs/payments/payment-intents/migration#saving -cards-checkout

Из документы:

$payment_method = \Stripe\PaymentMethod::retrieve('{{PAYMENT_METHOD_ID}}');
$payment_method->attach(['customer' => '{{CUSTOMER_ID}}']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...