主要遇到三个问题:

1 如何引入支付宝的php库

1.1 把下载下来的文件放入web目录下的ali文件夹,然后控制器引入

require_once(“ali/pagepay/service/AlipayTradeService.php”);
require_once(“ali/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php”);

1.2.config配置文件可以直接写在config/params.php里,控制器里用

$config = Yii::$app->params["config"];引用配置文件

<?php
    //config/params.php
return [
    'adminEmail' => 'nbllq@qq.com',
    //'alldata' => 'test'
    "config" => [   
        //应用ID,您的APPID。
        'app_id' => "your id",

        //商户私钥
        'merchant_private_key' => "your key",

        //异步通知地址
        'notify_url' => "外网地址",

        //同步跳转
        'return_url' => "本地地址",

        //编码格式
        'charset' => "UTF-8",

        //签名方式
        'sign_type'=>"RSA2",

        //支付宝网关
        'gatewayUrl' => "https://openapi.alipaydev.com/gateway.do",

        //支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
        'alipay_public_key' => "your key",
]
];

1.3 $aop = new \AlipayTradeService($config); 注意前面的\,如果不加会报错

2. 页面传递给支付宝乱码

解决方法:控制器对应的php文件编码格式改成无bom的utf-8

3.官方的return_url.php验签成功,但是移植到控制器中验签失败

主要是yii2框架的url路由规则影响的,其他框架可能不会有这个问题
解决方法:开启url美化或者把传递的参数中r=对应的控制器参数去掉后再传递,参考代码:

    public function actionAlireturnurl()
    {   
        header("Content-Type: text/html;charset=utf-8");

        $arr = Yii::$app->request->get();
        $rc=array_shift($arr); //!!!!去除r控制器参数,不然验sign会失败!!!!!!花了我一天时间找这个bug,fuck!
        //$alipaySevice = new \AlipayTradeService(Yii::$app->params["config"]); 
        //$result = $alipaySevice->check($arr);
        $config = Yii::$app->params["config"];
        $aop = new \AlipayTradeService($config);
        $result = $aop->check($arr);
        /* 实际验证过程建议商户添加以下校验。
        1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
        2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
        3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
        4、验证app_id是否为该商户本身。
    */

    //  print_r($arr2);
        if($result) {//验证成功
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //请在这里加上商户的业务逻辑程序代码

            //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
            //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表

            //商户订单号
            $out_trade_no = htmlspecialchars($_GET['out_trade_no']);

            //支付宝交易号
            $trade_no = htmlspecialchars($_GET['trade_no']);

            //交易金额
            $total_amount =htmlspecialchars($_GET['total_amount']);

            echo "ok";

            //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——


            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        }
        else {
            //验证失败
            echo "fail";
        }

    }