You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
aquaculture/app/Admin/Actions/Post/OrderRefundAction.php

74 lines
2.3 KiB

<?php
namespace App\Admin\Actions\Post;
use App\Enums\OrderShipStatusEnum;
use App\Enums\OrderStatusEnum;
use App\Models\Order;
use Encore\Admin\Actions\RowAction;
use Illuminate\Http\Request;
use Yansongda\Pay\Pay;
class OrderRefundAction extends RowAction
{
// 动作名称,显示在界面上的按钮文本
public $name = '退款';
/**
* 处理订单退款的逻辑
*
* @param Order $order 当前订单模型实例
* @param Request $request 当前请求实例
* @return \Encore\Admin\Actions\Response 返回操作结果的响应
*/
public function handle(Order $order, Request $request)
{
// 检查订单状态是否为申请退款
if ($order->status != OrderStatusEnum::APPLY_REFUND) {
// 如果当前状态不允许退款,返回错误信息
return $this->response()->error('订单当前状态禁止退款');
}
// 创建支付宝支付实例
$pay = Pay::alipay(config('pay.ali'));
// 准备退款数据
$refundData = [
'out_trade_no' => $order->no, // 订单号
'trade_no' => $order->pay_no, // 支付交易号
'refund_amount' => $order->pay_amount, // 退款金额
'refund_reason' => '正常退款', // 退款原因
];
try {
// 发起退款请求
$response = $pay->refund($refundData);
// 更新订单的退款信息
$order->pay_refund_fee = $response->get('refund_fee'); // 设置退款金额
$order->pay_trade_no = $response->get('trade_no'); // 设置退款交易号
$order->status = OrderStatusEnum::REFUND; // 更新订单状态为退款
$order->save(); // 保存订单的更改
} catch (\Exception $e) {
// 处理异常情况
// abort(500, $e->getMessage()); // 可选:抛出异常
return $this->response()->error('服务器异常,请稍后再试'); // 返回错误信息
}
// 返回成功响应并刷新页面
return $this->response()->success('退款成功.')->refresh();
}
/**
* 显示退款确认对话框
*
* @return void
*/
public function dialog()
{
// 确认退款操作
$this->confirm('退款会直接把钱退回到支付账户,是否继续');
}
}