微信二维码接口

master
lion 20 hours ago
parent e73d87d1e8
commit 96d2a3d6f8

@ -434,22 +434,51 @@ class CourseController extends BaseController
if ($validator->fails()) { if ($validator->fails()) {
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
} }
$courseId = $all['id'];
$generate = !empty($all['generate']);
$path = config('filesystems.disks.public.root') . '/course_qrcode/' . $courseId . '.png';
$url = config('filesystems.disks.public.url') . '/course_qrcode/' . $courseId . '.png';
// 已有文件直接返回,避免走微信/旧 OPcache 方法签名问题
clearstatcache(true, $path);
if (is_file($path)) {
return $this->success($url);
}
if (!$generate) {
return $this->success('');
}
try { try {
// generate=1 时才调用微信生成;默认仅返回已有文件,避免弹窗打开即 500 $courseModel = new Course();
$generate = !empty($all['generate']); // 兼容 FPM OPcache 未刷新时旧方法只有 1 个参数PHP8 多传参会直接 500
$url = (new Course())->getCourseQrcode($all['id'], $generate); $ref = new \ReflectionMethod($courseModel, 'getCourseQrcode');
if ($generate && empty($url)) { if ($ref->getNumberOfParameters() >= 2) {
$result = $courseModel->getCourseQrcode($courseId, true);
} else {
$result = $courseModel->getCourseQrcode($courseId);
}
clearstatcache(true, $path);
if (empty($result) && is_file($path)) {
$result = $url;
}
if (empty($result)) {
return $this->fail([ResponseCode::ERROR_BUSINESS, '二维码生成失败,请检查微信配置或缓存后重试']); return $this->fail([ResponseCode::ERROR_BUSINESS, '二维码生成失败,请检查微信配置或缓存后重试']);
} }
return $this->success($url ?: ''); return $this->success($result);
} catch (\Throwable $e) { } catch (\Throwable $e) {
\Log::error('courses/qrcode failed', [ \Log::error('courses/qrcode failed', [
'id' => $all['id'] ?? null, 'id' => $courseId,
'generate' => $all['generate'] ?? null, 'generate' => $generate,
'message' => $e->getMessage(), 'message' => $e->getMessage(),
'file' => $e->getFile(), 'file' => $e->getFile(),
'line' => $e->getLine(), 'line' => $e->getLine(),
]); ]);
// 生成过程异常时,若磁盘已有文件仍返回成功
clearstatcache(true, $path);
if (is_file($path)) {
return $this->success($url);
}
return $this->fail([ return $this->fail([
ResponseCode::ERROR_BUSINESS, ResponseCode::ERROR_BUSINESS,
'二维码生成失败: ' . $e->getMessage(), '二维码生成失败: ' . $e->getMessage(),

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save