可以参考 yansongda网站: https://pay.yansongda.cn/docs/v2/
1.首先准备好自己支付宝开发平台,密钥,公钥,appid,支付宝网关,这些自己在平台上可以自己搞定如图所示
2.接着准备好laravel8项目,可以临时模拟一下,在模拟之前,首先要清楚各个目录之间的含义,这里只讲经常用到的几个目录,作为了解,具体了解可以去参看官方平台。
2.1 这个安装包去支付宝开发平台去下载。然后解压开,移动到自己项目的入口文件下,
2.2 里面的文件目录列表 展示
3. 搞定完这些,接下来可以先走一遍demo,demo测试没问题后,即可以编写。运行时直接域名后面跟上/plugins/alipay/index.php 具体文件可以看图2.2 运行完之后会自动跳转,成功即可。 运行前先配置一下 配置在/plugins/alipay/config.php 如下图所示
**5.面测试通过后即可以编写 支付页面简单编写一下,可以使用demo里的模板 **
<form name=alipayment action='/plugins/alipay/pagepay/pagepay.php' method=post target="_blank">
<div id="body1" class="show" name="divcontent">
<dl class="content">
<dt>商户订单号 :</dt>
<dd>
<input id="WIDout_trade_no" value="{{$order['out_trade_no']}}" name="WIDout_trade_no" />
</dd>
<hr class="one_line">
<dt>订单名称 :</dt>
<dd>
<input id="WIDsubject" value="{{$order['subject']}}" name="WIDsubject" />
</dd>
<hr class="one_line">
<dt>付款金额 :</dt>
<dd>
<input id="WIDtotal_amount" value="{{$order['total_amount']}}" name="WIDtotal_amount" />
</dd>
<hr class="one_line">
<dt>商品描述:</dt>
<dd>
<input id="WIDbody" value="{{$order['body']}}" name="WIDbody" />
</dd>
<hr class="one_line">
<dt></dt>
<dd id="btn-dd">
<span class="new-btn-login-sp">
<button class="new-btn-login" type="submit" style="text-align:center;">付 款</button>
</span>
<span class="note-help">如果您点击“付款”按钮,即表示您同意该次的执行操作。</span>
</dd>
</dl>
</div>
</form>
6.定义好异步路由和回调路由
Route::get('pay/notify',[PayController::class,'notify'])->name('admin.pay.notify');
//回调
Route::get('pay/callback',[PayController::class,'callback'])->name('admin.pay.callback');
7.控制器里写上接受的参数,为了直观,先手动写上数据,渲染到要支付的页面视图 图5即是视图
public function index(){
$time=date('YmdHis');
$order=[
'out_trade_no'=>'DDE5813E296D36DD82D4A139A092E782',
'subject'=>'海南力源信息科技有限公司',
'total_amount'=>68888,
'body'=>'游戏运营推广代充(天子御花园)+无需经验',
];
return view('admin.pay.index',compact('order'));
}
8.上面都执行成功后,它会自动回调,返回参数,所以我们只需要写上回调方法即可
public function callback(Request $request){
$data=$request->all();
//引入第三类 也有其他引入方式 不建议这种原生的引入 支付宝平台的包有点问题,这种引入不会报错
require_once "./plugins/alipay/config.php";
require_once "./plugins/alipay/pagepay/service/AlipayTradeService.php";
$alipayService=new \AlipayTradeService($config);
$request=$alipayService->check($data);
if ($request){
echo "支付成功";
// return redirect('')->with();//重定向某个页面,并给出提示
}else{
echo "支付失败";
// return redirect()->withErrors();//重定向某个页面,并给出提示
}
}
9.第8步回调的时候,会报一个错误,Cannot redeclare Encrypt()
原因:
因为laravel框架中的Encrypt()/Decrypt()定义的加密方法和解密方法 和 alipay SDK中的Encrypt()/Decrypt()方法重名了
解决方法:
在引入的SDK中,全局搜索Encrypt()/Decrypt(),然后改个方法改名就好了,比如改成alipayEncrypt()/alipayDecrypt();
要改的文件
aop/AopEncrypt.php
aop/AopClient.php
如上图所示,把encrypt和decrypt加个前缀alipay即可,记得改完后用小驼峰。