带有订阅的条带化付款请求按钮

问题描述 投票:2回答:1

我真的很疲倦,无法寻找所需的信息,希望对您有所帮助。另外,我已经写信给Stripe支持人员,但目前与他们的沟通非常困难。

让我们从头开始。

我与Laravel Cashier一起使用Stripe订阅。

我已经用信用卡/借记卡完成了付款。它具有这样的工作流程:-用户填写表格;-Stripe.js将填充的数据发送到Stripe服务器并返回paymentMethod;-然后,我将PaymentMethod发送到我的服务器,并为有/无试用日期的用户进行订阅。

我需要添加Google pay和Apple pay按钮。根据有关Google payApple pay的Stripe文档,我必须创建Payment Request Button。据我了解有关付款请求按钮的文档,它通过这种方式工作:-服务器端创建payingIntent并将其发送到客户端;-用户按下“付款请求”按钮;-浏览器打开一个带有已保存用户卡的弹出窗口;-用户选择一张卡,stripe.js立即向用户收费。

我不知道在哪个步骤中,条带知道用于为用户订阅的计划ID。

我不需要立即向用户收费,我只需要获取paymentMethod即可将其发送到服务器端。有没有人有使用“付款请求”按钮进行Stripe订阅的经验?

非常感谢您的帮助。

php button request payment stripe-subscriptions
1个回答
0
投票

这是我的做法。 我在客户端和服务器上使用了JS,但是即使语法不同,大多数情况下步骤也是相同的。 文献很少,我想我可以帮忙。即使完全不同,大多数逻辑也应该相同。特别地:

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:您使用客户通过条带创建了一个“ Subscription”对象,我是这样做的

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

3:上一步应能完成Stripe所需的一切。此时,我有一些自己的用户管理代码来跟踪我的用户是否订阅。然后,是否返回成功-在前端调用的函数,现在调用event.complete('success')

完成

我希望能有所帮助。抱歉,它不是PHP,但希望它是一个开始。

© www.soinside.com 2019 - 2024. All rights reserved.