当前位置: 代码迷 >> 综合 >> laravel8+php+支付宝沙箱测试 配置沙箱环境
  详细解决方案

laravel8+php+支付宝沙箱测试 配置沙箱环境

热度:32   发布时间:2023-10-20 16:13:55.0

可以参考 yansongda网站: https://pay.yansongda.cn/docs/v2/
1.首先准备好自己支付宝开发平台,密钥,公钥,appid,支付宝网关,这些自己在平台上可以自己搞定如图所示

laravel8+php+支付宝沙箱测试 配置沙箱环境
2.接着准备好laravel8项目,可以临时模拟一下,在模拟之前,首先要清楚各个目录之间的含义,这里只讲经常用到的几个目录,作为了解,具体了解可以去参看官方平台。
2.1 这个安装包去支付宝开发平台去下载。然后解压开,移动到自己项目的入口文件下,laravel8+php+支付宝沙箱测试 配置沙箱环境
2.2 里面的文件目录列表 展示
laravel8+php+支付宝沙箱测试 配置沙箱环境
3. 搞定完这些,接下来可以先走一遍demo,demo测试没问题后,即可以编写。运行时直接域名后面跟上/plugins/alipay/index.php 具体文件可以看图2.2 运行完之后会自动跳转,成功即可。 运行前先配置一下 配置在/plugins/alipay/config.php 如下图所示laravel8+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

laravel8+php+支付宝沙箱测试 配置沙箱环境
如上图所示,把encrypt和decrypt加个前缀alipay即可,记得改完后用小驼峰。