Кнопка запроса оплаты Stripe с подписками - PullRequest
2 голосов
/ 26 марта 2020

Я очень устал искать нужную информацию и надеюсь на вашу помощь. Также я написал в службу поддержки Stripe, но сейчас общение с ними очень сложное.

Давайте начнем с самого начала.

Я использую подписки Stripe с Laravel Касса.

Я уже завершил платеж кредитной / дебетовой картой. У него такой рабочий процесс: - пользователь заполняет форму; - Stripe. js отправляет заполненные данные на сервер Stripe и возвращает метод payment; - затем я отправляю PaymentMethod на мой сервер и делаю подписку для пользователя с / без пробных дней.

Мне нужно добавить кнопки Google Pay и Apple Pay. Согласно документам Stripe о Google Pay и Apple Pay , мне нужно создать Кнопка запроса платежа . Как я понимаю документы о кнопке запроса платежа, она работает следующим образом: - на стороне сервера создает paymentIntent и отправляет его на стороне клиента; - пользователь нажимает кнопку «Запрос на оплату»; - браузер открывает всплывающее окно с сохраненными карточками пользователя; - пользователь выбирает карточку и полосу. js мгновенно снимает плату.

Я не могу понять, на какой ступени полоса знает идентификатор плана для подписки для пользователя.

I мне не нужно мгновенно списывать средства, мне нужно просто получить метод оплаты, чтобы отправить его на сервер. У кого-нибудь есть опыт создания подписок Stripe с помощью кнопки «Запрос на оплату»?

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

1 Ответ

0 голосов
/ 26 апреля 2020

Вот как я это сделал. Я использовал JS на клиенте и сервере , но по большей части шаги одинаковы, даже если синтаксис отличается. На нем так мало документации - я подумал, что посмотрю, смогу ли я помочь. Даже если она совершенно другая, большая часть логики c должна быть одинаковой. В частности:

Frontend returns paymentRequest -> Server-takes-paymentRequest -> customer -> subscription -> Done

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

Далее, начиная все, используя stripe.paymentRequest(), который берет некоторые детали платежа и возвращает объект "PaymentRequest" ..

Здесь вы обрабатываете рендеринг кнопка, основанная на PaymentRequest.canMakePayment ()

Далее, как я обрабатываю, когда они нажимают кнопку для оплаты.

У paymentRequest есть метод "on", который в основном является подписчиком. Я думаю, что это называется веб-хук. Он принимает 2 аргумента, строку 'paymentmethod', указывающую, что вы ожидаете, и функцию, которой в качестве аргумента присваивается результат события, например

    stripePaymentRequest.on('paymentmethod', (event) => {
      const paymentMethod = event.paymentMethod

      if (paymentMethod) {
        // call your server and pass it the payment method 
        // for Server side Stripe-API handling of payment
      }

      event.complete('success'); // Completes the transaction and closes Google/Apple pay
    });

Когда вы вызываете сервер, вы можете обработать он аналогичен карточной оплате, поскольку у вас есть способ оплаты.

1: вы создаете объект «Клиент» из полосы, используя метод оплаты. Я использовал что-то вроде

        const customer = await stripe.customers.create({
            payment_method: paymentMethod.id,
            email: paymentMethod.billing_details.email,
            invoice_settings: {
                default_payment_method: paymentMethod.id,
            },
        });

2: вы создаете объект «Подписка» из полосы, используя Customer, я делал это так

        const subscription = await stripe.subscriptions.create({
            customer: customer.id,
            items: [{ plan: "plan_HereIsYourPlanID" }], // <--
            trial_period_days: 7,
            expand: ["latest_invoice.payment_intent"],
        });

3: предыдущий шаг должен быть выполнен sh все что нужно для Stripe. На данный момент у меня есть собственный код управления пользователями, чтобы отслеживать, подписан ли мой пользователь или нет. Затем вы возвращаете успех или нет - той функции, которую вы вызывали во внешнем интерфейсе, и теперь, когда все готово, вы вызываете event.complete ('success')

Надеюсь, это поможет. Извините, это не PHP, но, надеюсь, это начало.

...