zoukankan      html  css  js  c++  java
  • 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上说的很清楚明白

  • 相关阅读:
    Sql Server 2008卸载后再次安装一直报错
    listbox 报错 Cannot have multiple items selected when the SelectionMode is Single.
    Sql Server 2008修改Sa密码
    学习正则表达式
    Sql Server 查询第30条数据到第40条记录数
    Sql Server 复制表
    Sql 常见面试题
    Sql Server 简单查询 异步服务器更新语句
    jQuery stop()用法以及案例展示
    CSS3打造不断旋转的CD封面
  • 原文地址:https://www.cnblogs.com/zmdComeOn/p/10345650.html
Copyright © 2011-2022 走看看