每一個(gè)做過(guò)支付對(duì)接的少年上輩子都是折翼的天使根竿。——題記
三方支付對(duì)接是一件比較有意思的事兒就珠,今天就拿這個(gè)話題來(lái)掰扯掰扯寇壳。相信每個(gè)做過(guò)支付對(duì)接的小伙伴都有段血與火的經(jīng)歷,那段日子只有痛苦與煎熬妻怎,恨不得大罵寫(xiě)文檔的都是傻逼壳炎,堂堂這么大的互聯(lián)網(wǎng)公司支付文檔都是外包出去的么?然后你在搜索引擎(Google)輸入”支付的坑“這幾個(gè)大字就會(huì)找到約4240000條結(jié)果逼侦,清一色的微信支付寶的坑匿辩,當(dāng)然微信占大多數(shù),也許歸結(jié)于微信業(yè)務(wù)增長(zhǎng)太快發(fā)展時(shí)間太短的原因吧榛丢。
支付對(duì)接的坑到底有哪些呢铲球?在這就講個(gè)碼農(nóng)小明的故事:小明接到大鳥(niǎo)派給的一個(gè)支付對(duì)接任務(wù),第一步當(dāng)然是去官網(wǎng)查資料呀涕滋,哪兒呢睬辐?哪兒呢?支付文檔怎么沒(méi)找到呀?小明著急的去問(wèn)坑友們溯饵,終于在官網(wǎng)的一個(gè)小角落看到了文檔的鏈接侵俗,小明心想,尼瑪終于找到啦丰刊,趕緊下載下來(lái)看看吧隘谣。恩?怎么好幾份文檔呀啄巧?到底哪個(gè)版本才是把捌纭?這時(shí)候小明沒(méi)轍了秩仆,耐著性子挨個(gè)版本看了一個(gè)遍码泛。還好,官方還提供了Demo澄耍,怎么Demo寫(xiě)的跟文檔對(duì)不起來(lái)呀噪珊?小明這時(shí)急急忙忙聯(lián)系上了官方客服,等了好久客服終于答復(fù)了齐莲,沒(méi)想到這時(shí)客服又傳過(guò)來(lái)幾份文檔痢站,什么鬼?這份文檔才是么选酗?小明忍著罵娘的沖動(dòng)又耐著性子看完了這份文檔阵难。打開(kāi)IDE,小明熟練的對(duì)著文檔開(kāi)始調(diào)試起Demo芒填,怎么一直失斘亟小?小明無(wú)奈的又聯(lián)系上了上次的客服氢烘,這個(gè)我不清楚怀偷,你聯(lián)系我們這邊技術(shù)吧。恩播玖?發(fā)郵件椎工?等了好幾天終于收到了官方技術(shù)回復(fù)的郵件。這個(gè)參數(shù)字母應(yīng)該大寫(xiě)蜀踏?文檔沒(méi)說(shuō)啊维蒙。這幾個(gè)參數(shù)要有固定順序拼接?文檔也沒(méi)說(shuō)啊果覆。這個(gè)參數(shù)字?jǐn)?shù)超了颅痊?文檔沒(méi)有規(guī)定字段大小啊局待?這個(gè)參數(shù)必填斑响?文檔不是寫(xiě)的非必填么菱属?這地方文檔寫(xiě)錯(cuò)了是個(gè)bug?什么舰罚?文檔寫(xiě)錯(cuò)了纽门?!您的代碼沒(méi)問(wèn)題有可能是商戶號(hào)權(quán)限有問(wèn)題营罢,要不您重新再申請(qǐng)個(gè)商戶號(hào)試試吧赏陵。。饲漾。
看到了支付對(duì)接這么坑蝙搔,就有商家嗅到了商機(jī)做聚合支付接口,比如Ping++考传,如果預(yù)算足夠和工期緊吃型,這也是一個(gè)不錯(cuò)的方案。當(dāng)然還是那種“就差一個(gè)寫(xiě)代碼的”公司最多僚楞,所以那個(gè)唯一一個(gè)寫(xiě)代碼的當(dāng)然必須自己搞啦败玉。
談完了支付的坑下面聊聊支付對(duì)接的一般流程,這里略過(guò)開(kāi)通和審核階段镜硕,只談下開(kāi)發(fā)流程,筆者偷懶在這貼張銀聯(lián)支付的流程圖:
一般流程說(shuō)明:
1.用戶在商戶網(wǎng)站選定商品并下單返干,在商戶支付頁(yè)面選擇對(duì)應(yīng)支付平臺(tái)圖標(biāo)兴枯,進(jìn)行支付;
2.商戶按照文檔提交支付請(qǐng)求接口組織報(bào)文矩欠,向支付平臺(tái)發(fā)送支付請(qǐng)求财剖;
3.如果是PC端,會(huì)跳轉(zhuǎn)到對(duì)應(yīng)支付平臺(tái)的支付頁(yè)面癌淮,如果是移動(dòng)端躺坟,會(huì)喚起對(duì)應(yīng)的支付工具,用戶在支付平臺(tái)輸入支付信息乳蓄,提交支付咪橙;
支付平臺(tái)將支付結(jié)果通知商戶;
4.若支付成功虚倒,則支付平臺(tái)將交易結(jié)果異步發(fā)送給商戶美侦;
5.商戶若未收到交易結(jié)果,則商戶按照文檔查詢接口向支付平臺(tái)發(fā)請(qǐng)求查詢?cè)摻灰谆臧拢源_定消費(fèi)交易的狀態(tài)菠剩,支付平臺(tái)收到查詢請(qǐng)求時(shí),將同步返回該筆消費(fèi)交易的交易結(jié)果耻煤;
6.商戶若收到交易結(jié)果具壮,如果未向支付平臺(tái)反饋已收到交易結(jié)果准颓,支付平臺(tái)會(huì)重復(fù)發(fā)送交易結(jié)果。
在這提一點(diǎn)棺妓,由于網(wǎng)絡(luò)原因等異常情況支付平臺(tái)可能出現(xiàn)多次發(fā)送支付結(jié)果的情況攘已,通知回調(diào)接口商戶要注意做好接口冪等,其余的不再多說(shuō)涧郊。
筆者最近抽時(shí)間也寫(xiě)了個(gè)支付集成的小Demo贯被,里面已集成支付寶(國(guó)內(nèi)、國(guó)際妆艘、移動(dòng)端彤灶、PC端)、微信批旺、銀聯(lián)(acp幌陕、upop)、光大(網(wǎng)關(guān)汽煮、網(wǎng)頁(yè))搏熄、郵政支付,Demo已更新到Github上暇赤,地址:https://github.com/Martin404/PayMap心例,感興趣的小伙伴可以看看。