天天看點

Laravel5 支付寶

安裝

// 拉取元件
composer require latrell/alipay dev-master  
           

找到

config/app.php

配置檔案中,

key

providers

的數組,在數組中添加服務提供者.

'providers' => [  
   // ...
  Latrell\Alipay\AlipayServiceProvider::class,
 ]
           

在項目根目錄中運作

// 生成配置檔案
php artisan vendor:publish  
           

配置檔案說明

  • config/latrell-alipay.php

    為公共配置資訊檔案.
  • config/latrell-alipay-web.php

    為 Web 版支付寶 SDK 配置.
  • config/latrell-alipay-mobile.php

    為手機端支付寶 SD K配置

使用

先給支付添加一個路由和方法.

Web端

public function alipay()
 {
        $orderId = time();
        $orderPrice = ;
        $goodsName = '外星人筆記本電腦';
        $goodsDescription = '外星人筆記本電腦';
        // 建立支付單。
        $alipay = app('alipay.web');
        $alipay->setOutTradeNo($orderId);
        $alipay->setTotalFee($orderPrice);
        $alipay->setSubject($goodsName);
        $alipay->setBody($goodsDescription);
        // 跳轉到支付頁面。
        return redirect()->to($alipay->getPayLink());
  }
           

手機端

public function alipay()
 {
    $orderId = time();
    $orderPrice = ;
    $goodsName = '外星人筆記本電腦';
    $goodsDescription = '外星人筆記本電腦';
    // 建立支付單。
    $alipay = app('alipay.mobile');
    $alipay->setOutTradeNo($orderId);
    $alipay->setTotalFee($orderPrice);
    $alipay->setSubject($goodsName);
    $alipay->setBody($goodsDescription);

    // 傳回簽名後的支付參數給支付寶移動端的 SDK.
    return $alipay->getPayPara();
  }
           

Web 端回調

/**
     * 異步通知
     */
    public function webNotify()
    {
        // 驗證請求。
        if (! app('alipay.web')->verify()) {
            Log::notice('Alipay notify post data verification fail.', [
                'data' => Request::instance()->getContent()
            ]);
            return 'fail';
        }

        // 判斷通知類型。
        switch (Input::get('trade_status')) {
            case 'TRADE_SUCCESS':
            case 'TRADE_FINISHED':
                // TODO: 支付成功,取得訂單号進行其它相關操作。
                Log::debug('Alipay notify post data verification success.', [
                    'out_trade_no' => Input::get('out_trade_no'),
                    'trade_no' => Input::get('trade_no')
                ]);
                break;
        }

        return 'success';
    }

    /**
     * 同步通知
     */
    public function webReturn()
    {
        // 驗證請求。
        if (! app('alipay.web')->verify()) {
            Log::notice('Alipay return query data verification fail.', [
                'data' => Request::getQueryString()
            ]);
            return view('alipay.fail');
        }

        // 判斷通知類型。
        switch (Input::get('trade_status')) {
            case 'TRADE_SUCCESS':
            case 'TRADE_FINISHED':
                // TODO: 支付成功,取得訂單号進行其它相關操作。
                Log::debug('Alipay notify get data verification success.', [
                    'out_trade_no' => Input::get('out_trade_no'),
                    'trade_no' => Input::get('trade_no')
                ]);
                break;
        }

        return view('alipay.success');
    }
           

APP端回調

/**
     * 支付寶異步通知
     */
    public function alipayNotify()
    {
        // 驗證請求。
        if (! app('alipay.mobile')->verify()) {
            Log::notice('Alipay notify post data verification fail.', [
                'data' => Request::instance()->getContent()
            ]);
            return 'fail';
        }

        // 判斷通知類型。
        switch (Input::get('trade_status')) {
            case 'TRADE_SUCCESS':
            case 'TRADE_FINISHED':
                // TODO: 支付成功,取得訂單号進行其它相關操作。
                Log::debug('Alipay notify get data verification success.', [
                    'out_trade_no' => Input::get('out_trade_no'),
                    'trade_no' => Input::get('trade_no')
                ]);
                break;
        }

        return 'success';
    }