使用 Stripe 收集信用数据,接收令牌,然后开始并支付订阅费用

Posted

技术标签:

【中文标题】使用 Stripe 收集信用数据,接收令牌,然后开始并支付订阅费用【英文标题】:Use Stripe to collect credit data, receive a token, then start and pay for a subscription 【发布时间】:2017-04-25 04:01:54 【问题描述】:

我开始使用 Stripe 的自定义表单为我们的订阅网站开发支付系统:https://stripe.com/docs/custom-form。我有一个开发站点,当有人选择订阅时,它会弹出一个表单来收集信用卡数据,将该数据提交给 Stripe,然后 Stripe 会发回一个令牌。

在底部的“后续步骤”中,似乎表明我可以使用此令牌为用户注册订阅。但是,subscription page 没有显示在创建订阅时如何使用该令牌。从该页面可以看出,在创建订阅后,Stripe 将创建发票并将其通过电子邮件发送给用户。

我真的很想直接在网站上处理第一笔付款,而不是在电子邮件流中丢失用户。我认为可以做到,但我找不到例子。如何使用收集的信用卡中的 Stripe 令牌向用户收取第一期订阅​​费用?创建订阅的唯一代码是:

Stripe::Subscription.create(
  :customer => customer.id,
  :plan => "basic-monthly",
)

哪个不传递令牌。我在哪里传递令牌?

【问题讨论】:

我能找到的最接近的解决方案来自Stripe Error: 'Token is Not Supported' when trying to sign up to subscription 似乎source: stripeToken.id 可以在 somewhere 中传递(但我不确定在哪里)。 【参考方案1】:

创建订阅时,令牌可以作为source 属性传递:

Stripe::Subscription.create(
  :customer => customer.id,
  :plan => "basic-monthly",
  :source => token,
)

我最终会为现有客户这样做。由于我正在再次收集他们的信用卡信息,这允许 Stripe 使用他们刚刚输入的任何内容。

对于新客户,在创建客户时设置来源字段。与客户一起存储的付款来源最终会在创建订阅时使用。

您不能使用源令牌创建客户,然后在订阅中也使用相同的令牌。我发现 Stripe 认为这是在重复使用令牌,它会引发异常。您必须有条件地在一个地方或另一个地方使用它,具体取决于客户是否是新创建的。

【讨论】:

【参考方案2】:

您需要将令牌用于create a customer object,然后您可以将生成的客户对象用于create the subscription。

本教程解释了使用 Stripe 的订阅流程:https://stripe.com/docs/subscriptions/quickstart。

【讨论】:

是的,我已经做到了。但是,该文档没有说明如何传递我在此过程之前已经收集的信用卡详细信息。当我创建客户并创建订阅时,如何使用信用卡令牌来标记已支付的发票? 您在客户创建请求中使用令牌(通过在source 参数中传递它)。令牌包含所有卡的详细信息,因此当您使用它创建客户时,生成的客户对象会将卡作为其默认付款来源。

以上是关于使用 Stripe 收集信用数据,接收令牌,然后开始并支付订阅费用的主要内容,如果未能解决你的问题,请参考以下文章

条纹支付:来源与令牌/卡?

无法将信用卡添加到 Stripe 上的托管帐户

使用 Stripe on Rails 免费订阅 - 无需卡即可获得令牌

将 csrf 令牌传递给 Stripe

Android中的Stripe集成,之后该怎么办?

Omnipay-Stripe 将信用卡详细信息从表单存储到数据库