初始化本地仓库
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\api\controller\system;
|
||||
|
||||
use app\api\controller\Base;
|
||||
use app\service\api\system\AgreementService;
|
||||
use madong\swagger\annotation\response\SimpleResponse;
|
||||
use madong\swagger\attribute\AllowAnonymous;
|
||||
use OpenApi\Attributes as OA;
|
||||
use Webman\Http\Response;
|
||||
|
||||
#[OA\Tag(name: '协议模块')]
|
||||
final class AgreementController extends Base
|
||||
{
|
||||
public function __construct(AgreementService $service)
|
||||
{
|
||||
$this->service = $service;
|
||||
}
|
||||
|
||||
#[OA\Get(
|
||||
path: '/agreement/{key}',
|
||||
summary: '获取协议内容',
|
||||
tags: ['协议模块'],
|
||||
parameters: [
|
||||
new OA\Parameter(name: 'key', description: '协议标识', in: 'path', required: true, schema: new OA\Schema(type: 'string')),
|
||||
],
|
||||
responses: [
|
||||
new OA\Response(response: 200, description: '获取成功'),
|
||||
new OA\Response(response: 404, description: '协议不存在'),
|
||||
]
|
||||
)]
|
||||
#[SimpleResponse(schema: [], example: [])]
|
||||
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
||||
public function getAgreementContent(string $key): Response
|
||||
{
|
||||
$result = $this->service->getAgreementContent($key);
|
||||
return json($result);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\api\controller\system;
|
||||
|
||||
use app\api\controller\Base;
|
||||
use app\service\api\system\CaptchaService;
|
||||
use core\captcha\Captcha;
|
||||
use core\tool\Json;
|
||||
use madong\swagger\annotation\response\SimpleResponse;
|
||||
use madong\swagger\attribute\AllowAnonymous;
|
||||
use OpenApi\Attributes as OA;
|
||||
use support\Request;
|
||||
use Webman\Http\Response;
|
||||
|
||||
/**
|
||||
* 验证码控制器
|
||||
*/
|
||||
#[OA\Tag(name: '验证码模块')]
|
||||
final class CaptchaController extends Base
|
||||
{
|
||||
public function __construct(CaptchaService $service)
|
||||
{
|
||||
$this->service = $service;
|
||||
}
|
||||
|
||||
#[OA\Get(
|
||||
path: '/captcha',
|
||||
summary: '获取验证码图片',
|
||||
tags: ['验证码模块'],
|
||||
parameters: [
|
||||
new OA\Parameter(name: 'time', description: '时间戳,用于防止缓存', in: 'query', schema: new OA\Schema(type: 'integer')),
|
||||
],
|
||||
responses: [
|
||||
new OA\Response(response: 200, description: '获取成功'),
|
||||
]
|
||||
)]
|
||||
#[SimpleResponse(schema: [], example: [])]
|
||||
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
||||
public function captcha(Request $request): \support\Response
|
||||
{
|
||||
try {
|
||||
$captcha = new Captcha();
|
||||
$type = $request->input('type', 'web-login');
|
||||
$result = $captcha->captcha($request, $type);
|
||||
return Json::success('ok', $result);
|
||||
} catch (\Throwable $e) {
|
||||
return Json::fail($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送短信验证码
|
||||
*/
|
||||
#[OA\Post(
|
||||
path: '/sms/{type}',
|
||||
summary: '发送短信验证码',
|
||||
requestBody: new OA\RequestBody(
|
||||
required: true,
|
||||
content: new OA\JsonContent(
|
||||
required: ['mobile'],
|
||||
properties: [
|
||||
new OA\Property(property: 'mobile', description: '手机号', type: 'string'),
|
||||
]
|
||||
)
|
||||
),
|
||||
tags: ['验证码模块'],
|
||||
parameters: [
|
||||
new OA\Parameter(name: 'type', description: '验证码类型(login, register, bind等)', in: 'path', required: true, schema: new OA\Schema(type: 'string')),
|
||||
],
|
||||
responses: [
|
||||
new OA\Response(response: 200, description: '发送成功'),
|
||||
new OA\Response(response: 400, description: '参数错误'),
|
||||
new OA\Response(response: 429, description: '发送过于频繁'),
|
||||
]
|
||||
)]
|
||||
#[SimpleResponse(schema: [], example: [])]
|
||||
public function sendSmsCode(string $type): Response
|
||||
{
|
||||
$result = $this->service->sendSmsCode($type);
|
||||
return json($result);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,235 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
*+------------------
|
||||
* madong
|
||||
*+------------------
|
||||
* Copyright (c) https://gitee.com/motion-code All rights reserved.
|
||||
*+------------------
|
||||
* Author: Mr. April (405784684@qq.com)
|
||||
*+------------------
|
||||
* Official Website: http://www.madong.tech
|
||||
*/
|
||||
|
||||
namespace app\api\controller\system;
|
||||
|
||||
use app\api\controller\Base;
|
||||
use app\api\middleware\ApiAccessTokenMiddleware;
|
||||
use app\api\schema\request\system\ConfigGroupQueryRequest;
|
||||
use app\api\schema\request\system\ConfigQueryRequest;
|
||||
use app\api\schema\request\system\ConfigValueRequest;
|
||||
use app\service\api\system\ConfigService;
|
||||
use core\tool\Json;
|
||||
use madong\swagger\annotation\response\SimpleResponse;
|
||||
use madong\swagger\attribute\AllowAnonymous;
|
||||
use OpenApi\Attributes as OA;
|
||||
use support\annotation\Middleware;
|
||||
use support\Request;
|
||||
use WebmanTech\Swagger\DTO\SchemaConstants;
|
||||
|
||||
//#[Middleware(ApiAccessTokenMiddleware::class)]
|
||||
final class ConfigController extends Base
|
||||
{
|
||||
public function __construct(ConfigService $service)
|
||||
{
|
||||
$this->service = $service;
|
||||
}
|
||||
|
||||
/**
|
||||
* 按分组获取配置
|
||||
*
|
||||
* @param Request $request
|
||||
* @param string $group_code
|
||||
*
|
||||
* @return \support\Response
|
||||
* @throws \Exception
|
||||
*/
|
||||
#[OA\Get(
|
||||
path: "/system/config/group/{group_code}",
|
||||
summary: "按分组获取配置",
|
||||
tags: ["系统配置"],
|
||||
x: [
|
||||
SchemaConstants::X_SCHEMA_REQUEST => ConfigGroupQueryRequest::class,
|
||||
]
|
||||
)]
|
||||
#[SimpleResponse(schema: [], example: '{"site_open": "1","site_url": "http://127.0.0.1:8001","site_name": "madong-admin","site_logo": "https://madong.tech/assets/images/logo.svg","site_network_security": "2024042441号-2","site_description": "快速开发框架","site_record_no": "2024042442","site_icp_url": "https://beian.miit.gov.cn/","site_network_security_url": ""}')]
|
||||
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
||||
public function getByGroup(Request $request, string $group_code): \support\Response
|
||||
{
|
||||
try {
|
||||
// 参数验证
|
||||
if (empty($group_code)) {
|
||||
return Json::fail('分组编码不能为空');
|
||||
}
|
||||
|
||||
$options = [
|
||||
'enabled_only' => $request->input('enabled_only', true),
|
||||
'with_metadata' => $request->input('with_metadata', false),
|
||||
];
|
||||
$result = $this->service->getByGroup($group_code, [], $options);
|
||||
return Json::success('操作成功', $result);
|
||||
} catch (\Exception $e) {
|
||||
|
||||
return Json::fail($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
#[OA\Get(
|
||||
path: "/system/config/code/{code}",
|
||||
summary: "按code获取配置",
|
||||
tags: ["系统配置"],
|
||||
x: [
|
||||
SchemaConstants::X_SCHEMA_REQUEST => ConfigQueryRequest::class,
|
||||
]
|
||||
)]
|
||||
#[OA\Parameter(
|
||||
name: "code",
|
||||
description: "配置编码",
|
||||
in: "path",
|
||||
required: true,
|
||||
schema: new OA\Schema(type: "string"),
|
||||
)]
|
||||
#[SimpleResponse(schema: [], example: ' {"site_open": "1","site_url": "http://127.0.0.1:8001"}')]
|
||||
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
||||
public function getByCode(Request $request, string $code): \support\Response
|
||||
{
|
||||
try {
|
||||
// 参数验证
|
||||
if (empty($code)) {
|
||||
return Json::fail('配置编码不能为空');
|
||||
}
|
||||
|
||||
$groupCode = $request->input('group_code', '');
|
||||
$options = [];
|
||||
if (!empty($groupCode)) {
|
||||
$options['group_code'] = $groupCode;
|
||||
}
|
||||
$result = $this->service->config($code, [], $options);
|
||||
return Json::success('操作成功', $result);
|
||||
} catch (\Exception $e) {
|
||||
return Json::fail($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取特定配置项的特定键值
|
||||
*
|
||||
* @param Request $request
|
||||
* @param string $code
|
||||
*
|
||||
* @return \support\Response
|
||||
* @throws \Exception
|
||||
*/
|
||||
#[OA\Get(
|
||||
path: "/system/config/{code}/value",
|
||||
summary: "获取特定配置项的特定键值",
|
||||
tags: ["系统配置"],
|
||||
x: [
|
||||
SchemaConstants::X_SCHEMA_REQUEST => ConfigValueRequest::class,
|
||||
]
|
||||
)]
|
||||
#[SimpleResponse(schema: [], example: [])]
|
||||
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
||||
public function getValue(Request $request, string $code): \support\Response
|
||||
{
|
||||
try {
|
||||
// 参数验证
|
||||
if (empty($code)) {
|
||||
return Json::fail('配置项编码不能为空');
|
||||
}
|
||||
|
||||
$groupCode = $request->input('group_code');
|
||||
$key = $request->input('key');
|
||||
|
||||
if (empty($groupCode) || empty($key)) {
|
||||
return Json::fail('分组编码和配置键不能为空');
|
||||
}
|
||||
|
||||
$result = $this->service->getValue($code, $key, null, ['group_code' => $groupCode]);
|
||||
return Json::success('操作成功', $result);
|
||||
} catch (\Exception $e) {
|
||||
return Json::fail($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有配置并按分组整理
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return \support\Response
|
||||
* @throws \Exception
|
||||
*/
|
||||
#[OA\Get(
|
||||
path: "/system/config/all-grouped",
|
||||
summary: "获取所有配置并按分组整理",
|
||||
tags: ["系统配置"],
|
||||
)]
|
||||
#[OA\Parameter(
|
||||
name: "enabled_only",
|
||||
description: "是否只获取启用的配置项",
|
||||
in: "query",
|
||||
required: false,
|
||||
schema: new OA\Schema(type: "boolean", default: true),
|
||||
)]
|
||||
#[OA\Parameter(
|
||||
name: "group_filter",
|
||||
description: "分组过滤,多个分组用逗号分隔",
|
||||
in: "query",
|
||||
required: false,
|
||||
schema: new OA\Schema(type: "string"),
|
||||
)]
|
||||
#[OA\Parameter(
|
||||
name: "with_metadata",
|
||||
description: "是否包含配置项的完整元数据",
|
||||
in: "query",
|
||||
required: false,
|
||||
schema: new OA\Schema(type: "boolean", default: false),
|
||||
)]
|
||||
#[OA\Parameter(
|
||||
name: "key_by",
|
||||
description: "按指定字段作为键名('code' 或 'id')",
|
||||
in: "query",
|
||||
required: false,
|
||||
schema: new OA\Schema(type: "string", enum: ["code", "id"]),
|
||||
)]
|
||||
#[OA\Parameter(
|
||||
name: "sort_groups",
|
||||
description: "是否对分组进行排序",
|
||||
in: "query",
|
||||
required: false,
|
||||
schema: new OA\Schema(type: "boolean", default: false),
|
||||
)]
|
||||
#[OA\Parameter(
|
||||
name: "sort_configs",
|
||||
description: "是否对配置项进行排序",
|
||||
in: "query",
|
||||
required: false,
|
||||
schema: new OA\Schema(type: "boolean", default: false),
|
||||
)]
|
||||
#[SimpleResponse(schema: [], example: '{"site": {"site_name": "网站名称"}, "oss": {"accessKeyId": "xxx"}}')]
|
||||
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
||||
public function getAllGrouped(Request $request): \support\Response
|
||||
{
|
||||
try {
|
||||
$options = [
|
||||
'enabled_only' => $request->input('enabled_only', true),
|
||||
'with_metadata' => $request->input('with_metadata', false),
|
||||
'key_by' => $request->input('key_by', null),
|
||||
'sort_groups' => $request->input('sort_groups', false),
|
||||
'sort_configs' => $request->input('sort_configs', false),
|
||||
];
|
||||
|
||||
// 处理分组过滤参数
|
||||
$groupFilter = $request->input('group_filter', '');
|
||||
if (!empty($groupFilter)) {
|
||||
$options['group_filter'] = explode(',', $groupFilter);
|
||||
}
|
||||
|
||||
$result = $this->service->getAllGrouped($options);
|
||||
return Json::success('操作成功', $result);
|
||||
} catch (\Exception $e) {
|
||||
return Json::fail($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\api\controller\system;
|
||||
|
||||
use app\api\controller\Base;
|
||||
use app\api\CurrentMember;
|
||||
use app\dao\system\FeedbackDao;
|
||||
use core\exception\handler\UnauthorizedHttpException;
|
||||
use core\tool\Json;
|
||||
use madong\swagger\annotation\response\SimpleResponse;
|
||||
use madong\swagger\attribute\AllowAnonymous;
|
||||
use OpenApi\Attributes as OA;
|
||||
use Webman\Http\Request;
|
||||
use Webman\Http\Response;
|
||||
|
||||
#[OA\Tag(name: '问题反馈')]
|
||||
final class FeedbackController extends Base
|
||||
{
|
||||
private FeedbackDao $dao;
|
||||
|
||||
public function __construct(FeedbackDao $dao, private readonly CurrentMember $currentMember)
|
||||
{
|
||||
$this->dao = $dao;
|
||||
}
|
||||
|
||||
#[OA\Get(
|
||||
path: '/feedback/mine',
|
||||
summary: '获取当前用户的问题反馈列表',
|
||||
tags: ['问题反馈'],
|
||||
parameters: [
|
||||
new OA\Parameter(name: 'page', description: '页码', in: 'query', schema: new OA\Schema(type: 'integer', default: 1)),
|
||||
new OA\Parameter(name: 'limit', description: '每页数量', in: 'query', schema: new OA\Schema(type: 'integer', default: 10)),
|
||||
],
|
||||
responses: [new OA\Response(response: 200, description: '获取成功')]
|
||||
)]
|
||||
#[SimpleResponse(schema: [], example: [])]
|
||||
#[AllowAnonymous(requireToken: true, requirePermission: false, description: '会员接口')]
|
||||
public function mine(Request $request): Response
|
||||
{
|
||||
try {
|
||||
$memberId = $this->currentMember->id();
|
||||
if (!$memberId) {
|
||||
throw new UnauthorizedHttpException('请先登录后查看反馈记录');
|
||||
}
|
||||
|
||||
$page = max(1, (int)$request->get('page', 1));
|
||||
$limit = min(50, max(1, (int)$request->get('limit', 10)));
|
||||
$where = ['created_by' => $memberId];
|
||||
$total = $this->dao->getCount($where);
|
||||
$items = $this->dao->selectList($where, '*', $page, $limit, 'created_at desc')?->values()->all() ?? [];
|
||||
|
||||
return Json::success('ok', [
|
||||
'items' => $items,
|
||||
'total' => $total,
|
||||
'page' => $page,
|
||||
'limit' => $limit,
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
return Json::fail($e->getMessage(), [], $e instanceof UnauthorizedHttpException ? 401 : 0);
|
||||
}
|
||||
}
|
||||
|
||||
#[OA\Get(
|
||||
path: '/feedback/mine/{id}',
|
||||
summary: '获取当前用户的问题反馈详情',
|
||||
tags: ['问题反馈'],
|
||||
parameters: [new OA\Parameter(name: 'id', description: '反馈 ID', in: 'path', required: true, schema: new OA\Schema(type: 'string'))],
|
||||
responses: [new OA\Response(response: 200, description: '获取成功')]
|
||||
)]
|
||||
#[SimpleResponse(schema: [], example: [])]
|
||||
#[AllowAnonymous(requireToken: true, requirePermission: false, description: '会员接口')]
|
||||
public function mineShow(Request $request): Response
|
||||
{
|
||||
try {
|
||||
$memberId = $this->currentMember->id();
|
||||
if (!$memberId) {
|
||||
throw new UnauthorizedHttpException('请先登录后查看反馈记录');
|
||||
}
|
||||
|
||||
$feedback = $this->dao->get([
|
||||
'id' => $request->route->param('id'),
|
||||
'created_by' => $memberId,
|
||||
]);
|
||||
if (!$feedback) {
|
||||
return Json::fail('反馈记录不存在或无权查看', [], 404);
|
||||
}
|
||||
|
||||
$feedback->load('replyAdmin');
|
||||
return Json::success('ok', $feedback->toArray());
|
||||
} catch (\Throwable $e) {
|
||||
return Json::fail($e->getMessage(), [], $e instanceof UnauthorizedHttpException ? 401 : 0);
|
||||
}
|
||||
}
|
||||
|
||||
#[OA\Post(
|
||||
path: '/feedback',
|
||||
summary: '提交问题反馈',
|
||||
tags: ['问题反馈'],
|
||||
requestBody: new OA\RequestBody(
|
||||
required: true,
|
||||
content: new OA\JsonContent(
|
||||
required: ['type', 'content', 'source'],
|
||||
properties: [
|
||||
new OA\Property(property: 'type', description: '反馈类型:bug/suggestion/correction', type: 'string'),
|
||||
new OA\Property(property: 'content', description: '问题描述,最多2000个字符', type: 'string'),
|
||||
new OA\Property(property: 'contact', description: '联系方式,最多100个字符', type: 'string'),
|
||||
new OA\Property(property: 'images', description: '截图地址列表,最多3张', type: 'array', items: new OA\Items(type: 'string')),
|
||||
new OA\Property(property: 'source', description: '反馈来源:app/web', type: 'string'),
|
||||
]
|
||||
)
|
||||
),
|
||||
responses: [
|
||||
new OA\Response(response: 200, description: '提交成功'),
|
||||
new OA\Response(response: 400, description: '参数错误'),
|
||||
]
|
||||
)]
|
||||
#[SimpleResponse(schema: [], example: [])]
|
||||
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
||||
public function store(Request $request): Response
|
||||
{
|
||||
try {
|
||||
$data = $request->post();
|
||||
$data['content'] = trim((string)($data['content'] ?? ''));
|
||||
$data['contact'] = trim((string)($data['contact'] ?? ''));
|
||||
$data['source'] = (string)($data['source'] ?? 'app');
|
||||
$data['images'] = $data['images'] ?? [];
|
||||
|
||||
$validator = validator($data, [
|
||||
'type' => 'required|in:bug,suggestion,correction',
|
||||
'content' => 'required|max:2000',
|
||||
'contact' => 'nullable|max:100',
|
||||
'images' => 'array|max:3',
|
||||
'source' => 'required|in:app,web',
|
||||
], [
|
||||
'type.required' => '请选择反馈类型',
|
||||
'type.in' => '反馈类型不正确',
|
||||
'content.required' => '请填写问题描述',
|
||||
'content.max' => '问题描述不能超过2000个字符',
|
||||
'contact.max' => '联系方式不能超过100个字符',
|
||||
'images.array' => '截图附件格式不正确',
|
||||
'images.max' => '截图附件最多上传3张',
|
||||
'source.required' => '请选择反馈来源',
|
||||
'source.in' => '反馈来源不正确',
|
||||
]);
|
||||
if ($validator->fails()) {
|
||||
throw new \InvalidArgumentException($validator->errors()->first());
|
||||
}
|
||||
|
||||
$images = array_values(array_filter($data['images'], static fn ($image) => is_string($image) && $image !== ''));
|
||||
$type = $data['type'];
|
||||
$content = $data['content'];
|
||||
$contact = $data['contact'];
|
||||
$source = $data['source'];
|
||||
$memberId = $this->currentMember->id();
|
||||
$model = $this->dao->save([
|
||||
'type' => $type,
|
||||
'content' => $content,
|
||||
'contact' => $contact,
|
||||
'images' => $images,
|
||||
'source' => $source,
|
||||
'created_by' => $memberId ?: null,
|
||||
]);
|
||||
|
||||
return Json::success('提交成功', ['id' => $model->id]);
|
||||
} catch (\Throwable $e) {
|
||||
return Json::fail($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\api\controller\system;
|
||||
|
||||
use app\api\controller\Base;
|
||||
use app\attribute\SkipApiEncrypt;
|
||||
use core\tool\ApiEncryptService;
|
||||
use core\tool\Json;
|
||||
use madong\swagger\annotation\response\DataResponse;
|
||||
use madong\swagger\attribute\AllowAnonymous;
|
||||
use OpenApi\Attributes as OA;
|
||||
use support\Request;
|
||||
use support\Response;
|
||||
|
||||
#[SkipApiEncrypt]
|
||||
final class SecurityController extends Base
|
||||
{
|
||||
protected ApiEncryptService $encryptService;
|
||||
|
||||
public function __construct(ApiEncryptService $encryptService)
|
||||
{
|
||||
$this->encryptService = $encryptService;
|
||||
}
|
||||
|
||||
#[OA\Get(path: '/system/security/api-encrypt/public-key', summary: '获取接口加密公钥', tags: ['system-security'])]
|
||||
#[DataResponse(description: '获取成功')]
|
||||
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
||||
public function publicKey(Request $request): Response
|
||||
{
|
||||
$publicKey = $this->encryptService->getPublicKey();
|
||||
if ($publicKey === '') {
|
||||
return Json::fail('接口加密公钥未配置');
|
||||
}
|
||||
|
||||
return Json::success('获取成功', [
|
||||
'enabled' => $this->encryptService->isEnabled(),
|
||||
'scope' => $this->encryptService->getScope(),
|
||||
'algorithm' => $this->encryptService->getAlgorithm(),
|
||||
'key_version' => $this->encryptService->getKeyVersion(),
|
||||
'public_key' => $publicKey,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\api\controller\system;
|
||||
|
||||
use app\api\controller\Base;
|
||||
use app\service\api\system\WechatService;
|
||||
use madong\swagger\annotation\response\SimpleResponse;
|
||||
use madong\swagger\attribute\AllowAnonymous;
|
||||
use OpenApi\Attributes as OA;
|
||||
use Webman\Http\Request;
|
||||
use Webman\Http\Response;
|
||||
|
||||
/**
|
||||
* 微信控制器
|
||||
*/
|
||||
#[OA\Tag(name: '微信模块')]
|
||||
final class WechatController extends Base
|
||||
{
|
||||
public function __construct(WechatService $service)
|
||||
{
|
||||
$this->service = $service;
|
||||
}
|
||||
|
||||
#[OA\Get(
|
||||
path: '/wechat/auth-code',
|
||||
summary: '获取微信授权码',
|
||||
tags: ['微信模块'],
|
||||
parameters: [
|
||||
new OA\Parameter(name: 'redirect_url', description: '回调URL', in: 'query', schema: new OA\Schema(type: 'string')),
|
||||
],
|
||||
responses: [
|
||||
new OA\Response(response: 200, description: '获取成功'),
|
||||
new OA\Response(response: 400, description: '参数错误'),
|
||||
]
|
||||
)]
|
||||
#[SimpleResponse(schema: [], example: [])]
|
||||
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
||||
public function getWechatAuthCode(Request $request): Response
|
||||
{
|
||||
$params = $request->get();
|
||||
$result = $this->service->getWechatAuthCode($params);
|
||||
return json($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步微信用户信息
|
||||
*/
|
||||
#[OA\Get(
|
||||
path: '/wechat/sync',
|
||||
summary: '同步微信用户信息',
|
||||
tags: ['微信模块'],
|
||||
parameters: [
|
||||
new OA\Parameter(name: 'code', description: '微信授权码', in: 'query', required: true, schema: new OA\Schema(type: 'string')),
|
||||
],
|
||||
responses: [
|
||||
new OA\Response(response: 200, description: '同步成功'),
|
||||
new OA\Response(response: 400, description: '参数错误'),
|
||||
]
|
||||
)]
|
||||
#[SimpleResponse(schema: [], example: [])]
|
||||
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
||||
public function syncWechatUserInfo(Request $request): Response
|
||||
{
|
||||
$params = $request->get();
|
||||
$result = $this->service->syncWechatUserInfo($params);
|
||||
return json($result);
|
||||
}
|
||||
|
||||
#[OA\Get(
|
||||
path: '/wechat/jssdk-config',
|
||||
summary: '获取微信 JSSDK 配置',
|
||||
tags: ['微信模块'],
|
||||
parameters: [
|
||||
new OA\Parameter(name: 'url', description: '当前页面URL', in: 'query', required: true, schema: new OA\Schema(type: 'string')),
|
||||
],
|
||||
responses: [
|
||||
new OA\Response(response: 200, description: '获取成功'),
|
||||
new OA\Response(response: 400, description: '参数错误'),
|
||||
]
|
||||
)]
|
||||
#[SimpleResponse(schema: [], example: [])]
|
||||
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
||||
public function getWechatJssdkConfig(Request $request): Response
|
||||
{
|
||||
$params = $request->get();
|
||||
$result = $this->service->getWechatJssdkConfig($params);
|
||||
return json($result);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user