为什么在发票创建返回之前对条带收费

时间:2018-02-13 19:01:04

标签: python-3.x stripe-payments

在将用户注册到订阅时,如果用户在我的系统中有信用,我想收取不同的费率。但是,当用户注册订阅时,Stripe会立即向他们收费,而不是等待我改变发票创建的webhook上的发票对象。

我对文档的理解是,向用户收费将等到发票创建返回200后。但是,我的发票创建webhook正在返回500,所以我知道这不是真的。

我目前的代码如下:

stripe.Subscription.create(
    customer=user.stripe_customer_id,
    plan=subscription_plan.stripe_product_id,
    trial_period_days=trial_period,
    idempotency_key=key)

我的webhook看起来像:

def invoice_created(request, *args, **kwargs):
    user = request.user
    invoice = request.data['data']['object']
    stripe_customer = stripe.Customer.retrieve(user.stripe_customer_id)

    if request.user.credit:
        stripe_customer.add_invoice_item(
            amount=-user.credit,
            currency='usd',
            description='Applied ${:.2f} of credit for subscription.'.format(user.credit),
            invoice=invoice['id'],
        ) 

     return Response(status=200)

当我尝试更新发票时,表示无法修改发票。我得到的错误是:

stripe.error.InvalidRequestError: Request "": Invalid invoice: This invoice is no longer editable

我应该在这做什么?

1 个答案:

答案 0 :(得分:2)

  

我基于这些文档的理解是,向发票用户收费将等到发票创建返回200后。

first Invoice of a Subscription并非如此,我们会立即收费。

如果要在第一个项目中添加项目,则需要create the Invoice Items on the Customer first,然后才能创建订阅。