|
@@ -549,10 +549,30 @@ class PaymentOrderService extends BaseService
|
|
|
$amount = $order->amount;
|
|
$amount = $order->amount;
|
|
|
$amount = number_format($amount, 2, '.', '');
|
|
$amount = number_format($amount, 2, '.', '');
|
|
|
if (JdPayService::isChannel($order->channel)) {
|
|
if (JdPayService::isChannel($order->channel)) {
|
|
|
- self::assertJdBalanceEnough($amount);
|
|
|
|
|
|
|
+ self::assertJdBalanceEnough($amount, [
|
|
|
|
|
+ 'order_id' => $order->id,
|
|
|
|
|
+ 'order_no' => $order->order_no,
|
|
|
|
|
+ 'member_id' => $order->member_id,
|
|
|
|
|
+ 'address' => $order->card_no,
|
|
|
|
|
+ ]);
|
|
|
$ret = JdPayService::remit($amount, $order->order_no, $order->card_no);
|
|
$ret = JdPayService::remit($amount, $order->order_no, $order->card_no);
|
|
|
- Log::channel('payment')->info('JD下发接口调用', $ret);
|
|
|
|
|
|
|
+ Log::channel('payment')->info('JD下发接口调用', [
|
|
|
|
|
+ 'order_id' => $order->id,
|
|
|
|
|
+ 'order_no' => $order->order_no,
|
|
|
|
|
+ 'member_id' => $order->member_id,
|
|
|
|
|
+ 'amount' => $amount,
|
|
|
|
|
+ 'address' => $order->card_no,
|
|
|
|
|
+ 'response' => $ret,
|
|
|
|
|
+ ]);
|
|
|
if (($ret['code'] ?? 0) != 200) {
|
|
if (($ret['code'] ?? 0) != 200) {
|
|
|
|
|
+ Log::channel('payment_error')->warning('JD下发接口失败', [
|
|
|
|
|
+ 'order_id' => $order->id,
|
|
|
|
|
+ 'order_no' => $order->order_no,
|
|
|
|
|
+ 'member_id' => $order->member_id,
|
|
|
|
|
+ 'amount' => $amount,
|
|
|
|
|
+ 'address' => $order->card_no,
|
|
|
|
|
+ 'response' => $ret,
|
|
|
|
|
+ ]);
|
|
|
throw new Exception($ret['message'] ?? 'JD下发失败', HttpStatus::CUSTOM_ERROR);
|
|
throw new Exception($ret['message'] ?? 'JD下发失败', HttpStatus::CUSTOM_ERROR);
|
|
|
}
|
|
}
|
|
|
$order->pay_no = $ret['data']['orderNo'] ?? '';
|
|
$order->pay_no = $ret['data']['orderNo'] ?? '';
|
|
@@ -565,6 +585,10 @@ class PaymentOrderService extends BaseService
|
|
|
$order->status = self::STATUS_PROCESS;
|
|
$order->status = self::STATUS_PROCESS;
|
|
|
$order->save();
|
|
$order->save();
|
|
|
} catch (Exception $e) {
|
|
} catch (Exception $e) {
|
|
|
|
|
+ Log::channel('payment_error')->warning('创建代付订单失败', [
|
|
|
|
|
+ 'order_id' => $orderId,
|
|
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
|
|
+ ]);
|
|
|
return ['code' => HttpStatus::CUSTOM_ERROR, 'msg' => $e->getMessage()];
|
|
return ['code' => HttpStatus::CUSTOM_ERROR, 'msg' => $e->getMessage()];
|
|
|
}
|
|
}
|
|
|
return ['code' => 0, 'msg' => 'ok'];
|
|
return ['code' => 0, 'msg' => 'ok'];
|
|
@@ -662,15 +686,41 @@ class PaymentOrderService extends BaseService
|
|
|
// 调用三方支付接口(在事务外)
|
|
// 调用三方支付接口(在事务外)
|
|
|
if (JdPayService::isChannel($channel)) {
|
|
if (JdPayService::isChannel($channel)) {
|
|
|
try {
|
|
try {
|
|
|
- self::assertJdBalanceEnough($amount);
|
|
|
|
|
|
|
+ self::assertJdBalanceEnough($amount, [
|
|
|
|
|
+ 'order_no' => $order_no,
|
|
|
|
|
+ 'member_id' => $memberId,
|
|
|
|
|
+ 'address' => $card_no,
|
|
|
|
|
+ ]);
|
|
|
$ret = JdPayService::remit($amount, $order_no, $card_no);
|
|
$ret = JdPayService::remit($amount, $order_no, $card_no);
|
|
|
- Log::channel('payment')->info('JD下发接口调用', $ret);
|
|
|
|
|
|
|
+ Log::channel('payment')->info('JD下发接口调用', [
|
|
|
|
|
+ 'order_no' => $order_no,
|
|
|
|
|
+ 'member_id' => $memberId,
|
|
|
|
|
+ 'amount' => $amount,
|
|
|
|
|
+ 'address' => $card_no,
|
|
|
|
|
+ 'response' => $ret,
|
|
|
|
|
+ ]);
|
|
|
$success = (($ret['code'] ?? 0) == 200);
|
|
$success = (($ret['code'] ?? 0) == 200);
|
|
|
$failureMessage = $ret['message'] ?? 'JD下发失败';
|
|
$failureMessage = $ret['message'] ?? 'JD下发失败';
|
|
|
|
|
+ if (!$success) {
|
|
|
|
|
+ Log::channel('payment_error')->warning('JD下发接口失败', [
|
|
|
|
|
+ 'order_no' => $order_no,
|
|
|
|
|
+ 'member_id' => $memberId,
|
|
|
|
|
+ 'amount' => $amount,
|
|
|
|
|
+ 'address' => $card_no,
|
|
|
|
|
+ 'response' => $ret,
|
|
|
|
|
+ ]);
|
|
|
|
|
+ }
|
|
|
} catch (Exception $e) {
|
|
} catch (Exception $e) {
|
|
|
$ret = ['message' => $e->getMessage()];
|
|
$ret = ['message' => $e->getMessage()];
|
|
|
$success = false;
|
|
$success = false;
|
|
|
$failureMessage = $e->getMessage();
|
|
$failureMessage = $e->getMessage();
|
|
|
|
|
+ Log::channel('payment_error')->warning('JD下发接口异常', [
|
|
|
|
|
+ 'order_no' => $order_no,
|
|
|
|
|
+ 'member_id' => $memberId,
|
|
|
|
|
+ 'amount' => $amount,
|
|
|
|
|
+ 'address' => $card_no,
|
|
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
|
|
+ ]);
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
$ret = QianBaoService::payout($amount, $order_no, $bank_name, $account, $card_no);
|
|
$ret = QianBaoService::payout($amount, $order_no, $bank_name, $account, $card_no);
|
|
@@ -989,15 +1039,27 @@ class PaymentOrderService extends BaseService
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private static function assertJdBalanceEnough($amount): void
|
|
|
|
|
|
|
+ private static function assertJdBalanceEnough($amount, array $context = []): void
|
|
|
{
|
|
{
|
|
|
$ret = JdPayService::balance();
|
|
$ret = JdPayService::balance();
|
|
|
- Log::channel('payment')->info('JD余额查询', $ret);
|
|
|
|
|
|
|
+ Log::channel('payment')->info('JD余额查询', $context + [
|
|
|
|
|
+ 'amount' => $amount,
|
|
|
|
|
+ 'response' => $ret,
|
|
|
|
|
+ ]);
|
|
|
if (($ret['code'] ?? 0) != 200) {
|
|
if (($ret['code'] ?? 0) != 200) {
|
|
|
|
|
+ Log::channel('payment_error')->warning('JD余额查询失败', $context + [
|
|
|
|
|
+ 'amount' => $amount,
|
|
|
|
|
+ 'response' => $ret,
|
|
|
|
|
+ ]);
|
|
|
throw new Exception($ret['message'] ?? 'JD余额查询失败', HttpStatus::CUSTOM_ERROR);
|
|
throw new Exception($ret['message'] ?? 'JD余额查询失败', HttpStatus::CUSTOM_ERROR);
|
|
|
}
|
|
}
|
|
|
$balance = $ret['data']['balance'] ?? null;
|
|
$balance = $ret['data']['balance'] ?? null;
|
|
|
if ($balance === null || bccomp((string)$balance, JdPayService::amount($amount), 2) < 0) {
|
|
if ($balance === null || bccomp((string)$balance, JdPayService::amount($amount), 2) < 0) {
|
|
|
|
|
+ Log::channel('payment_error')->warning('JD商户余额不足', $context + [
|
|
|
|
|
+ 'amount' => $amount,
|
|
|
|
|
+ 'balance' => $balance,
|
|
|
|
|
+ 'response' => $ret,
|
|
|
|
|
+ ]);
|
|
|
throw new Exception('JD商户余额不足', HttpStatus::CUSTOM_ERROR);
|
|
throw new Exception('JD商户余额不足', HttpStatus::CUSTOM_ERROR);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|