Laravel ?-?@amazeUI ?-?2016-11-09 04:33:29
?? 支付是很多網(wǎng)站必不可少的一個(gè)功能刹泄,用得最多的支付平臺(tái)就是支付寶和微信腰吟,在laravel學(xué)院中推薦使用omnipay中的omnipay-alipay插件來進(jìn)行支付碗暗,上個(gè)月我已經(jīng)將項(xiàng)目中的支付寶掃碼支付和微信的掃碼支付和js支付徹底做完了,學(xué)習(xí)到了很多俗批。在laravel學(xué)院中的支付寶支付篇的留言中發(fā)現(xiàn)了很多遇到的一些問題痕貌,這些問題我也遇到過,可能有一部分人就放棄了使用這個(gè)插件轉(zhuǎn)原生sdk開發(fā)去了湃缎∠睿總結(jié)了一下,基本上這些留言遇到的問題基本有一條嗓违, does not have a method 'gateway' 九巡,沒有這個(gè)gateway,其實(shí)這個(gè)問題很好解決蹂季,你點(diǎn)開這個(gè)項(xiàng)目的github地址打開文檔就會(huì)發(fā)現(xiàn)冕广,官方文檔已經(jīng)沒用gateway這個(gè)方法了,而是使用create乏盐。其他如果找laravel學(xué)院的還沒做好的話佳窑,你可以看一下你的vender里面有沒有一個(gè)叫omnipay的文件和一個(gè)叫l(wèi)okielse的文件夾,沒有的話說明你的composer還沒跑成功繼續(xù)跑吧父能。
??????? 我對(duì)于這個(gè)插件的理解是omnipay相當(dāng)于一個(gè)平臺(tái)神凑,omnipay-laravel是基于這個(gè)平臺(tái)做的一個(gè)插件,還有下一篇要講的微信支付也是何吝,這個(gè)平臺(tái)要求插件將所有復(fù)雜的處理不用通過程序員來處理溉委,程序員只需要將參數(shù)填入配置文件再做下單和回調(diào)操作即可完成,各種插件的數(shù)據(jù)驗(yàn)證要求使用ominpay的驗(yàn)證要求爱榕,所以我們會(huì)看到不管是微信還是支付寶瓣喊,下單和回調(diào)的各種獲取配置和驗(yàn)證的代碼幾乎一樣。比如下單的create方法獲取網(wǎng)管配置和其他操作黔酥,比如回調(diào)中的數(shù)據(jù)驗(yàn)證是否通過$response->isSuccessful() && $response->isTradeStatusOk()藻三,都是一樣的洪橘。我們只用處理最重要的業(yè)務(wù)邏輯即可。
??????? 不管是原生sdk還是插件還是各種平臺(tái)棵帽,基本上步驟分為兩步熄求,第一步就是下訂單,傳配置逗概,第二步就是回調(diào)弟晚。使用omnipay-alipay完成支付很簡(jiǎn)單,看laravel學(xué)院的介紹即可逾苫。下面說說與插件無關(guān)的卿城,下單方法中我們需要做什么操作,回調(diào)中我們需要怎么處理自己的業(yè)務(wù)邏輯铅搓。支付一般有兩張表瑟押,一張表給用戶看,一張表對(duì)賬用星掰,下單成功后我們需要在用戶的充值記錄表中填充一條狀態(tài)為未支付的數(shù)據(jù)勉耀,異步回調(diào)成功后需要在對(duì)賬表中添加一條數(shù)據(jù),添加成功后再將用戶的充值記錄中的那條記錄的支付狀態(tài)改為已支付成功蹋偏。
??????? 支付寶中的回調(diào)有兩種方式便斥,一種是同步回調(diào),一種是異步回調(diào)威始,同步回調(diào)支付寶會(huì)向你的服務(wù)器發(fā)起get請(qǐng)求枢纠,異步回調(diào)支付寶會(huì)向你的服務(wù)器發(fā)起post請(qǐng)求,同步回調(diào)不確保會(huì)成功黎棠,異步回調(diào)保證百分之九十九點(diǎn)九的成功率晋渺,經(jīng)測(cè)試可以同時(shí)使用兩種回調(diào)。我的同步回調(diào)地址直接是返回一個(gè)用戶支付完成后的頁面脓斩,沒有任何數(shù)據(jù)操作木西。
??????? 支付寶做得很好,直接在手機(jī)端中的瀏覽器打開随静,支付寶會(huì)自動(dòng)調(diào)起你的支付寶app進(jìn)行支付八千,沒有app,則會(huì)調(diào)到支付寶頁面的支付寶登錄頁面進(jìn)行支付燎猛,若是調(diào)起手機(jī)app支付支付成功后恋捆,并不會(huì)自動(dòng)跳轉(zhuǎn)到你的項(xiàng)目中,而是還會(huì)停留在支付寶app中重绷,退出app會(huì)返回到你的項(xiàng)目當(dāng)中沸停,若要完成調(diào)起app支付完成后自動(dòng)跳轉(zhuǎn)則需要另外一個(gè)網(wǎng)關(guān),手機(jī)網(wǎng)站支付昭卓,流程還是一樣愤钾,但是會(huì)多了許多步驟各種驗(yàn)證瘟滨,所以也沒太大必要做這個(gè)手機(jī)網(wǎng)站支付,手機(jī)網(wǎng)站支付僅僅比pc的多一個(gè)跳轉(zhuǎn)而已能颁,也能支付室奏。使用omnipay-alipay支付相對(duì)比微信掃碼支付模式二,簡(jiǎn)直簡(jiǎn)單得不要不要的了劲装。