專案實戰:閒話支付與轉賬

陸敏技發表於2018-08-24

    對於未知,一般來說我們有兩種心理:恐懼,或者崇拜。

    恐懼如小時候,我去河裡游泳,對於望不見底,黑漆漆、涼颼颼的河水,心中充滿了各種可怕的想法。

    崇拜如長大後,對於瑞士銀行的軟體系統,覺得一定是最頂尖掰的程式猿開發的,直到我發現了我同事的祕密(關於這個梗,我們們改天當面聊)。

    所以如果你跟當年的我一樣,也處於初學者或者剛進入開發不久,那麼你對於銀行、轉賬、支付、第三方等等概念一定也處在崇拜或者恐懼階段。而其實只要打破這種未知,你就會發現:原來不過如此。

    我的從業生涯中,現在還記得的,大概接觸過如下幾種支付通道:銀聯、工商銀行、農業銀行、通聯、支付寶、微信、paypal、apple支付等。到現在,還老有人時不時找我做支付介面,比如就在昨天,有人還Q我做農行支付~~。說真的,我都不知道大家從哪裡搞到我QQ號的。

 

    你沒做過,就會覺得可怕,各種高階神奇、除錯不出來。你如果做過,就會發現,這特麼的不就是呼叫個Http服務嗎:

    並且,如果你做過了,你就會發現,各家銀行和第三方支付的技術支援、開發能力也是各種良莠不分、殘次不齊。尤其是一些小行,那個技術能力簡直令人髮指。我們在做一家小行的企業支付的時候,甚至達到了要教對方的開發怎麼去做介面的程度……。還有,不要覺得覺得拿他們的offer很難,我們有一個學員以外包的形式進駐到某第三方支付公司進行開發,未到多久,對方就想將其挖為正式員工。

 

 

1. 破除恐懼

    要破除恐懼,我們先拿將支付做到極致的支付寶來入手。

    如果你想增加恐懼,請隔壁去試微信支付,那個除錯可不是一般的複雜哦。

    好了,如果你的公司要將平臺接入支付寶,那麼首先,就得以公司的形式去支付寶的網站申請資質。不要管我問哪裡是申請的地方,這麼多年來,支付寶不僅支付介面本身,連開發者網站都不知道改版了多少次。那麼到底申請資質這件事情在一個公司裡面是誰來做?一般來說,是技術和財務一起配合來做。為什麼吶,因為你去讓財務申請,財務會說,我完全看不懂啊,但是你作為技術直接去申請,由於驗證公司資料、公帳等一系列操作,你沒有財務的支援,也是不行的。除非你像當初的我一樣,一人身兼董事長、總經理、財務總監、技術總監、市場總監、保潔總監於一職,公司隨身用皮包裝著走。

    申請下來後,對方會給你一堆配置引數或電子證照等。NB如支付寶,一定是讓你登入網站後臺自己檢視或者下載證照。不NB如某些小行,居然會讓你加入一個QQ群,或者給你一個QQ號,由相關的人員點對點給你發過來……

    有了基本的引數,一般來說,對方還會提供DEMO,那麼接下來,我們就把DEMO中的引數替換為剛才獲得的引數,如果有證照的,則把證照部署到你自己的伺服器上,DEMO就能執行起來了。

    再說一遍,能力有大小,對方寫DEMO以及撰寫API文件的能力也不見得比你更好,所以你一次能除錯成功的機會就得看你運氣了。

 

2. 支付寶即時到賬

    來看看最簡單的支付寶的DEMO。這是支付寶網站下載回來的demo。可以看到,有不同的語言的版本:

    我們將它引入到eclipse中,長這個樣子:

    這個demo中,主要有上圖所示的幾個檔案,下文會挑主要的講。

 

3. 修改引數

    在引數的修改中,主要是上圖紅框內的五個地方,

    Partner:公司的身份,支付寶分配給你的,相當於銀行賬號;

    兩個Key:一個是公鑰一個是私鑰,有些支付通道是以電子證照的形式給我們的,可以是檔案。也可以是一個U盤,但是裡面存的就是公鑰和私鑰。有同學可能注意到,我單獨給私鑰打碼了,而沒有給公鑰打碼。這個以後我們說到加解密的時候再說哦,總之,保護好你的私鑰就是了,這個私密性等同於你的銀行賬號密碼。

    兩個url:一個叫做return-url,是什麼意思呢?就是支付完成後(一會看實操),支付寶得把支付結果返回給我們們,他怎麼返回給我們呢?我們也得給支付寶一個網址,這樣它就能給這個網址發訊息了不是。

    但是,這個notify_url是個什麼鬼?我們想象一下這個場景:

    為了阻止上面情況發生,我們就得提供另外一個URL,這個URL用來在支付寶傳送訊息給return-url失敗的時候,會在接下來的時間內,不間斷的定時傳送補充訊息到這個地址,把這個壞掉的邏輯補回來。

 

4. 操作演示

    來,不管三七二十一,先來波操作,首先,執行index.jsp,如下圖:

    這個頁面沒什麼稀奇的,無非就是訂單號和商品和金額。

    然後點選傳送,關鍵的一刻產生了,我們就得把上面的顯然可見的資訊,和隱藏在表單後的引數資訊一起包裝到httprequest中傳送到支付寶的網站去。看一下,大致有什麼:

    傳送出去後,就是下面的介面。熟悉不,剁手吧。

    在這個介面中,支付寶就會讓你開啟手機APP,讓你掃一掃支付,或者讓你登入支付寶網站支付。如果是銀行,一般就會讓你開啟網銀,進行支付。這些操作,都是在他們的平臺中進行的。在這一步,跟我們們的網站無關(你可以看下圖的瀏覽器地址)。

    支付完畢,提醒如下:

    緊接著,再次跳轉提醒

    緊接著,支付寶再次跳轉回我們的網站,看到沒,return_url.jsp,就是我們配置的返回地址。到此,完成支付。謝謝大家,請先轉100W過來。

 

5. 企業級支付中其它問題

    即便解決了上文中同步操作的異常問題,還是有可能有其它一些意外情況的發生,比如你的資料庫崩潰了,導致你儲存的收付款情況和支付寶(或銀行)那邊的首付款情況不一致。故,一般來說,除了類似上面的介面,支付平臺還會提供一些對賬介面供你呼叫,進行一個階段內的批量對賬。

    那這些對賬介面怎麼呼叫?當然是跟上面一樣了。其返回的response中的資料,可能就是一個階段內的所有賬單資訊,然後,我們作為程式設計師,就要去寫程式跟自己儲存的資料進行一致性的校驗。

 

6. 認識一下銀行的支付通道

    看過了支付寶的支付通道,我們再來看一個農行的支付通道。注意,其原理是完完全全一致的。

    在這裡,我們僅僅放置一段傳送程式碼感受一下吧,同時,這段程式碼是用PHP寫的,從現在起,不要說,你只會Java程式設計了:-)

    還有,農行的支付通道是使用檔案證照來儲存公鑰和私鑰的,如下

 

7. 支付通道在網際網路借貸平臺中的應用

    擁有了以上的知識,是不是就意味著支付與轉賬在所有的網際網路應用中你就能放心應付了呢?非也,在電子商務中,以上知識可能差不多了,但是在網際網路借貸平臺(俗稱P2P)中,還不夠。

    我們都知道,P2P平臺最大的一個風險就是平臺跑路。這些年的新聞可謂是層出不窮。我修正一下,5年前的P2P平臺,你利用我上文描述中的知識就能做一個P2P了,但是現在,不能了。

    這個不能,不是指技術上不能夠,而是政策上不能夠。

    在上文的即時轉賬中,使用者轉給公司的錢,公司瞬間就可以提走。如果這種模式存在於P2P平臺中,那麼風險就很大,因為公司隨時可以轉走投資者的錢而跑路。

    用幾句話來描述P2P公司的業務模式:

    注意,上面的過程中哪些環節能出現風險呢?讓我們再把上面的描述複述一遍,同時加上備註,你只看備註就可以了:

    為了解決這樣的問題,金融監管機構就出現了。金融監管機構要求所有的P2P平臺:

    1:不能有自己的資金池;

    2:在銀行開立的用於收付款的賬號是專門的虛擬賬號,不能直接打到自己的公司賬號,這些錢,只能發起申請直接打給投資者和借款人;

    3:所有的借款人和投資者在平臺上的賬號對應在銀行那裡也得有虛擬賬號,所有平臺上的投資和借錢行為發生在這些受監控的虛擬賬號內,實際要提現必須由本人發起申請。

    以上,講完了。

    通過上文的瞭解,現在的你,是要去做一個電商網站呢,還是一個P2P平臺?迴歸一句話,記住:萬事萬物兼HTTP服務……

 

===================================================================================================

以下是廣告時間:最課程(http://zuikc.com)正在招收Java就業班學員,如果你想了解或參與的這樣的專案,請聯絡我們哦。

相關文章