訂閱支付:支付巨頭的必爭之地
支付巨頭們紛紛布局訂閱支付領(lǐng)域,試圖通過技術(shù)創(chuàng)新和業(yè)務(wù)拓展來搶占市場份額。本文將深入探討訂閱支付的業(yè)務(wù)流程、風(fēng)控要點、技術(shù)實現(xiàn)方式以及主流支付平臺的接口對比分析,幫助大家全面了解這一支付領(lǐng)域的競爭格局和發(fā)展趨勢。
目錄概覽
- 主要參與方
- 典型信息流
- 風(fēng)控與合規(guī)要點
- 案例:微信支付周期扣費產(chǎn)品業(yè)務(wù)流程
- 商戶接口調(diào)用process
- 訂閱支付的UML流程概覽
- 主流競品接口對比分析
主要參與方
- 用戶:就是你我這樣的消費者,想訂閱個服務(wù),比如會員、自動續(xù)費啥的,就得先發(fā)起請求,授權(quán)支付方式(比如綁卡),然后等著接收扣款通知。
- 商戶:就是提供那些訂閱服務(wù)的商家,比如視頻網(wǎng)站、軟件開發(fā)商。他們得配置好訂閱計劃,等收到支付結(jié)果后,就給你開通服務(wù)。
- 支付公司(聚合支付平臺):這幫家伙就像是支付界的“中間人”,把各種支付渠道都集成起來。他們得處理訂閱的那些事兒,比如周期性扣款、扣款失敗了咋辦,還得負(fù)責(zé)資金清算和對賬。
- 銀行/卡組織:他們是“真金白銀”的搬運工,負(fù)責(zé)實際的資金劃轉(zhuǎn),還提供代收付接口和風(fēng)控支持。
- 第三方服務(wù)商:比如 WildCard(虛擬卡)、Stripe(支付網(wǎng)關(guān))這些,他們在一些特定場景下,給支付能力“加把勁”。
典型信息流
訂閱發(fā)起階段
用戶(就是你咯)在前端頁面上選好訂閱計劃,然后授權(quán)支付方式(比如填個虛擬卡信息)。
支付公司就會調(diào)用銀行或支付網(wǎng)關(guān)的 API,生成一個訂閱協(xié)議(比如 PayPal 的 Billing Agreement),順便把扣款周期和金額給記下來。
商戶收到訂閱 ID 后,就會給你開通服務(wù)權(quán)限,你就能開始享受服務(wù)啦。
周期性扣款階段
到了該扣款的時候,支付公司就會按周期觸發(fā)扣款請求,通過銀行或卡組織把錢劃走。
扣款結(jié)果會通過 Webhook 通知商戶(成功了就繼續(xù)服務(wù),失敗了就提醒一下,具體細(xì)節(jié)流程見下文:訂閱支付UML流程)。用戶(還是你)會收到扣款通知,還能通過支付公司或商戶平臺管理訂閱狀態(tài),比如查看、修改或者取消訂閱。
異常處理階段
支付失敗:系統(tǒng)會自動嘗試重試,要是還是不行,就暫停服務(wù)。這時候,得把失敗原因(比如余額不足、風(fēng)控攔截)記錄下來,并且通知用戶(還是你)。后續(xù)如能扣到款是否支持恢復(fù)服務(wù)?
取消訂閱:要是用戶(你)不想訂閱了,發(fā)起取消請求后,支付公司就會終止扣款計劃,并且把狀態(tài)同步給商戶。
業(yè)務(wù)方面:
如扣款周期已過,仍然沒有扣款成功,是否立即停止用戶的服務(wù),具體業(yè)務(wù)場景措施肯定不同?
更改訂閱計劃:
- 正好在扣款等待期更改訂閱計劃,如訂單金額和周期,如何處理。
- 扣款等待期是否允許修改,或者是否需要定義扣款等待期的變更計劃下月生效?
Webhook消息丟失
商戶系統(tǒng)檢測到訂閱一直處于pending狀態(tài)(超過30分鐘)。
調(diào)用支付平臺提供的「訂閱狀態(tài)查詢接口」主動補(bǔ)償:
GET /v1/subscriptions/{subscription_id}
Response:
{
“status”: “active”,
“last_payment_time”:
“2024-05-20 14:00:00”
}
根據(jù)查詢結(jié)果更新本地狀態(tài),并補(bǔ)發(fā)用戶通知。
風(fēng)控與合規(guī)要點
- 反欺詐:支付公司會結(jié)合 IP 檢測、交易行為分析(比如有沒有高頻小額扣款這種異常行為)來攔截異常交易。像 WildCard 這種,還會針對高風(fēng)控平臺(比如 OpenAI)優(yōu)化支付渠道。
- 數(shù)據(jù)隱私:大家都得遵循 GDPR 這些法規(guī),把用戶支付信息加密存儲好。尤其是虛擬卡服務(wù),得注意別讓敏感信息泄露(比如 WildCard 就沒有 KYC 選項)。
- 資金存管:支付公司要和銀行合作,實現(xiàn)資金分賬,確保商戶結(jié)算合規(guī),別出現(xiàn)什么二清風(fēng)險。
案例:微信支付周期扣費產(chǎn)品業(yè)務(wù)流程
下發(fā)扣費前通知后,在約定時間內(nèi):
- 若用戶拒絕續(xù)費,可關(guān)閉扣費服務(wù)
- 若用戶接受續(xù)費,則無需額外操作
注意:目前支持通知后24小時自動扣費、或提前使用獨立的通知接口兩種模式。(支付中簽約:pay/contractorder是獨立接口,以下扣款規(guī)則只適用于申請扣款接口:pay/pappayapply,兩種模式只能二選一)
微信周期扣費商戶接口調(diào)用流程
1)商戶在1號調(diào)用預(yù)扣費通知。
2)2號為扣費等待期,商戶不可扣費,用戶可隨時關(guān)閉。
3)3~9號共7天為可扣費期
-
- 扣費期內(nèi)僅在每天7:00~22:00期間可以發(fā)起扣費
- 扣費期內(nèi)可多次嘗試扣費
- 扣費期內(nèi)實時扣費
- 扣費失敗用戶無感知
- 扣費成功后用戶可收到扣費憑證,扣費成功后,當(dāng)前周期提前結(jié)束
訂閱支付的實現(xiàn)方式
1. 技術(shù)集成方案
- 支付SDK/API對接:通過集成支付網(wǎng)關(guān)(如Stripe、PayPal)或銀行提供的訂閱接口,實現(xiàn)周期性扣款。例如,Laravel Cashier通過Stripe API管理訂閱計劃,支持創(chuàng)建、取消訂閱及處理失敗支付。
- 智能合約與區(qū)塊鏈:基于Cardano的Revuto平臺利用智能合約自動執(zhí)行訂閱扣款,用戶可通過質(zhì)押代幣(如REVU)或穩(wěn)定幣(EURR)支付,同時引入DeFi借貸功能降低費用。
- 虛擬卡解決方案:針對跨境支付場景,WildCard等虛擬卡服務(wù)支持綁定國際訂閱平臺(如Patreon、ChatGPT Plus),通過支付寶/微信充值,規(guī)避國內(nèi)銀行卡限制。
2. 核心功能模塊
- 訂閱計劃管理:支持靈活設(shè)置周期(月/季/年)、價格階梯及試用期,例如PayPal需提前24小時創(chuàng)建訂閱協(xié)議并設(shè)置首次扣款費用7。
- 支付失敗處理:自動觸發(fā)郵件提醒、重試扣款或凍結(jié)服務(wù),需結(jié)合Webhook接收支付狀態(tài)通知(如PAYMENT.SALE.COMPLETED)7。
- 合規(guī)與用戶通知:根據(jù)《消費者權(quán)益保護(hù)法實施條例》,需顯著提醒自動續(xù)費條款,并在扣款前通過多通道(短信、郵件)通知用戶
主流競品接口對比分析
Stripe訂閱支付接口
接口功能:支持創(chuàng)建訂閱計劃、周期性扣款、試用期設(shè)置及失敗重試。
核心請求參數(shù):
- customer(必填):用戶唯一標(biāo)識,需通過創(chuàng)建客戶接口獲取。
- items[price](必填):訂閱計劃價格ID,需預(yù)先在Stripe后臺配置。
- payment_behavior:控制首次扣款行為(如允許失敗后自動重試)。
- trial_period_days:試用期天數(shù)。
響應(yīng)參數(shù):
- id:訂閱ID,用于后續(xù)管理。
- status:訂閱狀態(tài)(如active、past_due)。
- current_period_start/end:當(dāng)前計費周期起止時間。
調(diào)用流程:
- 用戶選擇訂閱計劃并授權(quán)支付。
- 商戶調(diào)用POST /v1/subscriptions創(chuàng)建訂閱。
- Stripe驗證支付方式并生成首次扣款。
- 商戶通過Webhook接收invoice.payment_succeeded事件更新訂閱狀態(tài)。
PayPal定期付款接口
接口功能:支持固定周期扣款、賬單協(xié)議管理。
核心請求參數(shù):
- plan_id(必填):訂閱計劃ID,需通過產(chǎn)品創(chuàng)建接口生成。
- subscriber:用戶信息(如郵箱、姓名)。
- application_context:定義支付流程的返回URL及取消頁面。
響應(yīng)參數(shù):
- subscription_id:訂閱唯一標(biāo)識。
- status:狀態(tài)碼(如APPROVAL_PENDING、ACTIVE)。
- links:包含用戶授權(quán)支付的跳轉(zhuǎn)鏈接。
調(diào)用流程:
- 商戶調(diào)用POST /v1/billing/plans創(chuàng)建訂閱計劃。
- 用戶通過授權(quán)鏈接完成支付授權(quán)。
- PayPal通過Webhook通知商戶激活訂閱。
- 周期性扣款自動執(zhí)行,商戶監(jiān)聽PAYMENT.SALE.COMPLETED事件。
支付寶自動扣款接口(alipay.fund.auth.order.app.freeze)
接口功能:基于預(yù)授權(quán)協(xié)議實現(xiàn)定期扣款。
核心請求參數(shù):
- out_order_no(必填):商戶訂單號,需唯一。
- auth_code:用戶授權(quán)碼(通過掃碼或SDK獲取)。
- product_code:固定為PRE_AUTH。
- amount:預(yù)授權(quán)金額。
響應(yīng)參數(shù):
- auth_no:支付寶資金授權(quán)號。
- status:授權(quán)狀態(tài)(如SUCCESS)。
- gmt_trans:授權(quán)時間戳。
調(diào)用流程:
微信支付合約支付接口
接口功能:支持按周期或按次扣款,適用于會員訂閱。
核心請求參數(shù):
- contract_id(必填):簽約協(xié)議號,通過用戶授權(quán)獲取。
- body:訂單描述(如“月度會員費”)。
- total_fee:扣款金額(單位:分)。
響應(yīng)參數(shù):
- transaction_id:微信支付訂單號。
- time_end:支付完成時間。
- trade_state:交易狀態(tài)(如SUCCESS)。
調(diào)用流程:
接口文檔設(shè)計關(guān)鍵點
冪等性處理
- Token機(jī)制:通過唯一請求ID(如idempotency_key)避免重復(fù)扣款,需在請求頭或參數(shù)中傳遞。
- 數(shù)據(jù)庫約束:在扣款邏輯中使用update … where status=unpaid確保僅處理一次扣款。
有容錯能力的序列設(shè)計
用戶 -> 商戶系統(tǒng): 選擇訂閱計劃并支付
商戶系統(tǒng) -> 支付平臺: 調(diào)用創(chuàng)建訂閱接口(攜帶idempotency_key)
支付平臺 -> 支付平臺: 校驗冪等性(通過idempotency_key)
支付平臺 -> 銀行: 驗證支付方式并扣款
alt 扣款成功
支付平臺 –> 商戶系統(tǒng): 返回{“code”:0, “subscription_id”:”sub_123″, “status”:”pending”}
支付平臺 -> 商戶系統(tǒng): Webhook發(fā)送PAYMENT_SUCCESS事件
商戶系統(tǒng) -> 商戶系統(tǒng): 更新狀態(tài)為active,開通服務(wù)
商戶系統(tǒng) -> 用戶: 發(fā)送成功郵件
else 扣款失敗
支付平臺 –> 商戶系統(tǒng): 返回{“code”:2001, “message”:”余額不足”}
支付平臺 -> 支付平臺: 記錄待重試任務(wù)(定時觸發(fā))
loop 重試邏輯(最多3次)
支付平臺 -> 銀行: 重試扣款
alt 重試成功
支付平臺 -> 商戶系統(tǒng): Webhook發(fā)送PAYMENT_SUCCESS事件
else 重試失敗
支付平臺 -> 商戶系統(tǒng): Webhook發(fā)送PAYMENT_FAILED事件
本文由 @支付唧唧咋咋 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)
用戶授權(quán)后,支付平臺會執(zhí)行首次扣款,并在后續(xù)周期自動扣款。
支付平臺會將扣款結(jié)果通過異步通知發(fā)送給商家系統(tǒng)。