Stripe Checkout:使用保存的源与新令牌创建费用

Stripe Checkout: Using saved Source vs a new token to create a Charge

我正在使用 Stripe Checkout。在我能找到的所有文档中,Stripe 建议在我与该客户的第一次交易中保存 Customer 信息(包括默认值 Source),并在以后我想创建时使用该默认值 Source随后的 Charge 秒。但是,如果客户在后续结账交易中使用不同的信用卡,则收取默认值 Source.

是错误的

所以,在进行后续更改时,似乎我应该始终只使用来自 stripe.js 的令牌,并且每当我检测到客户使用不同于默认来源。

然而,在我的测试中,我从 stripe.js 获得的每个令牌似乎都代表一张独特的卡,即使我使用了相同的信用卡号、有效期和 CVC。如果我要为每个 Checkout 令牌创建一张新卡并将其保存到客户记录中,我最终可能会得到每个客户的大量重复卡记录。

我是否忽略了一种以不生成重复项的方式将 stripe.js 令牌与客户相关联的方法?还是我做错了?

每当您在 Checkout 中收集卡片详细信息时,Stripe 都会为该卡片创建一个新令牌,即使它们使用相同的卡片详细信息也是如此。 Token resource has the fingerprint property 虽然。

属性 是您帐户中给定卡号的唯一标识符。这意味着如果我今天用我的卡注册,然后明天我用不同的电子邮件地址用同一张卡回来,你会在令牌或卡对象上看到完全相同的指纹。然后的想法是跟踪您在数据库中看到的所有卡指纹,以检测 returning 客户。每当客户添加一张新卡时,您首先会查看您之前是否在数据库中看到过该卡指纹并决定创建客户或 return 基于此的错误。

另外,您不应为已经保存银行卡的客户提供结账服务。相反,您应该向他们展示可用的卡,例如通过显示卡品牌和最后 4 位数字。然后客户可以使用其中一张卡付款或添加一张新卡。

您可以为一位客户添加多张卡或更换默认卡。您还可以通过在 customer 中传递客户 ID 和在 source 中传递卡 ID 来决定对哪张卡收费。 Stripe 的文档 here.

中详细介绍了所有这些内容