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 - updateCard() - 指导
无需订阅即可使用 Laravel Cashier 一次性付款