十、Laravel使用支付宝支付接口

看官方文档经过各种必要操作直接上手,下载demo和sdk,laravel扩展包很多,
推荐OmniPay-laravel,星星数也很多,但这里我们用官方原生sdk,这是是demo下载地址,下载后运行index.php,发现有挺多功能,,还有sdk下载地址,下载好了后我们开始动手。
1、在app/新建libs文件夹,将SDK包放在该目录下(我把SDK和Demo包都一起)
十、Laravel使用支付宝支付接口_第1张图片
2、在composer.json文件,添加如下配置:

 "autoload": {  
        "classmap": [  
            "database",  
            "app/libs/alipay" //这里是自定义包的文件位置,我将我项目中的该SDK包命名为alipay 
        ],  
        "psr-4": {  
            "App\\": "app/"  
        }  
    },  

3、执行以下命令

composer dump-autoload     //当在包中加入新的类,需要更新autoloader  

4、设置/引入命名空间
AlipayTradeWapPayContentBuilder.php和AlipayTradeService.php设置命名空间

namespace App\libs\alipay\wappay\buildermodel;
namespace App\libs\alipay\wappay\service;

对alipay/aop/request/AlipayTradeWapPayRequest.php和alipay/aop/AopClient.php设置命名空间,我设置的是:

namespace App\libs\alipay\aop\request;
namespace App\libs\alipay\aop;

在需要用到的服务(AlipayTradeService.php)中引入上面两个命名空间:

use App\libs\alipay\aop\request\AlipayTradeWapPayRequest;
use App\libs\alipay\aop\AopClient;

将AlipayTradeService.php中的下面代码注释:

// require_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'./../../AopSdk.php';
// require dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'./../../config.php';

5、在laravel项目目录下的config目录新建一个alipay.php

return [

            //应用ID,您的APPID。
        'app_id' => "",

        //商户私钥,您的原始格式RSA私钥
        'merchant_private_key' => "",
        
        //异步通知地址
        'notify_url' => "",
        //http://工程公网访问地址/alipay.trade.wap.pay-PHP-UTF-8/notify_url.php

        //同步跳转
        'return_url' => "",
        //http://mitsein.com/alipay.trade.wap.pay-PHP-UTF-8/return_url.php
        // jk.mrwangqi.com

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

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

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

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

6、定义接口

setBody($body);
        $payRequestBuilder->setSubject($subject);
        $payRequestBuilder->setOutTradeNo($out_trade_no);
        $payRequestBuilder->setTotalAmount($total_amount);
        $payRequestBuilder->setTimeExpress($timeout_express);

        $config = config('alipay');
        $payResponse = new AlipayTradeService($config);
        $result=$payResponse->wapPay($payRequestBuilder,$config['return_url'],$config['notify_url']);

        return ;
    }
}

7、要注意的一点是同步路由是GET形式调用,而异步路由是POST形式调用,在调用支付接口的时候会出现CSRF错误,现在最简单的方法是利用laravel的中间件避免CSRF,在app/Http/Middleware/VerifyCsrfToken.php中增加路由 protected

$except = [
        //
        'alipay/pay',
        'alipay/return',
        'alipay/notify'
    ];

修改冲突

Cannot redeclare Encrypt() (previously declared in .../vendor/laravel/lumen-framework/src/helpers.php:126)
//或:
Cannot redeclare Decrypt() (previously declared in .../vendor/laravel/lumen-framework/src/helpers.php:126)

这是因为Laravel 5使用Alipay SDK时,Laravel内带的加密解密函数Encrypt()/Decrypt()函数和Alipay SDK中的加密解密函数Encrypt()/Decrypt()函数命名冲突

解决方法:只需修改Alipay SDK中定义的函数名称,修改引用的函数名称。

修改步骤:

在Alipay SDK中,一共有需要修改三个文件的内容:

aop/AopEncrypt.php
aop/AopClient.php
lotusphp_runtime/Cookie/Cookie.php
在文件中查找encrypt/decrypt替换为alipayEncrypt/alipayDecrypt即可。
后续出现其他问题百度可以解决
十、Laravel使用支付宝支付接口_第2张图片

你可能感兴趣的:(支付宝)