美文网首页LNMP集合PHP实战
在laravel5中使用支付宝支付

在laravel5中使用支付宝支付

作者: hyperbolaa | 来源:发表于2017-04-11 23:37 被阅读63次

    Github 地址

    https://github.com/hyperbolaa/Alipay
    

    安装alipay

    composer require hyperbolaa/alipay dev-master
    

    更新你的依赖包 composer update 或者全新安装 composer install

    使用

    要使用支付宝SDK服务提供者,你必须自己注册服务提供者到Laravel/Lumen服务提供者列表中。
    基本上有两种方法可以做到这一点。

    Laravel

    找到 config/app.php 配置文件中,key为 providers 的数组,在数组中添加服务提供者。

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

    运行 php artisan vendor:publish 命令,发布配置文件到你的项目中。

    Lumen

    bootstrap/app.php里注册服务。

    //Register Service Providers
    $app->register(Hyperbolaa\Alipay\AlipayServiceProvider::class);
    

    由于Lumen的artisan命令不支持vendor:publish,需要自己手动将src/config下的配置文件拷贝到项目的config目录下,
    并将config.php改名成alipay.php,
    mobile.php改名成alipay-mobile.php,
    web.php改名成alipay-web.php.

    说明

    配置文件 config/alipay.php 为公共配置信息文件, config/alipay-web.php 为Web版支付宝SDK配置, config/alipay-mobile.php 为手机端支付宝SDK配置。

    web版使用

        // 创建支付单。
        $alipay = app('alipay.web');
        $alipay->setOutTradeNo('order_id');
        $alipay->setTotalFee('order_price');
        $alipay->setSubject('goods_name');
        $alipay->setBody('goods_description');
        
        $alipay->setQrPayMode('4'); //该设置为可选,添加该参数设置,支持二维码支付。
    
        // 跳转到支付页面。
        return redirect()->to($alipay->getPayLink());
    

    手机端使用

        // 创建支付单。
        $alipay = app('alipay.mobile');
        $alipay->setOutTradeNo('order_id');
        $alipay->setTotalFee('order_price');
        $alipay->setSubject('goods_name');
        $alipay->setBody('goods_description');
    
        // 返回签名后的支付参数给支付宝移动端的SDK。
        return $alipay->getPayPara();
    

    结果通知

    网页

        /**
         * 异步通知
         */
        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');
        }
    

    手机端

        /**
         * 支付宝异步通知
         */
        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';
        }
    

    Related

    • Ylpay 基于laravel5的POS通支付
    • Unionpay 基于laravel5的银联支付
    • Wechatpay 基于laravel5的微信支付
    • Alisms 基于laravel5的阿里云短信

    相关文章

      网友评论

        本文标题:在laravel5中使用支付宝支付

        本文链接:https://www.haomeiwen.com/subject/fsdpattx.html