• laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案)


    首先我们来探讨如何在Laravel应用中使用支付宝进行支付,对此,GitHub上有很多相关的包,其中最流行的两个包:Omnipay For Laravel 5 & Lumen 和 Laravel AliPay。这里使用的是Laravel AliPay来做案例说明:

    准备工作 :支付宝账号 /蚂蚁金服开放平台账号---> 支付宝签约(即时到账)
    到项目根目录执行命令安装包

    composer require latrell/alipay dev-master

    执行更新

    composer update

    执行更新后,到vendor目录里面看一下有没有latrell目录,如果有说明安装成功,反之没有。因为latrell目录下放的是alipay相关文件

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

    'providers' => [
             /*
              * Laravel Framework Service Providers...
              */
              
              'LatrellAlipayAlipayServiceProvider',
            ]

    执行命令,生成配置文件到config/目录下

    php artisan vendor:publish

    配置说明

    配置文件 config/latrell-alipay.php 为公共配置信息文件

    config/latrell-alipay-web.php 为Web版支付宝SDK配置

    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','HomealipayController@Alipay');  // 发起支付请求
    Route::any('notify','HomealipayController@AliPayNotify'); //服务器异步通知页面路径
    Route::any('return','HomealipayController@AliPayReturn');  //页面跳转同步通知页面路径

    支付宝扫码支付案例代码

    <?php
    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 2017/2/8
     * Time: 20:19
     */
    
    namespace AppHttpControllersHome;
    
    use AppHttpControllersController;
    use IlluminateHttpRequest;
    use IlluminateSupportFacadesLog;
    
    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 AppHttpControllersHome;
    
    use AppHttpControllersController;
    use IlluminateHttpRequest;
    use IlluminateSupportFacadesLog;
    
    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上说的很清楚明白

  • 相关阅读:
    L2TP协议
    PPP协议
    centos 更新linux内核
    关于GRUB2
    误删除libc.so.6 恢复
    LVS DR模式 负载均衡服务搭建
    进程地址空间分布和可执行文件分布
    centos 开机启动服务
    【netcore基础】ConcurrentDictionary 使用字符串作为key给代码加锁且使用EF事物防止并发调用数据混乱的问题
    【年终总结】个人的2018年年终总结
  • 原文地址:https://www.cnblogs.com/zmdComeOn/p/10345650.html
Copyright © 2020-2023  润新知