5 changed files with 158 additions and 171 deletions
@ -1,77 +0,0 @@ |
|||||
<?php |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | Niucloud-admin 企业快速开发的多应用管理平台 |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | 官方网址:https://www.niucloud.com |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | niucloud团队 版权所有 开源版本可自由商用 |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | Author: Niucloud Team |
|
||||
// +---------------------------------------------------------------------- |
|
||||
|
|
||||
namespace app\listener\pay; |
|
||||
|
|
||||
use app\model\order_table\OrderTable; |
|
||||
|
|
||||
/** |
|
||||
* 支付单据创建事件 |
|
||||
*/ |
|
||||
class PayCreateListener |
|
||||
{ |
|
||||
/** |
|
||||
* 处理支付创建事件 |
|
||||
* @param array $params |
|
||||
* @return array|null |
|
||||
*/ |
|
||||
public function handle(array $params) |
|
||||
{ |
|
||||
$trade_type = $params['trade_type'] ?? ''; |
|
||||
$trade_id = $params['trade_id'] ?? 0; |
|
||||
|
|
||||
// 根据不同的业务类型处理支付创建 |
|
||||
switch ($trade_type) { |
|
||||
case 'school_order_table': |
|
||||
return $this->handleOrderPayment($trade_id); |
|
||||
|
|
||||
// TODO: 添加其他业务类型的支付创建处理 |
|
||||
// case 'recharge': |
|
||||
// return $this->handleRechargePayment($trade_id); |
|
||||
|
|
||||
default: |
|
||||
return null; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 处理订单支付创建 |
|
||||
* @param int $trade_id 订单ID |
|
||||
* @return array|null |
|
||||
*/ |
|
||||
private function handleOrderPayment(int $trade_id) |
|
||||
{ |
|
||||
// 查询订单信息 |
|
||||
$order = OrderTable::where('id', $trade_id)->find(); |
|
||||
|
|
||||
if (!$order) { |
|
||||
return null; |
|
||||
} |
|
||||
|
|
||||
// TODO: 根据订单信息构建支付数据 |
|
||||
// 返回格式必须包含以下字段: |
|
||||
// - main_type: 支付主体类型(如 'member') |
|
||||
// - main_id: 支付主体ID(如会员ID) |
|
||||
// - money: 支付金额 |
|
||||
// - trade_type: 业务类型 |
|
||||
// - trade_id: 业务ID |
|
||||
// - body: 支付描述 |
|
||||
|
|
||||
return [ |
|
||||
'main_type' => 'member', // TODO: 从订单获取会员类型 |
|
||||
'main_id' => $order->student_id ?? 0, // TODO: 从订单获取会员ID |
|
||||
'money' => $order->order_amount ?? 0, |
|
||||
'trade_type' => 'school_order_table', |
|
||||
'trade_id' => $trade_id, |
|
||||
'body' => '订单支付 - ' . ($order->course_id_name ?? '课程') |
|
||||
]; |
|
||||
} |
|
||||
} |
|
||||
@ -1,94 +0,0 @@ |
|||||
<?php |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | Niucloud-admin 企业快速开发的多应用管理平台 |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | 官方网址:https://www.niucloud.com |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | niucloud团队 版权所有 开源版本可自由商用 |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | Author: Niucloud Team |
|
||||
// +---------------------------------------------------------------------- |
|
||||
|
|
||||
namespace app\listener\pay; |
|
||||
|
|
||||
use app\service\core\pay\CoreAccountService; |
|
||||
use app\model\order_table\OrderTable; |
|
||||
use app\service\api\apiService\OrderTableService; |
|
||||
use think\facade\Log; |
|
||||
|
|
||||
/** |
|
||||
* 支付异步回调事件 |
|
||||
*/ |
|
||||
class PaySuccessListener |
|
||||
{ |
|
||||
public function handle(array $pay_info) |
|
||||
{ |
|
||||
if (isset($pay_info['out_trade_no']) && !empty($pay_info['out_trade_no'])) { |
|
||||
//账单记录添加 |
|
||||
(new CoreAccountService())->addPayLog($pay_info); |
|
||||
|
|
||||
// 处理业务逻辑 |
|
||||
$this->handleBusinessLogic($pay_info); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 处理业务逻辑 |
|
||||
* @param array $pay_info 支付信息 |
|
||||
*/ |
|
||||
private function handleBusinessLogic(array $pay_info) |
|
||||
{ |
|
||||
$trade_type = $pay_info['trade_type'] ?? ''; |
|
||||
$trade_id = $pay_info['trade_id'] ?? 0; |
|
||||
|
|
||||
// 根据不同的业务类型处理支付成功逻辑 |
|
||||
switch ($trade_type) { |
|
||||
case 'school_order_table': |
|
||||
$this->handleOrderPaymentSuccess($trade_id, $pay_info); |
|
||||
break; |
|
||||
|
|
||||
// TODO: 添加其他业务类型的支付成功处理 |
|
||||
// case 'recharge': |
|
||||
// $this->handleRechargeSuccess($trade_id, $pay_info); |
|
||||
// break; |
|
||||
|
|
||||
default: |
|
||||
Log::info('PaySuccessListener: 未处理的业务类型 - ' . $trade_type); |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 处理订单支付成功 |
|
||||
* @param int $trade_id 订单ID |
|
||||
* @param array $pay_info 支付信息 |
|
||||
*/ |
|
||||
private function handleOrderPaymentSuccess(int $trade_id, array $pay_info) |
|
||||
{ |
|
||||
try { |
|
||||
// 更新订单状态为已支付 |
|
||||
$order = OrderTable::where('id', $trade_id)->find(); |
|
||||
|
|
||||
if (!$order) { |
|
||||
Log::error('PaySuccessListener: 订单不存在 - ID:' . $trade_id); |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
// TODO: 更新订单状态 |
|
||||
// 确认订单表的字段名和状态值 |
|
||||
$order->order_status = 'paid'; |
|
||||
$order->payment_time = date('Y-m-d H:i:s'); |
|
||||
$order->payment_id = $pay_info['out_trade_no'] ?? ''; |
|
||||
$order->save(); |
|
||||
|
|
||||
// TODO: 调用订单服务处理支付成功后的业务逻辑 |
|
||||
// 例如:分配课程、创建合同签署记录等 |
|
||||
$orderArray = $order->toArray(); |
|
||||
(new OrderTableService())->handlePaymentSuccess($orderArray); |
|
||||
|
|
||||
Log::info('PaySuccessListener: 订单支付成功处理完成 - 订单ID:' . $trade_id); |
|
||||
} catch (\Exception $e) { |
|
||||
Log::error('PaySuccessListener: 订单支付成功处理异常 - ' . $e->getMessage()); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
Loading…
Reference in new issue