1,支付宝实名认证的商家账号,签约电脑网站支付
2,登录蚂蚁金服开放平台,创建应用,添加签约产品(电脑网站支付,手机网站支付等)等待审核通过。
3,配置密钥和授权回调地址。授权回调地址就是你的notify方法的网址,注意前面要加http://
4,下载yansongda/pay支付组件通过composer命令
composer require yansongda/pay -vvv
5, laravel5.5的routes文件夹下的web.php加入
//支付宝支付处理路由 Route::get('alipay','AlipayController@Alipay'); // 发起支付请求 Route::any('notify','AlipayController@AliPayNotify'); //服务器异步通知页面路径 Route::any('return','AlipayController@AliPayReturn'); //页面跳转同步通知页面路径
6.在控制器里加入以下代码
<?php 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()` } }
将私钥文件里面的去除-----BEGIN RSA PRIVATE KEY-----与-----END RSA PRIVATE KEY-----,将剩下的内容合并为一行,需添加到配置文件中
7.以下是踩过的坑
如果你想更新yansongda/pay 支付组件,在本地composer下载后传上服务器的话一定要记得,把vendor文件夹一并传上服务器替换调以前的vendor文件夹,不然会报错 类找不到,因为你在本地composer更新的话,vendor文件夹下的composer文件夹也会发生变化,为以防万一应把vendor文件夹一并更新
如果遇到下面这个错误就是你没有屏蔽下面的代码,导致进入沙箱模式
'mode' => 'dev', // optional,设置此参数,将进入沙箱模式
沙箱模式的支付宝网关 https://openapi.alipaydev.com/gateway.do
线上应用的支付宝网关 https://openapi.alipay.com/gateway.do
3) 如果出现以下的错误,是因为在控制器里的公钥或私钥不正确 注意公钥指的是支付宝公钥不是应用公钥,
上一篇: 《建站管家》二次开发文档
下一篇: 支付宝手机网站支付实例代码