Laravel Cashier - $stripeToken 来自哪里?

Posted

技术标签:

【中文标题】Laravel Cashier - $stripeToken 来自哪里?【英文标题】:Laravel Cashier - where does $stripeToken come from? 【发布时间】:2018-11-22 23:02:07 【问题描述】:

Laravel Cashier 上的 documentation 非常模糊,并且遗漏了一些非常重要的细节,例如 $stripeToken 是什么以及它来自哪里?

所以要创建一个新订阅,我们这样做:

$user->newSubscription('main', 'premium')->create($stripeToken);

这是用户第一次订阅,那么$stripeToken 究竟来自哪里?

在文档中它说:

create 方法,它接受 Stripe 信用卡/源令牌, 将开始订阅并使用 客户 ID 和其他相关帐单信息。

这是否意味着我必须先在 Stripe 中手动创建客户对象,然后将客户 ID 作为 $stripeToken 传递?它提到了卡的详细信息,但我如何通过它们?格式是什么?我期望得到什么回报?

如果$stripeToken 是 Stripe 中的客户 ID,那么 Cashier 会假设我们已经在 Stripe 中创建了客户,但我们不会第一次这样做。

有人能解释一下吗?

【问题讨论】:

如果你使用Stripe Checkout JS,它会自动在表单中添加一个隐藏的输入stripeToken @thefallen 如果您不使用 Stripe JS 怎么办?假设您正在制作基本的 REST API 驱动的结帐表单? 【参考方案1】:

原来stripeToken通常是stripe.js表单提交时生成的。

由于我使用的是 API 驱动的结帐表单而不是标准的 html 提交表单,因此我需要使用 Stripe API 根据提供的卡详细信息创建令牌。

$stripeToken = Token::create(array(
                       "card" => array(
                           "number"    => $request->get('number'),
                           "exp_month" => str_before($request->get('expiry'), '/'),
                           "exp_year"  => str_after($request->get('expiry'), '/'),
                           "cvc"       => $request->get('cvc'),
                           "name"      => $request->get('name')
                       )
                   ));

然后我使用$stripeToken->id 并通过它:

$user->newSubscription('main', 'premium')->create($stripeToken->id);

【讨论】:

从哪里获得这个令牌 (Token::create()) 我正在使用 Braintree,但我无法为 Braintree 找到此解决方案。关于 Braintree 的 $token 没有太多信息。谁能解释一下这个问题 @YasirIjaz 令牌来自 Stripe API 命名空间【参考方案2】:

您可以使用Stripe JS 获取stripeToken,但如果您使用的是自定义表单,则可以使用Stripe checkout 方法。

使用这两种方式,您将在 javascript 中获取 stripeToken,然后您必须将此令牌传递给您的 REST API 以进行进一步处理。

【讨论】:

不,我没有使用 Stripe JS。我正在使用 API 驱动的结帐,因此它不是可以使用 JS 的标准结帐表单。 JS 库在这种情况下是多余的,可能会添加更多不需要的资源。有关 API 驱动表单的更合适的解决方案,请参阅我的答案。

以上是关于Laravel Cashier - $stripeToken 来自哪里?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Cashier - 使用现有客户对象创建新订阅

Laravel Cashier - 更新订阅的付款方式

Laravel Cashier - updateCard() - 指导

无需订阅即可使用 Laravel Cashier 一次性付款

Laravel Cashier SCA 订阅返回不完整的订阅

Laravel 7.0 Cashier - 条纹支付异常