6
0
Fork 0
jiqu-library-server/app/Services/PayService.php

87 lines
2.2 KiB
PHP

<?php
namespace App\Services;
use App\Constants\PayWay;
use App\Exceptions\BizException;
use App\Models\Order;
use App\Models\PayLog;
class PayService
{
/**
* 支付成功
*
* @param string $sn
* @param array $params
* @return \App\Models\PayLog
*
* @throws \App\Exceptions\BizException
*/
public function paySuccess(string $sn, array $params = []): PayLog
{
$payLog = PayLog::where('pay_sn', $sn)->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;
}
}