首先咱們來探討如何在Laravel應用中使用支付寶進行支付,對此,GitHub上有不少相關的包,其中最流行的兩個包:Omnipay For Laravel 5 & Lumen 和 Laravel AliPay。這裏使用的是Laravel AliPay來作案例說明:php
準備工做 :支付寶帳號 /螞蟻金服開放平臺帳號---> 支付寶簽約(即時到帳)
到項目根目錄執行命令安裝包git
composer require latrell/alipay dev-master
執行更新github
composer update
執行更新後,到vendor目錄裏面看一下有沒有latrell目錄,若是有說明安裝成功,反之沒有。由於latrell目錄下放的是alipay相關文件web
找到 config/app.php 配置文件中,key爲 providers 的數組,在數組中添加服務提供者。數組
'providers' => [ /* * Laravel Framework Service Providers... */ 'Latrell\Alipay\AlipayServiceProvider', ]
執行命令,生成配置文件到config/目錄下安全
php artisan vendor:publish
配置說明服務器
配置文件 config/latrell-alipay.php 爲公共配置信息文件app
config/latrell-alipay-web.php 爲Web版支付寶SDK配置composer
config/latrell-alipay-mobile.php 爲手機端支付寶SDK配置
異步
打開config/latrell-alipay-web.php,設置安全檢驗碼與通知頁面
<?php return [ // 安全檢驗碼,以數字和字母組成的32位字符。 'key' => 'a6cq60*****************zl', //簽名方式 'sign_type' => 'MD5', // 服務器異步通知頁面路徑。根據本身項目路徑作相應的修改 'notify_url' => 'http://web.wan.com/notify', // 頁面跳轉同步通知頁面路徑。根據本身項目路徑作相應的修改 'return_url' => 'http://web.wan.com/return' ];
打開config/latrell-alipay.php,設置賣家支付寶賬戶和合做身份者id
<?php return [ //合做身份者id,以2088開頭的16位純數字。 'partner_id' => '2088************', //賣家支付寶賬戶。 'seller_id' => '28*******4@qq.com' ];
設置支付請求路由
//支付寶支付處理路由 Route::get('alipay','Home\alipayController@Alipay'); // 發起支付請求 Route::any('notify','Home\alipayController@AliPayNotify'); //服務器異步通知頁面路徑 Route::any('return','Home\alipayController@AliPayReturn'); //頁面跳轉同步通知頁面路徑
支付寶掃碼支付案例代碼
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2017/2/8 * Time: 20:19 */ namespace App\Http\Controllers\Home; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; class alipayController extends Controller{ // 發起支付請求 public function Alipay(){ $alipay = app('alipay.web'); $alipay->setOutTradeNo('E0002332039'); $alipay->setTotalFee('0.01'); $alipay->setSubject('小米5s'); $alipay->setBody('商品:支付寶支付測試'); $alipay->setQrPayMode('5'); //該設置爲可選1-5,添加該參數設置,支持二維碼支付。 // 跳轉到支付頁面。 return redirect()->to($alipay->getPayLink()); } // 異步通知支付結果 public function AliPayNotify(Request $request){ // 驗證請求。 if (!app('alipay.web')->verify()) { Log::notice('Alipay notify post data verification fail.', [ 'data' => $request->instance()->getContent() ]); return 'fail'; } // 判斷通知類型。 switch ($request ->input('trade_status','')) { case 'TRADE_SUCCESS': case 'TRADE_FINISHED': // TODO: 支付成功,取得訂單號進行其它相關操做。 Log::debug('Alipay notify post data verification success.', [ 'out_trade_no' => $request -> input('out_trade_no',''), 'trade_no' => $request -> input('trade_no','') ]); break; } return 'success'; } // 同步通知支付結果 public function AliPayReturn(Request $request){ // 驗證請求。 if (!app('alipay.web')->verify()) { Log::notice('支付寶返回查詢數據驗證失敗。', [ 'data' => $request->getQueryString() ]); return view('alipayfail'); } // 判斷通知類型。 switch ($request ->input('trade_status','')) { case 'TRADE_SUCCESS': case 'TRADE_FINISHED': // TODO: 支付成功,取得訂單號進行其它相關操做。 Log::debug('支付寶通知得到數據驗證成功。', [ 'out_trade_no' => $request ->input('out_trade_no',''), 'trade_no' => $request -> input('trade_no','') ]); break; } return view('alipaysuccess'); } }
支付寶支付手機端:
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2017/2/8 * Time: 22:19 */ namespace App\Http\Controllers\Home; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; class alipayController extends Controller{ // 發起支付請求 public function Alipay(){ $alipay = app('alipay.mobile'); $alipay->setOutTradeNo('E0002332039'); $alipay->setTotalFee('0.01'); $alipay->setSubject('小米5s'); $alipay->setBody('商品:支付寶支付測試'); // 返回簽名後的支付參數給支付寶移動端的SDK。 return $alipay->getPayPara(); } // 支付寶異步通知支付結果 public function AliPayNotify(Request $request){ // 驗證請求。 if (!app('alipay.mobile')->verify()) { Log::notice('Alipay notify post data verification fail.', [ 'data' => $request->instance()->getContent() ]); return 'fail'; } // 判斷通知類型。 switch ($request ->input('trade_status','')) { case 'TRADE_SUCCESS': case 'TRADE_FINISHED': // TODO: 支付成功,取得訂單號進行其它相關操做。 Log::debug('Alipay notify post data verification success.', [ 'out_trade_no' => $request -> input('out_trade_no',''), 'trade_no' => $request -> input('trade_no','') ]); break; } return 'success'; }
AliPay。其GitHub項目地址是:https://github.com/Latrell/Alipay。該項目是中文版,使用說明GitHub上說的很清楚明白