137 lines
4.8 KiB
PHP
137 lines
4.8 KiB
PHP
<?php
|
|||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
namespace app\api\controller\auth;
|
||
|
|
|
||
|
|
use app\api\controller\Base;
|
||
|
|
use app\service\api\auth\WechatService;
|
||
|
|
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 WechatController extends Base
|
||
|
|
{
|
||
|
|
public function __construct(WechatService $service)
|
||
|
|
{
|
||
|
|
$this->service = $service;
|
||
|
|
}
|
||
|
|
|
||
|
|
#[OA\Post(
|
||
|
|
path: '/auth/wechat',
|
||
|
|
summary: '微信授权登录',
|
||
|
|
requestBody: new OA\RequestBody(
|
||
|
|
required: true,
|
||
|
|
content: new OA\JsonContent(
|
||
|
|
required: ['code'],
|
||
|
|
properties: [
|
||
|
|
new OA\Property(property: 'code', description: '微信授权码', type: 'string'),
|
||
|
|
new OA\Property(property: 'encrypted_data', description: '加密数据', type: 'string'),
|
||
|
|
new OA\Property(property: 'iv', description: '加密向量', type: 'string'),
|
||
|
|
]
|
||
|
|
)
|
||
|
|
),
|
||
|
|
tags: ['微信认证'],
|
||
|
|
responses: [
|
||
|
|
new OA\Response(response: 200, description: '登录成功'),
|
||
|
|
new OA\Response(response: 400, description: '参数错误'),
|
||
|
|
new OA\Response(response: 401, description: '登录失败'),
|
||
|
|
]
|
||
|
|
)]
|
||
|
|
#[SimpleResponse(schema: [], example: [])]
|
||
|
|
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
||
|
|
public function wechatLogin(Request $request): Response
|
||
|
|
{
|
||
|
|
$data = $request->post();
|
||
|
|
$result = $this->service->wechatLogin($data);
|
||
|
|
return json($result);
|
||
|
|
}
|
||
|
|
|
||
|
|
#[OA\Post(
|
||
|
|
path: '/auth/weapp',
|
||
|
|
summary: '微信小程序登录',
|
||
|
|
requestBody: new OA\RequestBody(
|
||
|
|
required: true,
|
||
|
|
content: new OA\JsonContent(
|
||
|
|
required: ['code'],
|
||
|
|
properties: [
|
||
|
|
new OA\Property(property: 'code', description: '小程序登录code', type: 'string'),
|
||
|
|
new OA\Property(property: 'encrypted_data', description: '加密数据', type: 'string'),
|
||
|
|
new OA\Property(property: 'iv', description: '加密向量', type: 'string'),
|
||
|
|
]
|
||
|
|
)
|
||
|
|
),
|
||
|
|
tags: ['微信认证'],
|
||
|
|
responses: [
|
||
|
|
new OA\Response(response: 200, description: '登录成功'),
|
||
|
|
new OA\Response(response: 400, description: '参数错误'),
|
||
|
|
new OA\Response(response: 401, description: '登录失败'),
|
||
|
|
]
|
||
|
|
)]
|
||
|
|
#[SimpleResponse(schema: [], example: [])]
|
||
|
|
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
||
|
|
public function weappLogin(Request $request): Response
|
||
|
|
{
|
||
|
|
$data = $request->post();
|
||
|
|
$result = $this->service->weappLogin($data);
|
||
|
|
return json($result);
|
||
|
|
}
|
||
|
|
|
||
|
|
#[OA\Post(
|
||
|
|
path: '/auth/wechat/scan',
|
||
|
|
summary: '生成微信扫码登录二维码',
|
||
|
|
tags: ['微信认证']
|
||
|
|
)]
|
||
|
|
#[SimpleResponse(schema: [], example: [])]
|
||
|
|
public function generateWechatQrCode(): Response
|
||
|
|
{
|
||
|
|
$result = $this->service->generateWechatQrCode();
|
||
|
|
return Json::success($result);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 检查微信扫码状态
|
||
|
|
*/
|
||
|
|
#[OA\Get(
|
||
|
|
path: '/auth/wechat/scan/status',
|
||
|
|
summary: '检查微信扫码状态',
|
||
|
|
tags: ['微信认证'],
|
||
|
|
parameters: [
|
||
|
|
new OA\Parameter(name: 'scene_id', description: '场景ID', in: 'query', required: true, schema: new OA\Schema(type: 'string')),
|
||
|
|
]
|
||
|
|
)]
|
||
|
|
#[SimpleResponse(schema: [], example: [])]
|
||
|
|
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
||
|
|
public function checkWechatScanStatus(Request $request): Response
|
||
|
|
{
|
||
|
|
try {
|
||
|
|
$sceneId = $request->input('scene_id');
|
||
|
|
if (empty($sceneId)) {
|
||
|
|
return Json::fail('scene_id 不能为空');
|
||
|
|
}
|
||
|
|
$result = $this->service->checkWechatScanStatus($sceneId);
|
||
|
|
return Json::success($result['msg'], $result['data']);
|
||
|
|
} catch (\Exception $e) {
|
||
|
|
return Json::fail($e->getMessage());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#[OA\Get(
|
||
|
|
path: '/auth/wechat/availability',
|
||
|
|
summary: '检查微信登录可用性',
|
||
|
|
tags: ['微信认证'],
|
||
|
|
responses: [
|
||
|
|
new OA\Response(response: 200, description: '查询成功'),
|
||
|
|
]
|
||
|
|
)]
|
||
|
|
#[SimpleResponse(schema: [], example: [])]
|
||
|
|
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
||
|
|
public function checkWechatAvailability(): Response
|
||
|
|
{
|
||
|
|
$result = $this->service->checkWechatAvailability();
|
||
|
|
return Json::success('ok', $result);
|
||
|
|
}
|
||
|
|
}
|