Browse Source

退款减paid_money

master
李可松 4 years ago
parent
commit
a7befed6d4
  1. 21
      app/AdminAgent/Extensions/Grid/AuditRefund.php

21
app/AdminAgent/Extensions/Grid/AuditRefund.php

@ -50,11 +50,8 @@ class AuditRefund extends RowAction
//修改订单状态
$order = Order::firstWhere(['id' => $this->getKey(), 'agent_id' => $agent->id, 'status' => OrderStatus::REFUNDING]);
if (!$order) {
return $this->response()->error("退款订单不存在或已处理过了")->refresh();
throw new \Exception("退款订单不存在或已处理过了");
}
$order->verify_code = ''; //清空核销码
$order->status = OrderStatus::REFUNDED;
$order->save();
//查看原来的支付信息,可能存在多条支付记录
$log = UserMoneyLog::query()
@ -67,10 +64,10 @@ class AuditRefund extends RowAction
$setting = AdminSetting::val(['payee_appid', 'payee_mchid', 'payee_mchkey']);
if (!isset($setting['payee_appid'], $setting['payee_mchid'], $setting['payee_mchkey'])) {
return $this->response()->error('获取系统配置失败');
throw new \Exception('获取系统配置失败');
}
//微信发起退款申请
//微信发起退款申请
$config = config('wechat.payment.default');
$config = array_merge($config, [
'app_id' => $setting['payee_appid'],
@ -83,7 +80,9 @@ class AuditRefund extends RowAction
$app = Factory::payment($config);
// 参数分别为:微信订单号、商户退款单号、订单金额、退款金额、其他参数
$refund_money = 0;
foreach ($log as $k=>$v) {
$refund_money = $refund_money + $v->money;
$refund_no = $order->refund_info['refund_no'] . '-' . $v['id'];
$money = intval($v->money * 100);
$result = $app->refund->byTransactionId($v->transaction_id, $refund_no, $money, $money);
@ -101,15 +100,21 @@ class AuditRefund extends RowAction
'created_at' => now(), //模型没有updated_at,无法自动写入时间
]);
} else {
return $this->response()->error("操作失败,失败原因:" . ($result['return_msg']??'未知'))->refresh();
throw new \Exception("操作失败,失败原因:" . ($result['return_msg']??'未知'));
}
}
//保存到订单表
$order->verify_code = ''; //清空核销码
$order->status = OrderStatus::REFUNDED;
$order->paid_money = DB::raw('`paid_money` - ' . $refund_money);
$order->save();
DB::commit();
return $this->response()->success("操作成功,款项将原路退还")->refresh();
} catch (\Exception $e) {
DB::rollBack();
return $this->response()->error($e->getMessage());
return $this->response()->error($e->getMessage())->refresh();
}
}

Loading…
Cancel
Save