接一個(gè)第三方支付,開(kāi)發(fā)說(shuō)要2個(gè)月?

6 評(píng)論 9536 瀏覽 57 收藏 11 分鐘

很多產(chǎn)品在進(jìn)行支付的時(shí)候,都有第三方支付的選項(xiàng),這些年第三方支付的方式也在不斷增加。這就要求產(chǎn)品在設(shè)計(jì)支付渠道時(shí),要考慮到拓展性。本文作者對(duì)此進(jìn)行了分析,希望對(duì)你有幫助。

產(chǎn)品:我們近期需要增加一個(gè)支付渠道,評(píng)估一下工期吧?

技術(shù):這個(gè)很麻煩,要改訂單,改流水,改前端支付接入……估計(jì)要兩個(gè)月吧。

產(chǎn)品:要這么久嗎?Boss 說(shuō)半個(gè)月內(nèi)要上線(xiàn)。

技術(shù):當(dāng)初設(shè)計(jì)的時(shí)候沒(méi)有考慮接多個(gè)支付渠道,現(xiàn)在哪能想加就加,這可是涉及資金的環(huán)節(jié),怎么可能這么快?

產(chǎn)品:……

一、前言

涉及到線(xiàn)上交易環(huán)節(jié)的系統(tǒng)都會(huì)接入第三方支付。當(dāng)前的第三方支付渠道越來(lái)越多,從一開(kāi)始的支付寶支付、到微信支付、再到云閃付……現(xiàn)在還有各家銀行的支付渠道。比如我們看美團(tuán),就支持了微信、支付寶、云閃付、美團(tuán)支付和華為支付。

如此多的支付渠道,如果一開(kāi)始的產(chǎn)品設(shè)計(jì)對(duì)支付這塊沒(méi)有考慮好,那么出現(xiàn)上面的對(duì)話(huà)很正常,而且確實(shí)不能說(shuō)是技術(shù)的鍋。

當(dāng)然,做過(guò)多支付渠道接入的技術(shù)可能在一開(kāi)始設(shè)計(jì)技術(shù)方案的時(shí)候就會(huì)考慮,但是大部分技術(shù)可能只是實(shí)現(xiàn)了支付的功能而已,并沒(méi)有考慮擴(kuò)展性。然后,要擴(kuò)展支付渠道的時(shí)候就會(huì)很被動(dòng)。

二、支付網(wǎng)關(guān)

我們來(lái)看看在沒(méi)有支付網(wǎng)關(guān)的情況下,支付這個(gè)過(guò)程是怎么樣的。

上面這幅流程圖是一個(gè)簡(jiǎn)化版本的正向支付流程圖,發(fā)起支付的時(shí)候,用戶(hù)端需要選擇支付渠道,然后根據(jù)不同的支付渠道發(fā)起對(duì)應(yīng)的支付。支付成功后,再處理訂單的支付狀態(tài)。

每一個(gè)支付渠道都有一套獨(dú)立的支付流程,也就意味著每接入一個(gè)支付渠道,這些部分都需要單獨(dú)開(kāi)發(fā),工作量和當(dāng)初一開(kāi)始做第一個(gè)支付的差不多,工期長(zhǎng)就難免了。

這還是簡(jiǎn)化的正向的支付流程,如果考慮訂單退款、資金流水管理,那么工作量會(huì)更多。

怎么化解這種情況?實(shí)際上還是需要產(chǎn)品從業(yè)務(wù)層面抽象支付過(guò)程。

我們梳理一下上面各個(gè)支付渠道的過(guò)程,發(fā)現(xiàn)其實(shí)發(fā)起支付、支付成功判斷和通知訂單支付成功這三個(gè)環(huán)節(jié)其實(shí)是類(lèi)似的,因此可以將上面的流程圖簡(jiǎn)化為下面的樣子。

中間框起來(lái)的那部分就是支付網(wǎng)關(guān)要做的事情。這個(gè)時(shí)候也許會(huì)有人質(zhì)疑,實(shí)際上每個(gè)支付渠道還是要單獨(dú)處理一遍,并沒(méi)有簡(jiǎn)化什么。從面上看確實(shí)是,所以這里就涉及到領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的思想了。

三、領(lǐng)域抽象

回到我們的支付環(huán)節(jié),我們可以拆分成三個(gè)模塊,前臺(tái)模塊、后臺(tái)的訂單模塊和支付模塊。

這三個(gè)模塊如果能夠在前期通過(guò)一種形式進(jìn)行分離和交互約定,那么當(dāng)三個(gè)模塊的某個(gè)模塊發(fā)生變動(dòng)時(shí),其他兩個(gè)模塊的變動(dòng)可以降低到極限,從而可以減輕變動(dòng)帶來(lái)的系統(tǒng)開(kāi)發(fā)工作量。

我們先來(lái)看看如何分離,分離的目的是盡量保證數(shù)據(jù)的單向流動(dòng),比如支付環(huán)節(jié)的數(shù)據(jù)流向圖如下。

從這幅圖我們可以看到,實(shí)際上前臺(tái)模塊到支付模塊的數(shù)據(jù)流是可以單向流動(dòng)的,那么我們約定好不同模塊的數(shù)據(jù)交互規(guī)則就可以減少某個(gè)模塊變動(dòng)帶來(lái)的影響了。

下面是三個(gè)模塊約定的信息:

  • 前臺(tái)到訂單:提交訂單時(shí)提供商品信息,包括 SKU 的 id,數(shù)量,若考慮優(yōu)惠的話(huà)把優(yōu)惠信息也一并提交;
  • 訂單到前臺(tái):訂單信息,例如訂單詳情。
  • 前臺(tái)到支付:提供支付渠道(由用戶(hù)選擇)和訂單號(hào);支付模塊會(huì)根據(jù)訂單號(hào)獲取實(shí)際要支付的金額創(chuàng)建支付流水,此時(shí)支付流水處于待支付狀態(tài)。這里要注意,不能由前臺(tái)提交支付金額,因?yàn)榍芭_(tái)數(shù)據(jù)不是絕對(duì)可信的,實(shí)際金額要以后臺(tái)訂單模塊的為準(zhǔn)。
  • 支付到第三方:一般接入第三方支付都需要后臺(tái)向第三方申請(qǐng)支付參數(shù)(通常會(huì)需要提供商戶(hù)號(hào)、金額、商家訂單號(hào)、商品信息)。
  • 支付到前臺(tái):將獲取到的第三方支付參數(shù)按約定格式組裝給到前臺(tái),讓前臺(tái)能夠按對(duì)應(yīng)渠道的要求將支付參數(shù)提交到支付渠道(通常是第三方提供的 SDK)發(fā)起支付。
  • 第三方支付到支付模塊:支付后,第三方支付會(huì)推送支付成功的對(duì)賬信息通知給到后臺(tái),后臺(tái)核對(duì)無(wú)誤后,確認(rèn)支付成功。支付模塊會(huì)將之前創(chuàng)建的流水標(biāo)記為支付成功。
  • 支付模塊到訂單模塊:支付模塊會(huì)告知訂單模塊哪個(gè)訂單號(hào)支付成功了,然后訂單模塊標(biāo)記訂單為付款成功。
  • 訂單模塊到前臺(tái):將支付成功信息給到前臺(tái),前臺(tái)會(huì)告知用戶(hù)已經(jīng)支付成功。

由上面的數(shù)據(jù)流可以看到,實(shí)際上三個(gè)模塊的邊界和數(shù)據(jù)交互是很清晰的。

因此,我們?cè)谠O(shè)計(jì)的時(shí)候,把三個(gè)模塊之前的交互數(shù)據(jù)約定好,那么當(dāng)支付渠道發(fā)生改變的時(shí)候,就只需要做少量改動(dòng)就可以了。

  • 在正向支付過(guò)程中訂單模塊是不需要改動(dòng)的,訂單模塊和第三方支付并沒(méi)有直接的關(guān)聯(lián)。
  • 增加支付渠道時(shí),前臺(tái)一方面下單支付時(shí)提交對(duì)應(yīng)的支付渠道即可。發(fā)起支付時(shí)按照第三方渠道的要求,將支付模塊的渠道支付參數(shù)提交到第三方即可,實(shí)際上只是增加了第三方渠道支付的適配工作;
  • 支付模塊只需要適配新增渠道的申請(qǐng)支付和處理第三方支付成功的對(duì)賬通知即可。

整個(gè)工作經(jīng)過(guò)梳理后會(huì)簡(jiǎn)單很多,但這里的前提是產(chǎn)品在設(shè)計(jì)之初就將支付模塊和訂單模塊分離了,分離后的支付模塊就可以擴(kuò)展為支付網(wǎng)關(guān)。

退款的逆向操作也是類(lèi)似的,步驟如下:

  1. 前臺(tái)用戶(hù)發(fā)起退款申請(qǐng),這里也可以是后臺(tái)客服替用戶(hù)發(fā)起退款申請(qǐng);
  2. 后臺(tái)審核通過(guò)后,提交退款申請(qǐng)到支付網(wǎng)關(guān)(實(shí)際上是訂單模塊到支付網(wǎng)關(guān));
  3. 支付網(wǎng)關(guān)向第三方提交退款申請(qǐng)。退款成功后,第三方支付會(huì)通知支付網(wǎng)關(guān);
  4. 支付網(wǎng)關(guān)核對(duì)退款信息無(wú)誤后,通知訂單模塊退款操作成功,訂單模塊會(huì)標(biāo)記訂單的退款狀態(tài)。

當(dāng)接入新的支付渠道時(shí),實(shí)際上退款過(guò)程只需要支付網(wǎng)關(guān)處理即可,訂單模塊不需要做任何改動(dòng)。

四、總結(jié)

很多產(chǎn)品都會(huì)和第三方系統(tǒng)做對(duì)接,而第三方支付是最常見(jiàn)的一種形式。

如果產(chǎn)品同一項(xiàng)功能可能和多個(gè)不同渠道的第三方對(duì)接,那么建議在不同渠道和具體業(yè)務(wù)功能之間增加一個(gè)適配功能,從而當(dāng)接入新的第三方時(shí),只需要更改適配功能,而不需要對(duì)業(yè)務(wù)功能進(jìn)行大的改動(dòng),例如本篇介紹的支付網(wǎng)關(guān)。

這種設(shè)計(jì)方式,一方面需要產(chǎn)品經(jīng)理能夠提前預(yù)判業(yè)務(wù)發(fā)展趨勢(shì),另一方面還需要產(chǎn)品經(jīng)理具備優(yōu)秀的業(yè)務(wù)梳理和抽象能力。實(shí)際上,業(yè)務(wù)梳理和抽象能力是很多高級(jí)產(chǎn)品經(jīng)理和初中級(jí)產(chǎn)品經(jīng)理最為明顯的區(qū)別。

作者:產(chǎn)品海豚灣;公眾號(hào):產(chǎn)品海豚灣(ID:pm-dophin-bay)

本文由@產(chǎn)品海豚灣 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來(lái)自Unsplash,基于CC0協(xié)議。

該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. OTP驗(yàn)證原型

    來(lái)自北京 回復(fù)
  2. 不做兩個(gè)月,哪有時(shí)間看世界杯

    來(lái)自福建 回復(fù)
  3. 普遍做法是支付網(wǎng)關(guān),作者應(yīng)該只是拿這個(gè)舉例,單向支付場(chǎng)景可能出現(xiàn)在一些基礎(chǔ)支付網(wǎng)關(guān)沒(méi)有滿(mǎn)足后的下一步流程

    來(lái)自河南 回復(fù)
  4. 2個(gè)月?那你自己跟老板說(shuō)去吧。

    來(lái)自江蘇 回復(fù)
  5. 普遍做法就是做支付網(wǎng)關(guān),難道現(xiàn)在還有還有只做單向的

    來(lái)自中國(guó) 回復(fù)
    1. 一個(gè)看產(chǎn)品設(shè)計(jì),一個(gè)看技術(shù)思路。建議是產(chǎn)品設(shè)計(jì)明確好

      來(lái)自湖南 回復(fù)