簡體   English   中英

條紋訂閱測試

[英]Stripe Subscription Testing

我正在嘗試使用條紋創建每月訂閱。

我寫了一個這樣的示例代碼

            if event_type == 'checkout.session.completed':
            # Payment is successful and the subscription is created.
            # You should provision the subscription and save the customer ID to your database.
            try:
                session = stripe.checkout.Session.retrieve(
                    event['data']['object'].id, expand=['line_items', 'subscription'])
                _current_period_end = session['subscription']['current_period_end']
                _current_period_start = session['subscription']['current_period_start']
                _product_id = session['subscription']['items']['data'][0]['plan']['product']
                _user_id = session['client_reference_id']
                _stripe_customer_id = session['customer']
                _subscription_id = session["subscription"]['id']
                '''
                do other things to update user package
                '''

            except Exception as e:
                '''
                error log
                '''
        elif event_type == 'invoice.paid':

                if THIS_IS_NOT_FIRST_TIME:
                    parse_event_data
                    '''
                    do other things to extend subscription
                    '''

我有一些問題;

  1. 我從從 stripe.checkout.Session.retrieve object 返回的字典中解析了 web 鈎子結果。 我覺得有點奇怪。 如果條帶更新他的 API 響應並為我使用的 dict 鍵使用不同的名稱怎么辦? 是否有另一種方法來獲取這些值,例如使用點表示法(session.get.product_id)?

  2. 我如何理解第一次訂閱未觸發 invoice.paid 事件?

  3. 我想測試我的每月訂閱的續訂過程。 我使用了條帶觸發器 invoice.payment_succeeded 但我需要我的測試帳戶的真實數據(測試客戶、訂閱、產品等......)

  4. I can update my user package with using CHECKOUT_SESSION_ID from checkout success url ("success?session_id={CHECKOUT_SESSION_ID}). Should i do that or use checkout.session.completed web hook?

  5. 我剛剛返回 HTTP 500 響應對我的 webhook URL 的每個請求,以查看 STRIPE 是否在結帳頁面向用戶顯示錯誤消息。 但是,STRIPE 剛剛創建了一個成功的訂閱。 在這種情況下,STRIPE 將從我的客戶那里收取款項,但是即使我無法在我的數據庫中更新我的客戶 package。 我應該怎么做才能防止這個問題? 我應該創建一個計划作業來在 STRIPE 和我的數據庫之間同步數據嗎?

您有許多單獨的問題更適合直接向 Stripe 的支持團隊提問: https://support.stripe.com/contact/email

現在我將嘗試談談您從第一個問題開始提出的一些問題。

When you call session = stripe.checkout.Session.retrieve(...) you get back a class that is a Checkout Session . class map 的所有屬性到 API 參考Z71C7AE294B7ABD866B3FB295B3B中涵蓋的屬性。 這意味着您可以執行session.id這是cs_test_123session.created這是創建日期的時間戳。 這與整體上作為字典訪問並沒有什么不同。

您還詢問這些是否可以更改,Stripe 在此處的文檔中詳細解釋了他們的向后兼容性政策。 如果他們要將名稱從created更改為created_at ,他們將在新的 API 版本中進行新的集成,並且除非您手動更改您帳戶的 API 版本,否則不會影響您的代碼,這樣是安全的。

對於invoice.paid事件,您要查看發票的billing_reason 屬性,該屬性將是第一張發票的subscription_create

您可以在測試模式下輕松測試所有這些,創建 session,開始訂閱等。您還可以模擬周期變化。

我希望這會有所幫助,但與他們的支持團隊聊天是你最好的選擇,因為這些是更多的集成問題,而不是編碼問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM