2016-07-13 27 views
4

我有以下python代碼來創建條帶電荷。似乎無法使用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

然而,somelongstringhere確實是我的條紋儀表板下方的收費內容的ID。那麼Stripe怎麼會無法取回這個費用呢?這是不是正確的ID?

回答

4

充電檢索調用失敗的原因是因爲充電是在一個不同的帳戶創建。

當您創建充電:

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

更一般地,當你已經有一個條紋對象的實例,並希望從API獲得最新的狀態,您可以使用refresh()方法:

a_charge.refresh() 

這將查詢API(沒有你不必擔心stripe_account參數 - 實例「記住」它並將在後臺使用它),並使用從API檢索的值刷新實例的屬性。

1

爲什麼您需要在創建費用後立即執行stripe.Charge.retrieve(a.charge.id)而您已經擁有a_charge之內的數據?

有可能將數據緩存和/或廣播到多個服務器/數據庫。新創建的數據可能需要幾秒鐘才能閱讀。

+0

我實際上並不想直接執行此操作 - 原本我是在不同的功能中執行此操作,但它無法工作,因此我將代碼更靠近一起。但是,我不認爲這是問題,因爲當我使用stripe.charge.list()時,實際上看到的是不同的id,而不是返回的 - 是否有任何可能發生的原因? – wcai

+0

返回的ID是什麼?至少,前綴是什麼? –

1

您在此處使用的代碼是直接在連接的Stripe帳戶上創建費用。這包括在Stripe的文檔here中。

由於費用在關聯帳戶上,因此它不存在於您自己的Stripe帳戶上,並且預計您無法直接檢索它。爲此,您需要再次通過Stripe-Account標題,如here所述。

你的代碼應該改爲

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