条纹python将现有卡/来源附加到新客户

时间:2018-09-27 09:18:52

标签: python stripe-payments

我有以下情况:

  • 用户可以预订房间。

  • 客人可能没有预订账户就预订了房间。在这种情况下,我会在没有客户的情况下创建条纹收费

  • 用户可能在预订过程中决定创建一个帐户。在这种情况下,我还创建了一个条纹客户。

我需要的

如果用户决定创建一个帐户:

我要提取用户输入的信用卡,该信用卡用于创建费用并将该信用卡附加到客户,因此用户可以在其个人资料中查看其信用卡,并选择/将来使用预订。

问题:

在创建客户之前创建了条带费。因此,我需要拿货源并将其附加到客户身上。 (我已经可以成功更新费用并添加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。传递源   将创建一个新的源对象,使其成为新的客户默认值   源,并删除旧的客户默认值(如果存在)。

1 个答案:

答案 0 :(得分:1)

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

这种情况的原因之一是保护客户卡数据。受限制的流量使中间的基于Stripe的平台(例如Shopify)更容易防止商家滥用,从而违反了客户的意愿保存卡的详细信息。

如果您坚持要遵循所描述的流程,则可以采用以下解决方法:当有人输入卡信息时,请创建一个虚拟客户并向其收费。然后,如果他们注册了帐户,则将其信息与客户关联。但是,管理和删除这些无关的虚拟客户将是额外的工作。