API 物件
寫 Python 時你一直在建立與讀取這些物件。名字記熟,文件就好查。
商品目錄
- Product:賣什麼,例如「Python 入門課」。
- Price:賣多少、什麼幣、是否每月扣款。同一個 Product 可以有 TWD 與 USD 兩種 Price。
Checkout 的 line_items 通常帶 price(Dashboard 上的 price_...)或當場用 price_data 組出來。
顧客與付款方式
- Customer:你的買家在 Stripe 的檔案,訂閱與保存卡片會用到。
- PaymentMethod:一張卡或一種錢包,由 Stripe.js 建立,敏感資料不會進你的資料庫。
一次性賣東西不一定要先建 Customer。需要「記住這個人、之後再扣款」時再建立。
這一筆交易
- Checkout Session:一次結帳過程。裡面有商品列、成功/取消網址,完成後會帶出 PaymentIntent 或 Subscription。
- PaymentIntent:一筆付款的生命週期:建立 → 收集付款方式 → 可能要 3DS →
succeeded或失敗。金額在建立時就鎖定。 - Charge(較舊):實際請款紀錄。新程式請看 PaymentIntent 與其下的 Charge,不要再對
/v1/charges寫新流程。
本 repo 的 server.py 根路徑呼叫 stripe.Charge.list,只是示範讀取資料,不是現在推薦的收款寫法。收款請用 Checkout 或 PaymentIntent。
履約相關
- Event:Stripe 推到 webhook 的訊息,例如
checkout.session.completed。 - Refund:退款。
- Invoice / Subscription:帳單與訂閱,見 訂閱。
狀態只信 Stripe
訂單在你資料庫裡可以有 pending / paid。是否已付款,以 Stripe 物件狀態為準:
- Checkout Session:
payment_status == "paid" - PaymentIntent:
status == "succeeded"
成功頁的 query string 只能拿來顯示「謝謝」,不能當出貨依據。