似乎无法使用python检索条带电荷

时间:2016-07-13 09:56:57

标签: python django stripe-payments

我有以下python代码来创建条带中的费用。

a_charge = stripe.Charge.create(
amount=cents, 
currency="usd",
source=token,
description="my_description",
application_fee=application_fee,
stripe_account=teacher_stripe_id
)

这成功(我认为),因为它在我的仪表板中显示有charge_id。 但是,在代码之后,紧随其后的是:

stripe.Charge.retrieve(a_charge.id)

有错误:     没有这样的费用:somelongstringhere

然而,某些字符串确实是我的条带仪表板上的ID详细信息。那么为什么Stripe无法收回这笔费用呢?这不是正确的身份吗?

3 个答案:

答案 0 :(得分:5)

费用检索呼叫失败的原因是因为费用是在其他帐户上创建的。

创建费用时:

a_charge = stripe.Charge.create(
  amount=cents, 
  currency="usd",
  source=token,
  description="my_description",
  application_fee=application_fee,
  stripe_account=teacher_stripe_id
)

您使用stripe_account参数,该参数指示库在请求中使用Stripe-Account。这用于告诉Stripe的API,该请求是由您的平台代表其中一个连接帐户发出的。

因此,为了检索费用,您需要使用相同的stripe_account参数:

the_same_charge = stripe.Charge.retrieve(a_charge.id, stripe_account= teacher_stripe_id)

也就是说,在实践中没有什么用处。您已在a_charge中拥有充电对象。如果您执行上述代码,则会发现a_charge == the_same_charge

更一般地说,当您已经拥有Stripe对象的实例并希望从API获取最新状态时,您可以使用refresh()方法:

a_charge.refresh()

这将查询API(您无需担心stripe_account参数 - 实例“记住”它并将在后台使用它)并使用从中检索的值刷新实例的属性API。

答案 1 :(得分:1)

为什么在您已经拥有stripe.Charge.retrieve(a.charge.id)内的数据后,您需要在创建费用后立即执行a_charge

可能将数据缓存和/或广播到多个服务器/数据库。然后,新创建的数据可能需要几秒钟才能读取。

答案 2 :(得分:1)

您在此处使用的代码是直接在已连接的Stripe帐户上创建费用。 Stripe的文档here中介绍了这一点。

由于费用是在已连接的帐户中进行的,因此它不会存在于您自己的Stripe帐户中,并且预计您无法直接检索该帐户。为此,您需要再次传递Stripe-Account标题here

您的代码应该是

the_charge = stripe.Charge.retrieve(
    id=a_charge.id,
    stripe_account=teacher_stripe_id)