我正在使用Stripe Checkout。在我能找到的所有文档中,Stripe建议在我与该客户的第一次交易中保存Customer
信息(包括默认Source
),并在我想要创建时使用该默认Source
后续的Charge
。但是,如果客户在后续Checkout交易中使用其他信用卡,则对默认Source
收取费用是错误的。
因此,在进行后续更改时,我似乎应该始终只使用来自stripe.js的令牌,并且每当我使用与默认源不同的卡检测到它们时,我应该为客户创建新的源。
但是,在我的测试中,似乎我从stripe.js获得的每个令牌都代表一张独特的卡片,即使我使用了相同的信用卡号,有效期和CVC。如果我要为每个Checkout令牌创建一张新卡并将其保存到客户记录中,我可能最终会为每位客户提供大量重复卡记录。
我是否忽略了以不会产生重复的方式将stripe.js令牌与客户关联的方法?或者我不正确地解决这个问题?
答案 0 :(得分:1)
每当您在Checkout中收集卡片详细信息时,即使他们使用相同的卡片详细信息,Stripe也会为该卡片创建新的令牌。 Token资源虽然有fingerprint
property。
该属性是您帐户中指定卡号的唯一标识符。这意味着,如果我今天用我的卡注册,然后我明天用同一张卡在不同的电子邮件地址回来,你会在令牌或卡片对象上看到相同的指纹。然后,我们的想法是跟踪您在数据库中看到的所有卡指纹,以检测返回的客户。每当客户添加新卡时,您首先要查看您之前是否在数据库中看过该卡指纹并决定创建客户或根据此返回错误。
另外,您不应该为已经保存了卡的客户提供Checkout。相反,您应该向他们展示可用的卡片,例如通过显示卡片品牌和最后4位数字。然后,客户可以使用其中一张卡付款或添加新卡。
您可以向客户添加多张卡或替换默认卡。您还可以通过传递customer
中的客户ID和source
中的卡ID来决定要收取哪张卡。这些都在Stripe的文档here中详细介绍。