chunkById(200, function ($tasks) { foreach ($tasks as $task) { try { $method = 'refundBy'.Str::studly($task->order->pay_way); if (! method_exists($this, $method)) { throw new BizException('退款方式暂不支持'); } $this->{$method}($task); $task->update([ 'status' => OrderRefundTask::STATUS_SUCCESS, 'failed_reason' => null, ]); } catch (Throwable $e) { report($e); $task->update([ 'status' => OrderRefundTask::STATUS_FAILED, 'failed_reason' => $e->getMessage(), ]); } } }); return 0; } /** * 微信退款 * * @param \App\Models\OrderRefundTask $orderRefundTask * @return void */ protected function refundByWxpay(OrderRefundTask $orderRefundTask) { $order = $orderRefundTask->order; (new WeChatPayService())->refundByOutTradeNumber( $order->sn, $orderRefundTask->sn, $order->total_amount, $orderRefundTask->amount, [ 'refund_desc' => $orderRefundTask->reason, ] ); } }