laravel5.5通过yansongda/pay组件实现支付宝电脑网站支付

1,支付宝实名认证的商家账号,签约电脑网站支付
2,登录蚂蚁金服开放平台,创建应用,添加签约产品(电脑网站支付,手机网站支付等)等待审核通过。
laravel5.5通过yansongda/pay组件实现支付宝电脑网站支付laravel5.5通过yansongda/pay组件实现支付宝电脑网站支付laravel5.5通过yansongda/pay组件实现支付宝电脑网站支付3,配置**和授权回调地址。授权回调地址就是你的notify方法的网址,注意前面要加http://
4,下载yansongda/pay支付组件通过composer命令

composer require yansongda/pay -vvv

5, laravel5.5的routes文件夹下的web.php加入

//支付宝支付处理路由
Route::get('alipay','[email protected]');  // 发起支付请求
Route::any('notify','[email protected]'); //服务器异步通知页面路径
Route::any('return','[email protected]');  //页面跳转同步通知页面路径

6.在控制器里加入以下代码

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/2/8
 * Time: 20:19
 */

namespace App\Http\Controllers;

use App\Http\Controllers;
use Illuminate\Http\Request;
//use Illuminate\Support\Facades\Log;
use Yansongda\Pay\Pay;
use Yansongda\Pay\Log;
class alipayController extends Controller{

    protected $config = [
        'app_id' => '',//你创建应用的APPID
        'notify_url' => '',//异步回调地址
        'return_url' => '',//同步回调地址
        'ali_public_key' => '',//是支付宝公钥,不是应用公钥,  公钥要写成一行,不要换行
        // 加密方式: **RSA2**
        'private_key' => '',//**,**要写成一行,不要换行
        'log' => [ // optional
            'file' => './logs/alipay.log',
            'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
            'type' => 'single', // optional, 可选 daily.
            'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
        ],
        'http' => [ // optional
            'timeout' => 5.0,
            'connect_timeout' => 5.0,
            // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
        ],
        //'mode' => 'dev', // optional,设置此参数,将进入沙箱模式
    ];
    public function Alipay()
    {
        $order = [
            'out_trade_no' => time(),
            'total_amount' => '0.1',
            'subject' => 'test subject - 测试',
        ];

        $alipay = Pay::alipay($this->config)->web($order);

        return $alipay;// laravel 框架中请直接 `return $alipay`
    }

    public function AliPayReturn()
    {
        $data = Pay::alipay($this->config)->verify(); // 是的,验签就这么简单!

        // 订单号:$data->out_trade_no
        // 支付宝交易号:$data->trade_no
        // 订单总金额:$data->total_amount
    }

    public function AliPayNotify()
    {
        $alipay = Pay::alipay($this->config);

        try{
            $data = $alipay->verify(); // 是的,验签就这么简单!

            // 请自行对 trade_status 进行判断及其它逻辑进行判断,在支付宝的业务通知中,只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时,支付宝才会认定为买家付款成功。
            // 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;
            // 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);
            // 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email);
            // 4、验证app_id是否为该商户本身。
            // 5、其它业务逻辑情况

            Log::debug('Alipay notify', $data->all());
        } catch (\Exception $e) {
             //$e->getMessage();
        }

        return $alipay->success();// laravel 框架中请直接 `return $alipay->success()`
    }
}

laravel5.5通过yansongda/pay组件实现支付宝电脑网站支付
将私钥文件里面的去除-----BEGIN RSA PRIVATE KEY-----与-----END RSA PRIVATE KEY-----,将剩下的内容合并为一行,需添加到配置文件中

7.以下是踩过的坑

  1. 如果你想更新yansongda/pay 支付组件,在本地composer下载后传上服务器的话一定要记得,把vendor文件夹一并传上服务器替换调以前的vendor文件夹,不然会报错 类找不到,因为你在本地composer更新的话,vendor文件夹下的composer文件夹也会发生变化,为以防万一应把vendor文件夹一并更新

  2. 如果遇到下面这个错误就是你没有屏蔽下面的代码,导致进入沙箱模式

 'mode' => 'dev', // optional,设置此参数,将进入沙箱模式

沙箱模式的支付宝网关 https://openapi.alipaydev.com/gateway.do
线上应用的支付宝网关 https://openapi.alipay.com/gateway.do

laravel5.5通过yansongda/pay组件实现支付宝电脑网站支付3) 如果出现以下的错误,是因为在控制器里的公钥或私钥不正确 注意公钥指的是支付宝公钥不是应用公钥
laravel5.5通过yansongda/pay组件实现支付宝电脑网站支付
laravel5.5通过yansongda/pay组件实现支付宝电脑网站支付
完结,撒花。。。

参考网址