Commit 914a049f by liuyingkang

refactor(日志和分账): 优化日志记录和分账逻辑

- 在 `RequestLoggingMiddleware` 中使用新的 `Log::RequestLog` 方法记录请求和响应日志
- 在 `OrderDivideRecord` 中添加注释以明确分账类型(直推佣金、间推佣金、商户佣金、平台本身)
- 在 `Adapay` 中优化支付记录的逻辑,增加注释并修复日志信息
- 在 `OrderDivideRecordController` 中添加 `manualDivide` 方法用于手动分账
parent a38e0337
...@@ -60,6 +60,8 @@ protected function grid() ...@@ -60,6 +60,8 @@ protected function grid()
// 更改为 panel 布局 // 更改为 panel 布局
$filter->panel(); $filter->panel();
$filter->like('order.order_sn', '订单号')->width(3); $filter->like('order.order_sn', '订单号')->width(3);
$filter->like('users.phone', '下单会员手机号')->width(3);
$filter->between('created_at', '创建时间')->datetime()->width(4);
}); });
$grid->actions(function (Grid\Displayers\Actions $actions) { $grid->actions(function (Grid\Displayers\Actions $actions) {
......
...@@ -67,7 +67,7 @@ public function handle(array $input) ...@@ -67,7 +67,7 @@ public function handle(array $input)
# 对支付确认创建结果进行处理 # 对支付确认创建结果进行处理
if ($result['status'] == 'succeeded') { if ($result['status'] == 'succeeded') {
//成功处理 //成功处理
Log::add('分账给平台成功', ['recond_id' => $recordObj->id]); Log::add('分账给平台成功', ['recond_id' => $recordObj->id,'um_id' => $recordObj->um_id,'sh_type' => $recordObj->sh_type]);
$recordObj->remark = $remark; $recordObj->remark = $remark;
$recordObj->payconfirm_no = $result['order_no']; $recordObj->payconfirm_no = $result['order_no'];
$recordObj->is_div = 1; $recordObj->is_div = 1;
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
use Illuminate\Http\Request; use Illuminate\Http\Request;
class Log{ class Log{
//保留兼容以前日志
static public function add(string $logKey, mixed $logInfo, ?Request $request = null) :void{ static public function add(string $logKey, mixed $logInfo, ?Request $request = null) :void{
try { try {
// 判断当天的日志文件是否存在 // 判断当天的日志文件是否存在
...@@ -48,6 +49,54 @@ static public function add(string $logKey, mixed $logInfo, ?Request $request = n ...@@ -48,6 +49,54 @@ static public function add(string $logKey, mixed $logInfo, ?Request $request = n
} }
// 中间件请求
static public function RequestLog(string $logKey, mixed $logInfo, ?Request $request = null) :void{
try {
// 判断当天的日志文件是否存在
$day = date('Y-m-d');
$logFileName = 'runLog_Request'.$day.'.log';
$logPath = storage_path("logs/".$logFileName);
// 检查日志目录是否存在,如果不存在则创建
if (!is_dir(dirname($logPath))) {
mkdir(dirname($logPath), 0777, true);
}
// 拼接用户信息
if ($request && $request->user()) {
$userObj = $request->user();
$userInfo = "【-----------用户信息----------】".PHP_EOL;
$userInfo .= "【用户ID】: ".$userObj->id.";".PHP_EOL;
$userInfo .= "【用户名称】: ".$userObj->name.";".PHP_EOL;
// 添加请求参数到日志信息
$requestParams = $request->all();
$paramInfo = "【请求参数】: ".print_r($requestParams, true).PHP_EOL;
$userInfo .= $paramInfo;
} else {
$userInfo = "【-----------用户信息----------】".PHP_EOL;
$userInfo .= "【未获取到用户信息】".PHP_EOL;
}
// 获取请求路径
$requestPath = $request ? $request->getPathInfo() : 'N/A';
// 添加请求路径到日志信息
$logMessage = "--------------------".str_repeat("-", 20).PHP_EOL;
$logMessage .= "【".date('Y-m-d H:i:s')."】".PHP_EOL."【返回值:】".$userInfo."【请求路径】: $requestPath 【".$logKey."】: ".print_r($logInfo, true).PHP_EOL;
$logMessage .= "--------------------".str_repeat("-", 20).PHP_EOL.PHP_EOL;
// 添加换行符
file_put_contents($logPath, $logMessage, FILE_APPEND);
} catch (\Exception $e) {
// 记录异常信息到另一个日志文件
$errorLogPath = storage_path("logs/error_log.log");
file_put_contents($errorLogPath, "【".date('Y-m-d H:i:s')."】【add日志 方法出错】: ". $e->getMessage(). PHP_EOL, FILE_APPEND);
}
}
//自定义日志名字
static public function addByName(string $logKey, mixed $logInfo, ?Request $request = null) :void{ static public function addByName(string $logKey, mixed $logInfo, ?Request $request = null) :void{
try { try {
// 判断当天的日志文件是否存在 // 判断当天的日志文件是否存在
......
<?php <?php
namespace App\Http\Controllers\Api; namespace App\Http\Controllers\Api;
use App\Command\Log; use App\Command\Log;
use App\Models\Carousel; use App\Models\Carousel;
use App\Models\User; use App\Models\User;
use app\models\HfPayconfirm;
use App\Models\OrderDivideRecord; use App\Models\OrderDivideRecord;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use NwVVVS\AdapayCore\AdaPay\Payment;
class OrderDivideRecordController extends BaseController class OrderDivideRecordController extends BaseController
{ {
public function getList(Request $request) public function getList(Request $request)
{ {
$type = $request->type ?? 0; $type = $request->type ?? 0;
$page = $request->page ?? 1; $page = $request->page ?? 1;
$limit = $request->limit ?? 10; $limit = $request->limit ?? 10;
if (!in_array($type, [1, 2, 3])) { if (!in_array($type, [1, 2, 3])) {
return $this->JsonResponse('', '参数错误', 201); return $this->JsonResponse('', '参数错误', 201);
} }
$userObj = $request->user(); $userObj = $request->user();
$um_id = ($type == 3) ? $userObj->merchant_id : $userObj->id; $um_id = ($type == 3) ? $userObj->merchant_id : $userObj->id;
$sql = OrderDivideRecord::where(['um_id' => $um_id, 'sh_type' => $type, 'deleted_at' => null]); $sql = OrderDivideRecord::where(['um_id' => $um_id, 'sh_type' => $type, 'deleted_at' => null]);
$total = $sql->count(); $total = $sql->count();
$data = [ $data = [
'total' => $total, 'total' => $total,
'total_page' => ceil($total / $limit), 'total_page' => ceil($total / $limit),
'list' => [] 'list' => []
]; ];
$listData = $sql->offset(($page - 1) * $limit)->limit($limit)->orderBy('created_at', 'DESC')->get(); $listData = $sql->offset(($page - 1) * $limit)->limit($limit)->orderBy('created_at', 'DESC')->get();
if ($listData->toArray()) { if ($listData->toArray()) {
foreach ($listData as $kk => $vv) { foreach ($listData as $kk => $vv) {
$data['list'][] = [ $data['list'][] = [
'title' => isset(OrderDivideRecord::COMMISSION_TYPE[$vv->sh_type]) ? OrderDivideRecord::COMMISSION_TYPE[$vv->sh_type] : '', 'title' => isset(OrderDivideRecord::COMMISSION_TYPE[$vv->sh_type]) ? OrderDivideRecord::COMMISSION_TYPE[$vv->sh_type] : '',
'created_at' => date("Y-m-d H:i:s", strtotime($vv->created_at)), 'created_at' => date("Y-m-d H:i:s", strtotime($vv->created_at)),
'divide_price' => $vv->divide_price 'divide_price' => $vv->divide_price
]; ];
} }
} }
return $this->JsonResponse($data);
}
//手动分账【开发手动调接口修正数据】
public function manualDivide(Request $request)
{
$payment_confirm = new \NwVVVS\AdapaySdk\PaymentConfirm(); //支付确认
$member_id = $request->member_id ?? 0;//汇付会员id
$amount = $request->amount;//分账金额·
$payment_id = $request->payment_id ;//支付记录表中的payment_id
if (!$amount||!$payment_id) {
return $this->JsonResponse('', '参数 amount、payment_id 不能为空', 201);
}
return $this->JsonResponse($data); //参数介绍member_id:汇付会员id,amount:分账金额,fee_flag:是否内扣手续费
$div_members = ['member_id' => $member_id, 'amount' => sprintf("%.2f", $amount), 'fee_flag' => 'Y'];
$confirm_amt = $amount;
# 支付确认参数设置
$payment_params = array(
"payment_id" => $payment_id,
"order_no" => 'payconfirm_' . date("YmdHis") . rand(100000, 999999),
"confirm_amt" => $amount,
"description" => "",
"div_members" => "" //分账参数列表 默认是数组List
);
$payment_params['div_members'] = $div_members;
$payment_params['confirm_amt'] = $confirm_amt;
Log::addByName('manualDivide手动分账' , $payment_params);
# 发起支付确认创建
$payment_confirm->create($payment_params);
# 对支付确认创建结果进行处理
if ($payment_confirm->isError()) {
//失败处理
Log::addByName('manualDivide手动分账', '支付确认失败:'.$payment_confirm->result);
$result = $payment_confirm->result;
} else {
//成功处理
Log::addByName('manualDivide手动分账', '支付确认成功:'.$payment_confirm->result);
$result = $payment_confirm->result;
if ($result['status'] == 'succeeded') {
//Log::add('分账成功', ['order_sn' => $order_no]);
//写入支付确认信息
(new HfPayconfirm())->add($payment_params, $result['fee_amt']);
}
}
return $this->JsonResponse([]);
} }
} }
...@@ -21,7 +21,7 @@ class Kernel extends HttpKernel ...@@ -21,7 +21,7 @@ class Kernel extends HttpKernel
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class, \App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\RequestLoggingMiddleware::class, // 添加这一行 \App\Http\Middleware\RequestLoggingMiddleware::class, // 接口执行记录日志
]; ];
/** /**
......
...@@ -45,7 +45,7 @@ public function handle(Request $request, Closure $next) ...@@ -45,7 +45,7 @@ public function handle(Request $request, Closure $next)
// 截取请求参数值,每个最多 5000 字符 // 截取请求参数值,每个最多 5000 字符
$requestData = $this->truncateData($requestData); $requestData = $this->truncateData($requestData);
Log::add('请求参数', $requestData, $request); // 使用自定义日志类记录请求日志 Log::RequestLog('请求参数', $requestData, $request); // 使用自定义日志类记录请求日志
// 继续处理请求 // 继续处理请求
$response = $next($request); $response = $next($request);
...@@ -60,7 +60,7 @@ public function handle(Request $request, Closure $next) ...@@ -60,7 +60,7 @@ public function handle(Request $request, Closure $next)
// 截取响应参数值,每个最多 5000 字符 // 截取响应参数值,每个最多 5000 字符
$responseData = $this->truncateData($responseData); $responseData = $this->truncateData($responseData);
Log::add('响应', $responseData, $request); // 使用自定义日志类记录响应日志 Log::RequestLog('响应', $responseData, $request); // 使用自定义日志类记录响应日志
return $response; return $response;
} }
......
...@@ -23,7 +23,7 @@ public function __construct() ...@@ -23,7 +23,7 @@ public function __construct()
\NwVVVS\AdapayCore\AdaPay::init(dirname(__FILE__) . "/../../config/merchantConfig.json", "test"); \NwVVVS\AdapayCore\AdaPay::init(dirname(__FILE__) . "/../../config/merchantConfig.json", "test");
} }
//支付
public function pay($order_title, $order_sn, $order_amount, $openid) public function pay($order_title, $order_sn, $order_amount, $openid)
{ {
$payment = new \NwVVVS\AdapaySdk\Payment(); $payment = new \NwVVVS\AdapaySdk\Payment();
...@@ -62,6 +62,7 @@ public function pay($order_title, $order_sn, $order_amount, $openid) ...@@ -62,6 +62,7 @@ public function pay($order_title, $order_sn, $order_amount, $openid)
} }
} }
//支付回调-分账
public function payNotify($params = []) public function payNotify($params = [])
{ {
$payment_confirm = new \NwVVVS\AdapaySdk\PaymentConfirm(); //支付确认 $payment_confirm = new \NwVVVS\AdapaySdk\PaymentConfirm(); //支付确认
...@@ -133,15 +134,23 @@ public function payNotify($params = []) ...@@ -133,15 +134,23 @@ public function payNotify($params = [])
} }
} }
//支付记录 //支付记录
// 创建新的PaymentRecord对象
$pay_cord = new PaymentRecord(); $pay_cord = new PaymentRecord();
// 查询是否已存在相同order_sn的支付记录
$cordLog = $pay_cord->where(['order_sn' => $message['order_no']])->first(); $cordLog = $pay_cord->where(['order_sn' => $message['order_no']])->first();
// 如果不存在记录,则创建新记录
if (!$cordLog) { if (!$cordLog) {
$pay_cord->order_sn = $message['order_no']; // 设置支付记录的各项属性
$pay_cord->other_order = $message['out_trans_id']; $pay_cord->order_sn = $message['order_no']; // 订单号
$pay_cord->payment_id = $message['id']; $pay_cord->other_order = $message['out_trans_id']; // 外部交易ID
$pay_cord->party_order_id = $message['party_order_id']; $pay_cord->payment_id = $message['id']; // 支付ID
$pay_cord->money = $message['real_amt']; $pay_cord->party_order_id = $message['party_order_id']; // 合作方订单ID
$pay_cord->uid = $orderObj->user_id; $pay_cord->money = $message['real_amt']; // 实际支付金额
$pay_cord->uid = $orderObj->user_id; // 用户ID
// 保存支付记录到数据库
$pay_cord->save(); $pay_cord->save();
} }
DB::commit(); DB::commit();
...@@ -176,7 +185,7 @@ public function payNotify($params = []) ...@@ -176,7 +185,7 @@ public function payNotify($params = [])
$divResult = OrderDivideRecord::divide($orderObj->id, $payment_params['order_no']); //返回分账参数列表 $divResult = OrderDivideRecord::divide($orderObj->id, $payment_params['order_no']); //返回分账参数列表
$payment_params['div_members'] = $divResult['div_members']; $payment_params['div_members'] = $divResult['div_members'];
$payment_params['confirm_amt'] = $divResult['confirm_amt']; $payment_params['confirm_amt'] = $divResult['confirm_amt'];
Log::add('发起支付确认' . $order_no, $payment_params); Log::add('发起分账支付确认-向汇付' . $order_no, $payment_params);
# 发起支付确认创建 # 发起支付确认创建
$payment_confirm->create($payment_params); $payment_confirm->create($payment_params);
...@@ -329,7 +338,6 @@ public function refundNotify($params) ...@@ -329,7 +338,6 @@ public function refundNotify($params)
return false; return false;
} }
//创建个人用户 //创建个人用户
public function createMember($uid, $phone) public function createMember($uid, $phone)
{ {
...@@ -427,4 +435,24 @@ public function queryBalance($account_params) ...@@ -427,4 +435,24 @@ public function queryBalance($account_params)
return $account->result; return $account->result;
} }
} }
// //手动分账修复错误数据--【转移到:OrderDivideRecordController::manualDivide】
// public function queryBalance($account_params)
// {
// $account = new \NwVVVS\AdapaySdk\SettleAccount();
// # 查询账户余额
// $account->balance($account_params);
// # 对查询账户余额结果进行处理
// if ($account->isError()) {
// //失败处理
// return $account->result;
// } else {
// //成功处理
// return $account->result;
// }
// }
} }
...@@ -118,25 +118,29 @@ public static function divide($order_id, $payconfirm_no = '') ...@@ -118,25 +118,29 @@ public static function divide($order_id, $payconfirm_no = '')
} }
} }
//组合分账参数 //组合分账参数
//直推佣金
if ($spuid && $first_commission >= 1 && $first_commission < 100 && $commissionPreData['first_amount'] > 0) { if ($spuid && $first_commission >= 1 && $first_commission < 100 && $commissionPreData['first_amount'] > 0) {
self::addRecord($sp_ogid, $order_id, $orderObj->goods_amount, $commissionPreData['first_amount'], $first_proportion, $spuid, $buyer_id, 1, $isFirstRealName, $payconfirm_no); self::addRecord($sp_ogid, $order_id, $orderObj->goods_amount, $commissionPreData['first_amount'], $first_proportion, $spuid, $buyer_id, 1, $isFirstRealName, $payconfirm_no);
if ($isFirstRealName) { if ($isFirstRealName) {
array_push($div_members, ['member_id' => $commissionPreData['first_member_id'], 'amount' => sprintf("%.2f", $commissionPreData['first_amount']), 'fee_flag' => 'N']); array_push($div_members, ['member_id' => $commissionPreData['first_member_id'], 'amount' => sprintf("%.2f", $commissionPreData['first_amount']), 'fee_flag' => 'N']);
} }
} }
//间推佣金
if ($second_spuid && $second_commission >= 1 && $second_commission < 100 && $commissionPreData['second_amount'] > 0) { if ($second_spuid && $second_commission >= 1 && $second_commission < 100 && $commissionPreData['second_amount'] > 0) {
self::addRecord($sp_ogid, $order_id, $orderObj->goods_amount, $commissionPreData['second_amount'], $second_proportion, $second_spuid, $buyer_id, 2, $isSecondRealName, $payconfirm_no); self::addRecord($sp_ogid, $order_id, $orderObj->goods_amount, $commissionPreData['second_amount'], $second_proportion, $second_spuid, $buyer_id, 2, $isSecondRealName, $payconfirm_no);
if ($isSecondRealName) { if ($isSecondRealName) {
array_push($div_members, ['member_id' => $commissionPreData['second_member_id'], 'amount' => sprintf("%.2f", $commissionPreData['second_amount']), 'fee_flag' => 'N']); array_push($div_members, ['member_id' => $commissionPreData['second_member_id'], 'amount' => sprintf("%.2f", $commissionPreData['second_amount']), 'fee_flag' => 'N']);
} }
} }
//商户佣金
if ($merchant_id && $merchant_commission >= 1 && $merchant_commission < 100 && $commissionPreData['merchant_amount'] > 0) { if ($merchant_id && $merchant_commission >= 1 && $merchant_commission < 100 && $commissionPreData['merchant_amount'] > 0) {
self::addRecord($sp_ogid, $order_id, $orderObj->goods_amount, $commissionPreData['merchant_amount'], $merchant_proportion, $merchant_id, $buyer_id, 3, $isMerchantRealName, $payconfirm_no); self::addRecord($sp_ogid, $order_id, $orderObj->goods_amount, $commissionPreData['merchant_amount'], $merchant_proportion, $merchant_id, $buyer_id, 3, $isMerchantRealName, $payconfirm_no);
if ($isMerchantRealName) { if ($isMerchantRealName) {
array_push($div_members, ['member_id' => $commissionPreData['merchant_member_id'], 'amount' => sprintf("%.2f", $commissionPreData['merchant_amount']), 'fee_flag' => 'N']); array_push($div_members, ['member_id' => $commissionPreData['merchant_member_id'], 'amount' => sprintf("%.2f", $commissionPreData['merchant_amount']), 'fee_flag' => 'N']);
} }
} }
//商户本身 //平台本身
$aimeiyuePrice = $total_amount - $commissionPreData['first_amount'] - $commissionPreData['second_amount'] - $commissionPreData['merchant_amount']; $aimeiyuePrice = $total_amount - $commissionPreData['first_amount'] - $commissionPreData['second_amount'] - $commissionPreData['merchant_amount'];
self::addRecord($sp_ogid, $order_id, $orderObj->goods_amount, $aimeiyuePrice, '', 0, $buyer_id, 0, 1, $payconfirm_no); self::addRecord($sp_ogid, $order_id, $orderObj->goods_amount, $aimeiyuePrice, '', 0, $buyer_id, 0, 1, $payconfirm_no);
array_push($div_members, ['member_id' => 0, 'amount' => sprintf("%.2f", $aimeiyuePrice), 'fee_flag' => 'Y']); array_push($div_members, ['member_id' => 0, 'amount' => sprintf("%.2f", $aimeiyuePrice), 'fee_flag' => 'Y']);
...@@ -154,6 +158,7 @@ public static function divide($order_id, $payconfirm_no = '') ...@@ -154,6 +158,7 @@ public static function divide($order_id, $payconfirm_no = '')
return ['div_members' => $div_members, 'confirm_amt' => sprintf("%.2f", $confirm_amt)]; return ['div_members' => $div_members, 'confirm_amt' => sprintf("%.2f", $confirm_amt)];
} }
//新增分账记录
public static function addRecord($og_id, $order_id, $goods_amount, $divide_price, $commission = '', $um_id = 0, $buyer_id, $sh_type = 0, $isExistAccount, $payconfirm_no) public static function addRecord($og_id, $order_id, $goods_amount, $divide_price, $commission = '', $um_id = 0, $buyer_id, $sh_type = 0, $isExistAccount, $payconfirm_no)
{ {
$recordObj = new self(); $recordObj = new self();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment