第一步 开发中心>网页&移动应用下支付接入

第二步 创建应用后需添加可支付的方式

第三步 配置公钥与私钥

工具下载地址
Windows :http://p.tb.cn/rmsportal_6680_secret_key_tools_RSA_win.zip
Mac:http://p.tb.cn/rmsportal_6680_secret_key_tools_RSA_macosx.zip
第四步 在创建新应用中把工具刚刚生成的公钥,设置应用公钥(下图已经设置,所以为查看,设置成功会自动出现查看支付宝公钥,同时支付宝公钥是需要在项目config文件需要用到的,千万不要弄错)

第五步 composer require yansongda/laravel-pay 支付组件
第六步 composer require simplesoftwareio/simple-qrcode 二维码生成器
第七步 laravel 配置文件 /config 目录下新建 alipay.php 文件 写入以下内容
<?php return [ 'pay'=>[ 'app_id'=>'',// 支付宝 支付成功后 主动通知商户服务器地址 注意 是post请求。服务器异步通知页面路径,根据自己项目路径做相应的修改。外网可访问的地址,本地不跳转 'notify_url' => 'http://jinghuajuanke.cn/api/home/ali_pay_ntify', // 支付宝 支付成功后 回调页面 get//页面跳转同步通知页面路径。 'return_url' => 'http://jinghuajuanke.cn/#/pay_success',//支付宝公钥 'ali_public_key'=>'', //商家应用私钥 'private_key'=>'', 'log'=>[ 'file'=>'../storage/logs/alipay.log', 'level'=>'info',//建设生产环境下info,开发环境下debug 'type'=>'single',//optional 可选daily 'max_file'=>30 //optional 当type是daily时有效,默认是30天 ], 'http'=>[ 'timeout'=>5.0, 'connect_timeout'=>5.0, ] ] ] ?>
第八步 控制器。
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Services\OrderService;
use Illuminate\Http\Request;
use Yansongda\Pay\Pay;
use Yansongda\Pay\Log;
use SimpleSoftwareIO\QrCode\Facades\QrCode;
use Illuminate\Support\Facades\DB;
class AlipaysController extends Controller
{
// 手机网页支付接口
public function aliPay(Request $request)
{
$aliPayOrder = [
'out_trade_no' => time(),
'total_amount' => $order->total_amount, // 支付金额
'subject' => $request->subject ?? '支付宝手机网页支付' // 备注
];
$config = config('alipay.pay');
$config['return_url'] = $config['return_url'].'?id='.$request->id;
$config['notify_url'] = $config['notify_url'].'?id='.$request->id;
return Pay::alipay($config)->wap($aliPayOrder);
}
// app支付接口
public function aliPayApp(Request $request)
{
$aliPayOrder = [
'out_trade_no' => time(),
'total_amount' => $order->total_amount, // 支付金额
'subject' => $request->subject ?? '默认' // 备注
];
$config = config('alipay.pay');
$config['return_url'] = $config['return_url'].'?id='.$request->id;
return Pay::alipay($config)->app($aliPayOrder);
}
// 支付宝扫码支付 当面付
public function alipay(Request $req){
$aliPayOrder=[
'out_trade_no'=>time(),
'total_amount'=>'0.01',//支付金额
'subject'=> $req->subject ?? '扫码支付' //备注
];
$config=config('alipay.pay');
$config['return_url']=$config['return_url'].'?order_guid='.$req->order_guid;
$scan =Pay::alipay($config)->scan($aliPayOrder);
if(empty($scan->code) || $scan->code !=='10000' ) return false;
$url=$scan->qr_code.'?order_guid='.$req->order_guid;
//生成二维码 order_guid是订单编号 subject是显示支付说明
return QrCode::encoding('UTF-8')->size(300)->generate($url);
}
// 支付成功后 支付宝服务通知本项目服务器
// post 请求
// 这里只是大概写一下逻辑,具体的安全防护 自己再去做限制
public function aliPayNtify(Request $request, OrderService $orderService)
{
$order = Order::find($request->id);
// 更新自己项目 订单状态
if(!empty($order)) $orderService->payOrder($order);
}
// 支付宝退款
public function aliPayRefund(Request $request)
{
try {
$payOrder = [
'out_trade_no' => $order->out_trade_no, // 商家订单号
'refund_amount' => $order->total_amount, // 退款金额 不得超过该订单总金额
'out_request_no' => Common::getUuid() // 同一笔交易多次退款标识(部分退款标识)
];
$config = config('alipay.pay');
// 返回状态码 code 10000 成功
$result = Pay::alipay($config)->refund($payOrder);
if (empty($result->code) || $result->code !== '10000') throw new \Exception('请求支付宝退款接口失败');
// 订单改为 已退款状态
// ~~自己商城的订单状态修改逻辑
} catch (\Exception $exception) {
\Log::error($exception->getMessage());
return false;
}
}
}
?>
第九步 以前的坑(勿踩)

再停止使用沙箱功能,用正式账号时,请注释掉此配置
注意:
1,当出现这个错误时:
