文件
fenleixinxi/application/api/library/ExceptionHandle.php
MiAn cb12bf5fc8 feat: 新增地址选择插件及订阅消息等多项功能优化
- 新增地址选择插件,支持地图位置选择并返回地址和经纬度
- 新增微信订阅消息发送功能,支持审核结果、提现通知等场景
- 新增订单支付状态查询、提现收款人姓名保存等接口
- 新增服务区域管理,支持按省市区划分并同步到信息发布
- 新增资金流水和营收报表导出功能
- 新增可用优惠券查询、订单退款拆分处理等功能
- 优化后台角标显示、首页数据统计、UI配置下发等
- 修复订单支付并发问题、地区管理逻辑等
2026-10-22 17:14:56 +08:00

56 行
1.8 KiB
PHP
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?php
namespace app\api\library;
use Exception;
use think\exception\Handle;
use think\Log;
/**
* API 模块统一异常输出
*
* 契约与 V1 基类保持一致:{"code":<非0>,"message":"...","data":null}
* 说明:业务失败一律 HTTP 200 + code!=0(前端 request.js 只在 code===0/200 时视为成功),
* 否则前端会把 500 显示成「网络异常(500)」,真实原因被吞掉。
* 仅 401/403/404 等 HTTP 语义异常保留原始状态码。
*/
class ExceptionHandle extends Handle
{
public function render(Exception $e)
{
// ok()/fail() 抛出的 HttpResponseException 由框架直接输出,不走这里
if ($e instanceof \think\exception\HttpResponseException) {
return parent::render($e);
}
$status = 200;
$code = 500;
$message = '服务器开小差了,请稍后再试';
if ($e instanceof \think\exception\ValidateException) {
$code = 1;
$message = $e->getError();
} elseif ($e instanceof \think\exception\HttpException) {
$status = $e->getStatusCode();
$code = $status;
$message = $e->getMessage() ?: '请求异常';
}
// 详细信息只写日志,不回传给客户端(避免泄露路径/SQL)
Log::record(
'API异常:' . get_class($e) . ' ' . $e->getMessage() . "\n" . $e->getTraceAsString(),
'error'
);
if (\think\Config::get('app_debug')) {
$message .= ' [' . $e->getMessage() . ' @ ' . basename($e->getFile()) . ':' . $e->getLine() . ']';
}
return json([
'code' => $code,
'message' => $message,
'data' => null,
], $status);
}
}