Python 将现有卡/源附加到新客户

Python 将现有卡/源附加到新客户,python,stripe-payments,Python,Stripe Payments,我有以下情况: 用户可以预订房间 有可能是客人预订了一个房间,而没有做任何说明。在这种情况下,我在没有客户的情况下创建了条带费用 用户在预订过程中可能决定创建一个帐户。在本例中,我还创建了一个stripe customer 我需要什么 如果用户决定创建帐户: 我想使用用户输入的信用卡,用于创建费用,并将信用卡附加到客户,以便用户可以在其个人资料中查看其信用卡,并选择/使用其进行未来预订 问题: 在创建客户之前创建条带费用。因此,我需要获取来源并将其附加到客户。(我已经成功地更新了费用并添加了

我有以下情况:

  • 用户可以预订房间

  • 有可能是客人预订了一个房间,而没有做任何说明。在这种情况下,我在没有客户的情况下创建了条带费用

  • 用户在预订过程中可能决定创建一个帐户。在本例中,我还创建了一个stripe customer

我需要什么

如果用户决定创建帐户:

我想使用用户输入的信用卡,用于创建费用,并将信用卡附加到客户,以便用户可以在其个人资料中查看其信用卡,并选择/使用其进行未来预订

问题:

在创建客户之前创建条带费用。因此,我需要获取来源并将其附加到客户。(我已经成功地更新了费用并添加了customer.id,但是更新customer的过程不起作用。)

更新客户来源给了我:

Cannot use stripe token more than once
到目前为止我所尝试的:

从费用中获取卡的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\u source\u id.data
包含一个
tok\u 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'
    }
)
在文档中,我提到如果附加/更新了客户来源,则会创建一个新来源,但这意味着无法将现有来源附加到客户?那不可能是真的

元素返回的令牌或源的ID。传递源 将创建一个新的源对象,使其成为新的客户默认值 源,并删除旧客户默认值(如果存在)


一旦卡令牌已用于收费,就无法向客户添加卡。您可以将来源添加到客户并使用该来源进行收费,也可以要求客户在开立帐户时重新输入其付款信息

出现这种情况的原因之一是为了保护客户卡数据。受限制的流量使得中间条带平台(如Shopify)更容易防止商家在违背客户意愿的情况下滥用存储卡的详细信息


如果您坚持使用您描述的流程,这里有一个可能的解决方法:当有人输入卡信息时,创建一个虚拟客户并收取费用。然后,如果他们开立账户,则将其信息与客户关联。然而,管理和删除这些无关的虚拟客户将是额外的工作。

昨天就想出来了,有趣的是,你的建议与我的想法相同。它已经实施。我决定保留虚拟客户,我只是在下面添加了一个元数据注释:这个客户是匿名的还是有身份证。谢谢你的回复。