看官方文档经过各种必要操作直接上手,下载demo和sdk,laravel扩展包很多,
推荐OmniPay-laravel,星星数也很多,但这里我们用官方原生sdk,这是是demo下载地址,下载后运行index.php,发现有挺多功能,,还有sdk下载地址,下载好了后我们开始动手。
1、在app/新建libs文件夹,将SDK包放在该目录下(我把SDK和Demo包都一起)
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即可。
后续出现其他问题百度可以解决