8.8. 管理后台 - 同意退款(支付宝)

本教程最新版为 8.x,当前版本已放弃维护,请阅读最新版本!

支付宝退款

上一节我们完成了拒绝退款的逻辑,这一节我们要实现同意退款的逻辑。

1. 生成退款订单号

不管是支付宝还是微信,在申请退款的时候都需要我们提交一个唯一字符串作为退款订单号,之后可以通过退款订单号来查询退款进度,退款的回调也会带上退款订单号。

我们选择在 Order 模型中写这个逻辑:

app\Models\Order.php

use Ramsey\Uuid\Uuid;
.
.
.
    public static function getAvailableRefundNo()
    {
        do {
            // Uuid类可以用来生成大概率不重复的字符串
            $no = Uuid::uuid4()->getHex();
            // 为了避免重复我们在生成之后在数据库中查询看看是否已经存在相同的退款订单号
        } while (self::query()->where('refund_no', $no)->exists());

        return $no;
    }

2. 控制器

接下来我们要完善一下我们之前在 OrdersController 里的 handleRefund() 方法,由于调用退款的逻辑比较多,因此我们单独拆出一个方法 _refundOrder()

本文章首发在 LearnKu.com 网站上。

为了保证课程的高品质,我们需要对课程进行收费。付费后 才能观看剩余内容。 购买

上一篇 下一篇
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 21

xiaohang89
后台发起退款的时候,出现了服务器 500 错误。
2 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
Damian
LA.TOKEN 有值但是无法通过 csrf 验证是为什么?
1 个点赞 | 6 个回复 | 问答 | 课程版本 5.5
Neymar
self::query () 与 static::query () 的问题
1 个点赞 | 5 个回复 | 问答 | 课程版本 5.7
小花儿
我发现一个 bug,后台发货后,前端未收货,直接退款
1 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
youxia
如果针对的是订单中的某一个 orderitem 进行退款怎么处理?
1 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
Sher
Uuid 是 Laravel 自身的还是安装其他包带进去?
1 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
Fykex
二次申请退款成功后是不是应该清空退款理由?
1 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
finley
service 好久没用了,之前一些章节是否有些过于臃肿了!
1 个点赞 | 0 个回复 | 问答 | 课程版本 5.5
livelys
关于退款问题?
0 个点赞 | 7 个回复 | 问答 | 课程版本 5.7
lixiaode
为什么后台发起退款的时候,出现了服务器 500 错误。
0 个点赞 | 6 个回复 | 问答 | 课程版本 5.5
Bernard
Ajax 错误?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
phpervip
后台对已申请退款的订单点同意后报 409 unknown status
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
gyp719
支付宝退款异常
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
KunHong
发起退款后,500 错误
0 个点赞 | 1 个回复 | 问答 | 课程版本 6.x
laraverer
支付宝退款报错
0 个点赞 | 1 个回复 | 问答 | 课程版本 6.x
JasonG
关于同意退款后对于商品库存的影响
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.8
holashatu
退款是不是没有考虑到异常的情况?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
seeker
线上的支付宝支付流程,求指教。能讲解一下吗?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
cocaomouse
订单退款,旧订单会退款失败
0 个点赞 | 0 个回复 | 问答 | 课程版本 8.x