Stripe賬單流程解析:應(yīng)用內(nèi)確認(rèn)與托管付款頁(yè)的決策邊界)
vm0OkouStripe賬單流程解析應(yīng)用內(nèi)確認(rèn)與托管付款頁(yè)的決策邊界【免費(fèi)下載鏈接】okouOkou connects to the tools your team already uses and does the work — across marketing, sales, engineering, and operations, under your control.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/vm/okouOkouvm0 項(xiàng)目通過 Stripe 完成訂閱與付費(fèi)其賬單系統(tǒng)最容易被新手忽略的一點(diǎn)是在應(yīng)用內(nèi)確認(rèn)付款I(lǐng)n-App Confirm與Stripe 托管付款頁(yè)Hosted Checkout之間如何選擇。本文帶你用 5 分鐘看懂這套 Stripe 賬單流程什么時(shí)候走托管結(jié)賬頁(yè)、什么時(shí)候直接在應(yīng)用內(nèi)確認(rèn)、成功后如何回跳以及本地開發(fā)時(shí)如何用 Stripe CLI 轉(zhuǎn)發(fā) Webhook 事件。一、先看全景一次購(gòu)買在 Okou 里會(huì)發(fā)生什么把 Okou 的賬單流程想象成一家餐廳的兩種點(diǎn)餐方式堂食托管付款頁(yè)把客人帶到 Stripe 收銀臺(tái)輸卡、驗(yàn)證、扣款全部由 Stripe 完成結(jié)束后再送回你的餐廳。打包帶走應(yīng)用內(nèi)確認(rèn)如果客人之前已經(jīng)存過付款方式你直接在店里刷卡完成不用再去收銀臺(tái)排隊(duì)。Okou 在后端對(duì)每種購(gòu)買類型套餐升級(jí)、并發(fā)訂閱、充值包等都會(huì)先做一次路由判定結(jié)果只有兩種路由結(jié)果含義用戶看到的界面checkout走 Stripe 托管結(jié)賬頁(yè)跳轉(zhuǎn)到 Stripe Checkout 頁(yè)面preview走應(yīng)用內(nèi)預(yù)覽 確認(rèn)應(yīng)用內(nèi)展示訂單預(yù)覽一鍵確認(rèn)付款這個(gè)判定邏輯集中在支付路由服務(wù)里路由判定與付款方式狀態(tài)billing-payment-method.service.ts創(chuàng)建結(jié)賬會(huì)話與確認(rèn)購(gòu)買billing-checkout.service.ts二、應(yīng)用內(nèi)確認(rèn)什么條件下可以店里直接刷卡應(yīng)用內(nèi)確認(rèn)并不是隨時(shí)可用的它的前提是這個(gè)組織org在 Stripe 里已經(jīng)有一個(gè)可用的默認(rèn)付款方式。判定順序大致是優(yōu)先看組織名下訂閱的默認(rèn)付款方式?jīng)]有訂閱則看 Stripe Customer 的invoice_settings.default_payment_method都找不到就回退到托管結(jié)賬頁(yè)。對(duì)應(yīng)代碼見billingDefaultPaymentMethodStatus當(dāng)路由判定結(jié)果為preview時(shí)ready才為 true說(shuō)明應(yīng)用內(nèi)確認(rèn)已就緒見 billing-payment-method.service.ts。確認(rèn)階段還有一個(gè)小細(xì)節(jié)應(yīng)用內(nèi)確認(rèn)前先簽發(fā)出一個(gè)帶過期時(shí)間的預(yù)覽令牌preview token防止預(yù)覽價(jià)格和最終扣款金額之間出現(xiàn)時(shí)間差漏洞。相關(guān)實(shí)現(xiàn)在 billing-purchase-preview-token.service.ts。三、托管付款頁(yè)checkout 會(huì)話與回跳地址走托管結(jié)賬頁(yè)時(shí)后端會(huì)為這次購(gòu)買創(chuàng)建一個(gè) Stripe Checkout Session成功后再帶著 checkout 會(huì)話 ID 回跳到 Okou。這里有兩個(gè)值得新手注意的安全設(shè)計(jì)成功/取消回跳地址白名單回跳 URL 由客戶端傳入并直達(dá) Stripe為防止開放重定向與會(huì)話 ID 泄漏Okou 只允許回跳到自己持有的域名okou.ai及其子域、staging/預(yù)覽域名等。見 billing-redirect.ts。冪等鍵idempotency key創(chuàng)建結(jié)賬會(huì)話時(shí)支持傳入冪等鍵網(wǎng)絡(luò)重試不會(huì)創(chuàng)建重復(fù)的購(gòu)買。購(gòu)買完成后的賬務(wù)收尾把發(fā)票落到業(yè)務(wù)庫(kù)、更新組織套餐與權(quán)益分別由這些服務(wù)負(fù)責(zé)發(fā)票對(duì)賬billing-operation-invoice.service.ts訂閱與權(quán)益org-plan-entitlements.service.ts四、Webhook真正的支付成功通知從哪來(lái)托管結(jié)賬頁(yè)和應(yīng)用內(nèi)確認(rèn)共用同一套事件驅(qū)動(dòng)收尾Stripe 把checkout.session.completed、invoice.paid、customer.subscription.updated等事件推給 Webhook 端點(diǎn)由 webhooks-stripe.service.ts 統(tǒng)一消費(fèi)再觸發(fā)權(quán)益開通、發(fā)票入賬等動(dòng)作。本地開發(fā)時(shí)怎么收事件倉(cāng)庫(kù)自帶了一套 Ansible 方案可以在開發(fā)機(jī)上按 PR 啟動(dòng)一個(gè) Stripe CLI 監(jiān)聽進(jìn)程把測(cè)試模式事件轉(zhuǎn)發(fā)到你的預(yù)覽 API啟動(dòng)監(jiān)聽器start-stripe-listener.yml清理監(jiān)聽器cleanup-stripe-listener.yml本地環(huán)境準(zhǔn)備腳本ensure-stripe-cli.sh監(jiān)聽器會(huì)精確訂閱 4 個(gè)事件checkout.session.completed、invoice.paid、customer.subscription.updated、customer.subscription.deleted并按job_ref隔離每個(gè) PR 的目錄與 systemd 服務(wù)互不干擾。五、決策邊界速查表場(chǎng)景走哪條路原因首次購(gòu)買套餐托管付款頁(yè)無(wú)已存付款方式老用戶續(xù)費(fèi)/升級(jí)應(yīng)用內(nèi)確認(rèn)有默認(rèn)付款方式體驗(yàn)更快付款方式被拒或過期托管付款頁(yè)兜底保證可完成交易預(yù)覽令牌過期重新發(fā)起預(yù)覽防止價(jià)格不一致扣款回跳地址不在白名單直接拒絕防開放重定向與會(huì)話 ID 泄漏六、延伸閱讀端到端測(cè)試入口與 API 輔助腳本e2e/其中 API 輔助見 runner-api.bash賬單相關(guān)服務(wù)目錄turbo/apps/api/src/signals/services/測(cè)試規(guī)范了解這套測(cè)試如何組織docs/testing.md 一句話總結(jié)Okou 的 Stripe 賬單 路由判定應(yīng)用內(nèi)確認(rèn) or 托管頁(yè) 預(yù)覽令牌 白名單回跳 Webhook 收尾??炊@四塊你就能在 vm0 代碼庫(kù)里自由穿梭任何一條訂閱/扣款鏈路了。【免費(fèi)下載鏈接】okouOkou connects to the tools your team already uses and does the work — across marketing, sales, engineering, and operations, under your control.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/vm/okou創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考