我有以下情况:
用户可以预订房间。
客人可能没有预订账户就预订了房间。在这种情况下,我会在没有客户的情况下创建条纹收费
用户可能在预订过程中决定创建一个帐户。在这种情况下,我还创建了一个条纹客户。
我需要的
如果用户决定创建一个帐户:
我要提取用户输入的信用卡,该信用卡用于创建费用并将该信用卡附加到客户,因此用户可以在其个人资料中查看其信用卡,并选择/将来使用预订。
问题:
在创建客户之前创建了条带费。因此,我需要拿货源并将其附加到客户身上。 (我已经可以成功更新费用并添加customer.id,但是相同的过程对更新客户无效。)
更新客户来源给了我
Cannot use stripe token more than once
到目前为止我尝试过的事情:
从收费中获取card_id
ch_ch = stripe.Charge.retrieve(new_booking.stripe_charge_id)
customer.sources.create(card=ch_ch.source.id)
customer.save()
使用源ID
customer.sources.create(source=form.stripe_source_id.data)
不同的语法
customer.source = form.stripe_source_id.data
customer.save()
注意:form.stripe_source_id.data
包含一个tok_1DEvMCGd8vfeewZVgrSRu4
,它在创建信用卡元素时由stripe.js返回。这是用来创建费用的,它可以完美工作:
stripe_charge = stripe.Charge.create(
amount=int(float(data_received['total_price']) * 100),
currency="eur",
source=form.stripe_source_id.data,
description=None,
#customer=user_id, # customer is anonymous
capture=False, # if False the charge needs to be captured, otherwise it will expire in 7 days and is refunded
#receipt_email='email für den typer, der die rechnung kriegt, funktioniert nur im livemode',
metadata={
'infos': 'process stripe payment anonymous charge'
}
)
在文档中,我红色表示如果附加/更新了客户资源,则创建了一个新资源,但这意味着不可能将现有资源附加到客户吗?那不可能是真的。
由Elements返回的令牌或源ID。传递源 将创建一个新的源对象,使其成为新的客户默认值 源,并删除旧的客户默认值(如果存在)。
答案 0 :(得分:1)
一旦已使用卡令牌进行收费,就无法将卡添加到客户。您可以将货源添加到客户并使用该货源进行收费,也可以要求客户在开设帐户时重新输入其付款信息。
这种情况的原因之一是保护客户卡数据。受限制的流量使中间的基于Stripe的平台(例如Shopify)更容易防止商家滥用,从而违反了客户的意愿保存卡的详细信息。
如果您坚持要遵循所描述的流程,则可以采用以下解决方法:当有人输入卡信息时,请创建一个虚拟客户并向其收费。然后,如果他们注册了帐户,则将其信息与客户关联。但是,管理和删除这些无关的虚拟客户将是额外的工作。