我真的很累寻找我需要的信息,希望能得到你的帮助。
另外,我已经写信给 Stripe 支持,但目前与他们的沟通非常困难。
让我们从头开始。
我将 Stripe 订阅与 Laravel Cashier 一起使用。
我已经用信用卡/借记卡完成了付款。它有这样一个工作流程:
- 用户填写表格;
- Stripe.js 将填充的数据发送到 Stripe 服务器并返回 paymentMethod;
- 然后我将 paymentMethod 发送到我的服务器,并为有/没有试用日的用户进行订阅。
我需要添加谷歌支付和苹果支付按钮。
根据关于 Google pay 的 Stripe 文档和 Apple pay ,我必须创建 Payment Request Button .
据我了解有关付款请求按钮的文档,它以这种方式工作:
- 服务器端创建 paymentIntent 并将其发送到客户端;
- 用户按下支付请求按钮;
- 浏览器打开一个包含已保存用户卡片的弹出窗口;
- 用户选择一张卡片,stripe.js 会立即向用户收费。
我不明白在什么步骤条上知道为用户订阅的计划 ID。
我不需要立即向用户收费,我只需要获取 paymentMethod 即可将其发送到服务器端。
有没有人有使用付款请求按钮进行 Stripe 订阅的经验?
我将非常感谢您的帮助。
最佳答案
这就是我的做法。 我在客户端和服务器上使用了JS ,但在大多数情况下,即使语法不同,步骤也是相同的。 关于它的文档很少 - 我想我会看看我是否可以提供帮助。 即使完全不同,大部分逻辑应该是相同的。具体来说:Frontend returns paymentRequest -> Server-takes-paymentRequest -> customer -> subscription -> Done
首先,您不需要对前端的支付意图做任何事情。我被挂断了一段时间。
接下来,使用 stripe.paymentRequest()
开始一切。它需要一些付款细节,并返回一个“PaymentRequest”对象..
在这里,您根据 PaymentRequest.canMakePayment() 处理按钮的呈现
接下来是当他们点击支付按钮时我的处理方式。
paymentRequest 有一个 paymentmethod
事件监听器。
函数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:您使用付款方式从 strip 创建一个“客户”对象。我用过类似的东西
const customer = await stripe.customers.create({
payment_method: paymentMethod.id,
email: paymentMethod.billing_details.email,
invoice_settings: {
default_payment_method: paymentMethod.id,
},
});
2:您使用客户从 strip 创建一个“订阅”对象,我是这样做的 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,但希望这是一个开始。
关于php - 带有订阅的 Stripe 付款请求按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60865022/