firstOrFail(); if (! $payLog->isPending()) { throw new BizException('支付记录状态异常'); } $payLog->update([ 'pay_at' => $params['pay_at'] ?? now(), 'out_trade_no' => $params['out_trade_no'] ?? null, 'status' => PayLog::STATUS_SUCCESS, ]); if ($payLog->payable instanceof Order) { switch ($payLog->pay_way) { case PayWay::WXPAY_APP: case PayWay::WXPAY_H5: case PayWay::WXPAY_JSAPI: case PayWay::WXPAY_MINI: case PayWay::WXPAY_NATIVE: $payWay = Order::PAY_WAY_WXPAY; break; default: $payWay = $payLog->pay_way; break; } (new OrderService())->paySuccess($payLog->payable, [ 'pay_sn' => $payLog->pay_sn, 'pay_way' => $payWay, 'pay_at' => $payLog->pay_at, 'out_trade_no' => $payLog->out_trade_no, ]); } return $payLog; } /** * 支付失败 * * @param string $sn * @param array $params * @return \App\Models\PayLog * * @throws \App\Exceptions\BizException */ public function payFailed(string $sn, array $params = []): PayLog { $payLog = PayLog::where('pay_sn', $sn)->firstOrFail(); if (! $payLog->isPending()) { throw new BizException('支付记录状态异常'); } $payLog->update([ 'out_trade_no' => $params['out_trade_no'] ?? null, 'status' => PayLog::STATUS_FAILED, 'failed_reason' => $params['failed_reason'] ?? null, ]); return $payLog; } }