今天來說講支付。前端
工做到如今,接入過好幾個項目的支付,其中涉及到了微信支付、支付寶支付、銀聯支付。服務器
三種支付的對接感覺其實總體上大同小異。都遵循同一個流程:微信
1)、商戶APP向商戶服務器請求生成訂單app
2)、商戶服務器經過生成的訂單編號向第三方支付平臺請求籤名信息返回給商戶APP異步
3)、商戶APP拿到受權簽名信息向第三方支付平臺調起支付微信支付
4)、用戶支付完成網站
5)、第三方支付平臺向商戶服務器發起支付結果回調spa
6)、商戶服務器根據回調信息處理業務邏輯
對象
接下來談談對比。blog
1.文檔和SDK對比
整體感覺是支付寶的文檔的SDK最好用。面向對象很舒服。
微信的開放平臺/商戶平臺/公衆平臺初次接入者很容易混淆,搞不清楚哪一個是哪一個。
銀聯的demo很詳細,基本不需做多大改動就能夠拿來用,只不過在環境配置上多了幾個證書,簽名和驗籤時都須要證書,稍顯麻煩。
2.前端調起支付所需參數對比
相比之下,支付寶的SDK最方便,把全部參數和方法都封裝成了面向對象的方式,清晰易懂。
3.須要注意的地方
補充:
1.若是調起了支付,而後回到商戶app取消了訂單,此時再跳轉到第三方支付頁面去支付,而且支付成功了。這種狀況,原本應該是請求第三方平臺關閉訂單,可是支付寶和微信都是在下單後的短期內不能立刻取消訂單。解決辦法是:在支付回調的方法裏面加上判斷,若是是錯誤或者重複支付,則退款給買家。
2.支付寶收到多個支付成功回調的問題:
支付寶的解釋是:
只要交易狀態發生改變,符合知足支付寶異步觸發條件,就會發送異步通知;
其中,像即時到帳,移動支付,手機網站支付等接口,默認都是支持3個月可退款的,支付成功以後,支付寶會發送一個trade_success(支付成功)的異步通知,3個月以後,此交易就不容許退款,此時支付寶會再次發送(trade_finished)的異步通知,所以會在3個月以後再次收到一次異步通知;
注意,只trade_success狀態下處理本身的業務邏輯;
我遇到的問題是:若是調用了部分退款接口,會觸發一個交易狀態爲TRADE_SUCCESS的支付成功回調回來。致使數據錯亂。
解決辦法:判斷回調是否有返回退款參數,gmt_refund,refund_fee(退款時間和退款金額)這些,以此來區分是退款成功以後的回調仍是正常支付完成的回調。
若是有朋友須要相關代碼,能夠留言。
收到代碼的朋友,若是以爲個人文章幫助到了你,請酌情適當打賞樓主煙錢。