Menu

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

支付宝退款

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

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()

本文章首发在 Laravel China 社区

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

上一篇 下一篇
讨论数量: 12

Bernard
Ajax 错误?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
seeker
线上的支付宝支付流程,求指教。能讲解一下吗?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
holashatu
退款是不是没有考虑到异常的情况?
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
youxia
如果针对的是订单中的某一个 orderitem 进行退款怎么处理?
1 个点赞 | 2 个回复 | 问答 | 课程版本 5.5
Damian
LA.TOKEN 有值但是无法通过 csrf 验证是为什么?
0 个点赞 | 6 个回复 | 问答 | 课程版本 5.5
Fykex
二次申请退款成功后是不是应该清空退款理由?
1 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
finley
service 好久没用了,之前一些章节是否有些过于臃肿了!
0 个点赞 | 0 个回复 | 问答 | 课程版本 5.5
lixiaode
为什么后台发起退款的时候,出现了服务器 500 错误。
0 个点赞 | 5 个回复 | 问答 | 课程版本 5.5
Sher
Uuid 是 Laravel 自身的还是安装其他包带进去?
1 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
xiaohang89
后台发起退款的时候,出现了服务器 500 错误。
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
yangwb1
我发现一个 bug,后台发货后,前端未收货,直接退款
0 个点赞 | 0 个回复 | 问答 | 课程版本 5.5
刻意练习,每日精进。
1
点赞
153
浏览
12
讨论