當前位置:名人名言大全網 - 祝福短信 - 微信支付lavel是什麽?

微信支付lavel是什麽?

Laravel微信開發組件——微信微信支付

壹.導言

本教程是LAMP開發環境下基於larvel5.1LTS的開發實例。

因為現在國內有很多優秀的具有開源精神的php開發者,為了節省時間和維護成本,微信開發采用組件開發,我們不需要反復做輪子。本教程使用overtrue team的easywechat組件開發實現微信的支付功能。

因為這個組件功能太多,所以本博客主要介紹“掃碼支付”的主要流程和思路。

第二,composer安裝

默認情況下,每個人都已經在自己的開發環境中安裝了composer,並且可以進行壹些簡單的操作和安裝命令:

作曲要求“overtrue/laravel-微信:~3.0”

*如果使用laravel-debugbar,請禁用或關閉,否則此模塊無法正常工作!!!*(但是composer提示是否可以關閉x-debug,會影響安裝,可以不去管。)

第三,在laravel中配置

1.註冊ServiceProvider(在config/app.php配置文件中找到帶有關鍵提供者的數組,並將服務提供者添加到數組中):

over true \ LaravelWechat \ service provider::class,

2.(可選)Add * Appearance *在app/config/app.php的別名數組中,add * alias *:

微信' = & gtover true \ LaravelWechat \ service provider::class,

3.創建配置文件(在項目根目錄中運行artisan命令,並將配置文件發布到項目中):

php artisan供應商:發布

此時,配置文件wechat.php將在/config目錄下生成。在裏面輸入妳的微信商家信息。這裏請註意隱私保護。

第四,微信支付蒼蠅

1.配置微信商家信息。的。laravel根目錄下的ENV文件支持以下配置:

微信_APPID

微信_秘密

微信_令牌

微信_AES_KEY

微信_日誌_級別

微信_日誌_文件

微信_ OAUTH _範圍

微信_ OAUTH _回調

微信_支付_商家_ID

微信_支付_鑰匙

微信_支付_證書_路徑

微信_支付_鑰匙_路徑

微信_支付_設備_信息

微信_支付_訂閱_應用程序_ID

微信_支付_訂閱_商家_ID

微信_啟用_模擬

可以在/config/wechat.php中配置相關參數,也可以寫在壹個。ENV文件,然後,微信. php的具體讀取方法如下:

notify _ url ' = & gtEnv ('notify _ URL ','/notify _ URL '),//回調地址

Env()讀取。默認情況下為env文件。如果常量未在。env,返回env()的第二個參數的值。

2.wechat.php文件中應註意的問題

(1).“日誌”數組中是日誌配置。

(2)‘支付’數組是主配置數組,主要配置商戶的信息和證書。

3.(按鍵)創建訂單

(1).引入名稱空間。

使用easy we chat \ Foundation \ Application;

使用EasyWeChat \ Payment \ Order

(2).填寫訂單信息

$attributes = [

' trade _ type ' = & gt' JSAPI ',// JSAPI,本機,應用程序...

body ' = & gtIPad mini 16G白色',

詳細信息' = & gtIPad mini 16G白色',

out _ trade _ no ' = & gt'1217752501201407033233368018',

total _ fee ' = & gt5388,

notify _ url ' = & gt/order-notify ',//支付結果通知網址,如果沒有設置,會使用配置中的默認地址,這裏沒有匹配,因為在中已經配置了。環境。

// ...

];

//創建訂單

$order =新訂單($ attributes);

$ result = $ payment-& gt;準備(訂單);

if($ result-& gt;return_code == '成功' & amp& amp$ result-& gt;result_code == 'SUCCESS ')

{

//生成訂單後的邏輯

\Log::info('生成訂單號...'。$ data-& gt;order _ guid);

//這壹塊以ajax的形式返回到頁面。

//用戶的體驗是點擊確認支付,驗證碼出來就是壹個圖層頁面(沒錯,妳需要壹個有用的圖層js)。

$ajax_data=[

html ' = & gtJSON _ encode(\ QR code::size(250)-& gt;生成($result['code_url']),

out _ trade _ no ' = & gt$ data-& gt;order_guid

價格' = & gt$ data-& gt;價格

];

返回$ ajax _ data

}否則{

return back()-& gt;WithErrors('生成順序時出錯!');

}

動詞 (verb的縮寫)呈現頁面

這裏創建了壹個訂單,需要生成壹個二維碼圖片。請參考這個二維碼圖片組件。

作曲家設置

首先,將QrCode包添加到composer.json文件的require中:

作曲家需要“simplesoftwareio/simple-qrcode”

添加服務提供商

在config/app.php的providers數組中註冊simplesoftwareio \ QR code \ qrcodeserviceprovider::class .

添加別名

最後,註冊'二維碼' = & gtsimplesoftwareio \ QR code \ facades \ QR code::class來別名config/app.php的數組.

Pay.blade.php內容

& ltscript type = " text/JavaScript " src = " { { asset(' vendor/jquery . js ')} } " & gt;& lt/script & gt;

& ltscript type = " text/JavaScript " src = " { { asset(' layer/layer . js ')} } " & gt;& lt/script & gt;

& ltInput class = "微信_ BTN" type = "button" value = "支付確認"/& gt;

{!-這個頁面需要壹些js代碼讓支付功能更加美觀無bug,比如ajax輪詢,點擊支付後btn失敗,放棄支付時關閉炸彈層等。-}

Js內容

$('.微信_ BTN’)。單擊(函數(){

$('.我的訂單guid’)。val(“”);

$('#code ')。val(“”);

//ajax生成二維碼

數據={

_token':$("。令牌”)。val(),// token

錢':$(”。錢”)。val(),//商品價格

}

sendAjax(data,"/order ",function (data) {

//發送二維碼(這裏用漂亮的圖層庫)

layer.open({

類型:1,

標題:'微信支付',

皮膚:' layui-layer-rim ',//帶邊框。

面積:['270px ',' 340px'],//寬度和高度。

內容:“& ltp style = ' color:red;'文本對齊:居中;'& gt付款金額:"+數據['價格']

+"袁

+"'/>& ltdiv id = ' code ' style = ' text-align:center;& gt"+JSON.parse(data['html'])+

“& lt/div & gt;& ltp style = ' text-align:center;'& gt請使用微信掃碼支付

//這裏我把壹個關於炸彈層庫的小js寫進了內容。

});

getInfo();

//這裏寫壹個poll,可以異步查詢訂單是否已經支付,從而進行邏輯處理(比如輪詢支付狀態,成功跳轉到頁面)。提壹下我的想法就行了,輪詢碼也不需要找來貼去。

});

});

第六,回調函數

先放主代碼:

公共函數notifyUrl(請求$request)

{

$app =新應用(config('微信'));

$ response = $ app-& gt;付款-& gt;handleNotify(函數$notify,$successful){

如果($成功){

$order_arr=json_decode($notify,true);

$ order _ guid = $ order _ arr[' out _ trade _ no '];//訂單編號

//回調成功的邏輯

}

});

}

註意

(1).微信通過郵件發送回撥。在路由中定義後,laravel項目中需要排除令牌驗證。我建議VerifyCsrfToken.php在中間件中排除該路由。

受保護的$except = [

//

/pay_success_notify ',

/收件人規則排除路線'

];

(2).*專註!專註!專註!*這裏回調處理可以說是最重要的。如果這裏出了問題,可能會導致用戶支付成功後,微信的*回調沒有進來*,後臺回調的邏輯沒有實現,導致用戶花了錢,什麽也沒買(也就是妳的服務器沒有對付費用戶進行修改支付狀態等數據庫操作)。另壹個後果是,如果微信的參數返回不正確,微信會多次發送回調消息提醒妳支付成功,導致妳的服務器多次接受回調函數。這時候妳也壹般般,沒有在支付成功的邏輯中判斷用戶的支付狀態,導致邏輯用戶充了壹次錢,卻在數據庫中重復了幾次相關的數據庫操作。前者騙了付費用戶,後者騙了妳的公司。如果在這裏不註意,後果只會很嚴重。在涉及錢的地方要小心。

(2)回調路由所指向的方法中,如果妳的成功支付的邏輯運行成功,需要返回true;如果數據庫操作不成功,需要返回false;或者不回,微信會再發壹次回撥消息(post模式)。

七、壹些easywechat官方建議:

這裏有幾點需要註意:

1.handleNotify只接收壹個可調用的參數,通常帶有匿名函數。

2.匿名函數接收兩個參數,它們是:

$notify是壹個EasyWeChat\Support\Collection對象,封裝了通知信息,這裏不再贅述。您可以以對象或數組的形式讀取通知內容,例如,$ notify-& gt;Totalfee或$notify['totalfee']。

參數$successful實際上是判斷用戶是否支付成功(result _ code = =' success ')。

3.這個函數的返回值是告訴微信我是否處理完了。如果妳返回假的或者特定的錯誤信息,微信會在後面繼續再次通知妳,直到妳明確告訴它“我已經處理完了”,在函數中返回真;表示處理完成。

4.handleNotify返回值$Response是壹個響應對象。如果想直接輸出,用$ response->;Send(),在某些幀中不是輸出而是返回:return $response。

5.註意:請將“支付是否成功”與“處理是否完成”分開。他們沒有必然的聯系。

比如微信通知妳支付完成,但是支付失敗(result_code為‘fail’)。妳應該更新妳的訂單為支付失敗,但告訴微信處理完成。

附言

1.在微信的開發中,廣泛使用的是laravel自己的日誌檢錯方法。當var_dump()、echo()、dd()等方法無法檢查錯誤信息時,日誌錯誤檢查可以解決。如何使用laravel的日誌服務將在後面討論。

2.這個項目的開發可以說是組件開發,開發速度快,代碼質量高,維護成本低。微信在這種情況下的發展是壹個縮影。

[原地址] (/)