Commit 914a049f by liuyingkang

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

- 在 `RequestLoggingMiddleware` 中使用新的 `Log::RequestLog` 方法记录请求和响应日志
- 在 `OrderDivideRecord` 中添加注释以明确分账类型(直推佣金、间推佣金、商户佣金、平台本身)
- 在 `Adapay` 中优化支付记录的逻辑,增加注释并修复日志信息
- 在 `OrderDivideRecordController` 中添加 `manualDivide` 方法用于手动分账
parent a38e0337
......@@ -60,6 +60,8 @@ protected function grid()
// 更改为 panel 布局
$filter->panel();
$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) {
......
......@@ -67,7 +67,7 @@ public function handle(array $input)
# 对支付确认创建结果进行处理
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->payconfirm_no = $result['order_no'];
$recordObj->is_div = 1;
......
......@@ -3,6 +3,7 @@
use Illuminate\Http\Request;
class Log{
//保留兼容以前日志
static public function add(string $logKey, mixed $logInfo, ?Request $request = null) :void{
try {
// 判断当天的日志文件是否存在
......@@ -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{
try {
// 判断当天的日志文件是否存在
......
<?php
namespace App\Http\Controllers\Api;
use App\Command\Log;
use App\Models\Carousel;
use App\Models\User;
use app\models\HfPayconfirm;
use App\Models\OrderDivideRecord;
use Illuminate\Http\Request;
use NwVVVS\AdapayCore\AdaPay\Payment;
class OrderDivideRecordController extends BaseController
{
public function getList(Request $request)
{
$type = $request->type ?? 0;
$page = $request->page ?? 1;
$limit = $request->limit ?? 10;
if (!in_array($type, [1, 2, 3])) {
return $this->JsonResponse('', '参数错误', 201);
}
$userObj = $request->user();
$um_id = ($type == 3) ? $userObj->merchant_id : $userObj->id;
$sql = OrderDivideRecord::where(['um_id' => $um_id, 'sh_type' => $type, 'deleted_at' => null]);
$total = $sql->count();
$data = [
'total' => $total,
'total_page' => ceil($total / $limit),
'list' => []
];
$listData = $sql->offset(($page - 1) * $limit)->limit($limit)->orderBy('created_at', 'DESC')->get();
if ($listData->toArray()) {
foreach ($listData as $kk => $vv) {
$data['list'][] = [
'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)),
'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
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::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)
// 截取请求参数值,每个最多 5000 字符
$requestData = $this->truncateData($requestData);
Log::add('请求参数', $requestData, $request); // 使用自定义日志类记录请求日志
Log::RequestLog('请求参数', $requestData, $request); // 使用自定义日志类记录请求日志
// 继续处理请求
$response = $next($request);
......@@ -60,7 +60,7 @@ public function handle(Request $request, Closure $next)
// 截取响应参数值,每个最多 5000 字符
$responseData = $this->truncateData($responseData);
Log::add('响应', $responseData, $request); // 使用自定义日志类记录响应日志
Log::RequestLog('响应', $responseData, $request); // 使用自定义日志类记录响应日志
return $response;
}
......
......@@ -23,7 +23,7 @@ public function __construct()
\NwVVVS\AdapayCore\AdaPay::init(dirname(__FILE__) . "/../../config/merchantConfig.json", "test");
}
//支付
public function pay($order_title, $order_sn, $order_amount, $openid)
{
$payment = new \NwVVVS\AdapaySdk\Payment();
......@@ -62,6 +62,7 @@ public function pay($order_title, $order_sn, $order_amount, $openid)
}
}
//支付回调-分账
public function payNotify($params = [])
{
$payment_confirm = new \NwVVVS\AdapaySdk\PaymentConfirm(); //支付确认
......@@ -133,15 +134,23 @@ public function payNotify($params = [])
}
}
//支付记录
// 创建新的PaymentRecord对象
$pay_cord = new PaymentRecord();
// 查询是否已存在相同order_sn的支付记录
$cordLog = $pay_cord->where(['order_sn' => $message['order_no']])->first();
// 如果不存在记录,则创建新记录
if (!$cordLog) {
$pay_cord->order_sn = $message['order_no'];
$pay_cord->other_order = $message['out_trans_id'];
$pay_cord->payment_id = $message['id'];
$pay_cord->party_order_id = $message['party_order_id'];
$pay_cord->money = $message['real_amt'];
$pay_cord->uid = $orderObj->user_id;
// 设置支付记录的各项属性
$pay_cord->order_sn = $message['order_no']; // 订单号
$pay_cord->other_order = $message['out_trans_id']; // 外部交易ID
$pay_cord->payment_id = $message['id']; // 支付ID
$pay_cord->party_order_id = $message['party_order_id']; // 合作方订单ID
$pay_cord->money = $message['real_amt']; // 实际支付金额
$pay_cord->uid = $orderObj->user_id; // 用户ID
// 保存支付记录到数据库
$pay_cord->save();
}
DB::commit();
......@@ -176,7 +185,7 @@ public function payNotify($params = [])
$divResult = OrderDivideRecord::divide($orderObj->id, $payment_params['order_no']); //返回分账参数列表
$payment_params['div_members'] = $divResult['div_members'];
$payment_params['confirm_amt'] = $divResult['confirm_amt'];
Log::add('发起支付确认' . $order_no, $payment_params);
Log::add('发起分账支付确认-向汇付' . $order_no, $payment_params);
# 发起支付确认创建
$payment_confirm->create($payment_params);
......@@ -329,7 +338,6 @@ public function refundNotify($params)
return false;
}
//创建个人用户
public function createMember($uid, $phone)
{
......@@ -427,4 +435,24 @@ public function queryBalance($account_params)
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 = '')
}
}
//组合分账参数
//直推佣金
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);
if ($isFirstRealName) {
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) {
self::addRecord($sp_ogid, $order_id, $orderObj->goods_amount, $commissionPreData['second_amount'], $second_proportion, $second_spuid, $buyer_id, 2, $isSecondRealName, $payconfirm_no);
if ($isSecondRealName) {
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) {
self::addRecord($sp_ogid, $order_id, $orderObj->goods_amount, $commissionPreData['merchant_amount'], $merchant_proportion, $merchant_id, $buyer_id, 3, $isMerchantRealName, $payconfirm_no);
if ($isMerchantRealName) {
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'];
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']);
......@@ -154,6 +158,7 @@ public static function divide($order_id, $payconfirm_no = '')
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)
{
$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